صيغ الترجمة: توطين صعب لنظام iOS وما بعده

تطورت حبكة هذه القصة عندما أتيحت لي الفرصة لتنفيذ إحدى مهام منتج شركتنا Jivo لمنصة iOS. لكني سأبدأ بمقدمة قصيرة.

التعريب هو أحد الموضوعات التي تتم مناقشتها بشكل متكرر في تطوير الأجهزة المحمولة.

بشكل أساسي حول هذا الموضوع فيما يتعلق بمنصة iOS ، تتأثر الجوانب التالية:

  • خدمات لتبسيط تنظيم ومزامنة الترجمات ؛

  • أفضل الممارسات لترجمة ملفات xib ؛

  • الوظائف الإضافية الإضافية لوقت الترجمة للتحقق من الترجمة.

ومع ذلك ، فإن قصتنا لا تتعلق بذلك. لمزامنة الترجمات ، لقد نجحنا في دمج خدمة جهة خارجية في شركتنا ، بدلاً من ملفات xib ، ونفضل الكود ، ولا نستخدم الوظائف الإضافية لوقت الترجمة حتى الآن (ومع ذلك ، هناك أفكار حول التنفيذ).

تدور قصتنا حول كيف سنحت لنا يومًا ما فرصة لمواجهة مهمة كان من الضروري فيها التوفيق عمليًا بين ترجمات نفس العبارة في المعنى ، والتي تم تعديلها قليلاً اعتمادًا على السياق.

كيف بدأ كل شيء

منتجنا الآن لديه وظيفة لضبط التذكيرات. يمكن أن تكون التذكيرات مفيدة في حالة رغبة المشغل في العودة إلى العميل بعد قليل. على سبيل المثال ، لتوضيح ما إذا كانت هناك أسئلة إضافية قد ظهرت بعد فترة من الاستشارة ، مما يساعد على زيادة الولاء. يمكن تعيين تذكير لفترة معينة لنفسك أو لمشغل آخر ، ويمكنك اختياريًا تحديد تعليق نصي (وصف) ، إذا لزم الأمر.

بالطبع ، يتم تكرار حقيقة تعيين مثل هذا التذكير في شريط الحوار بواسطة رسالة النظام. وهنا بالضبط تم اكتشاف الصعوبة: اعتمادًا على تكوين التذكير ، يمكن أن تبدو تسمية المعلومات مختلفة تمامًا. على سبيل المثال (من النسخة الإنجليزية للواجهة):

◼︎ You created the reminder for agent Alex on 08/29/20 at 4:30 PM



◼︎ Agent Nick created the reminder "Ask about any issue happened since our call" on 10/03/20 at 11:30 AM



◼︎ Agent Alex completed the reminder on 12/05/20 at 5:00 PM

, :

◼︎ –

◼︎

◼︎

◼︎ – , ,

, 32 . , , , . , .

, « » , :

// either...
let caption = format(
  "REMINDER_CREATE_SELF_FOR_SELF", // !!!
  reminder.time)

// or...
let caption = format(
  "REMINDER_CREATE_ANOTHER_WITH_COMMENT_FOR_SELF", // !!!
  reminder.author.name,
  reminder.comment,
  reminder.time)

// etc...

. , , , . , , . , :

if reminder.author.isMe {
  slices += [format("REMINDER_AUTHOR_SELF")]
}
else {
  slices += [format("REMINDER_AUTHOR_ANOTHER", reminder.author.name)]
}

if let comment = reminder.comment {
  slices += [format("REMINDER_COMMENT", comment)]
}

if reminder.target.isMe {
  slices += [format("REMINDER_FOR_SELF")]
}
else {
  slices += [format("REMINDER_FOR_ANOTHER", reminder.target.name)]
}

slices += [format("REMINDER_TIME", reminder.time)]

let caption = slices.joined()

, - . .

. bb- , . , , , . « ».

( ). , , .

– , , $creatorName, , .

– , , $[Agent $creatorName ## You]; - Agent $creatorName You, ##; , ; . , , ( ) ; .

– , , , $[Agent $creatorName ## :another: Another agent ## You]; - Agent $creatorName, Another agent You; Another agent another, , , ( ).

. , :

◼︎ Agent Nick created the reminder on 10/03/20 at 11:30 AM



◼︎ You created the reminder "Ask about any issue happened since our call" on 10/03/20 at 11:30 AM



◼︎ Agent Nick created the reminder "Ask about any issue happened since our call" on 10/03/20 at 11:30 AM



◼︎ You created the reminder for Alex on 10/03/20 at 11:30 AM

:

$[Agent $creatorName ## You] created the reminder $["$comment"] $[for $targetName] on $date at $time

, . , , . , ( Swift, C++, ).

  • :

let parser = PureParser()
let formula = "$[Agent $creatorName ## You] created the reminder $[\"$comment\"] $[for $targetName] on $date at $time"

parser.assign(variable: "creatorName", value: "Nick")
parser.assign(variable: "date", value: "10/03/20")
parser.assign(variable: "time", value: "11:30 AM")

let result = parser.execute(formula, collapseSpaces: true, resetOnFinish: true)
print(result)

// Agent Nick created the reminder on 10/03/20 at 11:30 AM
  • :

let parser = PureParser()
let formula = "$[Agent $creatorName ## You] created the reminder $[\"$comment\"] $[for $targetName] on $date at $time"

parser.assign(variable: "comment", value: "Ask about any issue happened since our call")
parser.assign(variable: "date", value: "10/03/20")
parser.assign(variable: "time", value: "11:30 AM")

let result = parser.execute(formula, collapseSpaces: true, resetOnFinish: true)
print(result)

// You created the reminder "Ask about any issue happened since our call" on 10/03/20 at 11:30 AM
  • :

let parser = PureParser()
let formula = "$[Agent $creatorName ## You] created the reminder $[\"$comment\"] $[for $targetName] on $date at $time"

parser.assign(variable: "creatorName", value: "Nick")
parser.assign(variable: "comment", value: "Ask about any issue happened since our call")
parser.assign(variable: "date", value: "10/03/20")parser.assign(variable: "time", value: "11:30 AM")

let result = parser.execute(formula, collapseSpaces: true, resetOnFinish: true)
print(result)

// Agent Nick created the reminder "Ask about any issue happened since our call" on 10/03/20 at 11:30 AM
  • :

let parser = PureParser()
let formula = "$[Agent $creatorName ## You] created the reminder $[\"$comment\"] $[for $targetName] on $date at $time"

parser.assign(variable: "targetName", value: "Alex")
parser.assign(variable: "date", value: "10/03/20")
parser.assign(variable: "time", value: "11:30 AM")

let result = parser.execute(formula, collapseSpaces: true, resetOnFinish: true)
print(result)

// You created the reminder for Alex on 10/03/20 at 11:30 AM
  • : ?

let parser = PureParser()
let formula = "$[Agent $creatorName ## :another: Another agent ## You] created the reminder $[\"$comment\"] $[for $targetName] on $date at $time"

parser.activate(alias: "another", true)
parser.assign(variable: "date", value: "10/03/20")
parser.assign(variable: "time", value: "11:30 AM")

let result = parser.execute(formula, collapseSpaces: true, resetOnFinish: true)
print(result)

// Another agent created the reminder on 10/03/20 at 11:30 AM

( , , ) , . .

المكتبة مكتوبة بلغة C ++ ، وهناك أيضًا غلاف في C و Swift .

ل سويفت يوفر الاتصال عبر CocoaPods و سويفت مدير مجموعة .

مستودع جيثب




All Articles