ما هي الأجزاء التي يمكن ترجمتها أثناء توطين JSON وما هي الأجزاء التي لا يجب تغييرها؟
تتم ترجمة الأزرار الموجودة على الصفحة إلى اللغة الإنجليزية، ولكن لا يمكن للبرنامج العثور على عنصر التكوين. يحدث هذا النوع من الفشل غالبًا في توطين JSON: يتم تسليم كل سلسلة في الكائن إلى المترجم، ويتم أيضًا تغيير اسم المفتاح والتوجيه وترميز الأعمال معًا. النهج الأكثر أمانًا لا يتمثل في تخمين أي من السلاسل تبدو مثل الكلام البشري، ولكن في السماح صراحةً بترجمة أي مسارات.
الفشل الشائع في ترجمة JSON هو: تم تغيير أزرار الصفحة إلى اللغة الإنجليزية، ولكن لا يمكن للبرنامج العثور على عناصر التكوين المقابلة. السبب عادةً هو أن كل سلسلة في الكائن يتم تسليمها إلى المترجم لمعالجتها، ويتغير أيضًا اسم المفتاح والتوجيه وترميز الأعمال وفقًا لذلك. هذه المقالة مكتوبة للمطورين وموظفي الترجمة المسؤولين عن التكوين الدولي. وهو يشرح كيفية تحديد المسارات الميدانية القابلة للترجمة أولاً ثم القيام بالقبول.
تستخدم الأمثلة عينات تركيبية لتوضيح طرق المعالجة، وقد تم فحص الكود في بيئة معزولة، لكن هذا لا يمثل ضمانًا لجميع الملفات الحقيقية أو أداء المنتج. قبل معالجة المستندات المهمة، يرجى الاحتفاظ بالنسخ الأصلية ومراجعتها وفقًا للحدود وبنود القبول في النص.
ما الذي يمكن ترجمته أثناء توطين JSON؟ استنتاج جملة واحدة
سيتم فقط ترجمة مسارات كتابة الإعلانات المدرجة مسبقًا. ستظل أسماء المفاتيح وقيم التوجيه ورموز الأعمال كما هي، وسيتم استخدام قائمة التحقق من القبول للتأكد من أن الأجزاء التي لم تتغير لم يتم تغييرها بالفعل.
| حالتك | الممارسات الموصى بها | سبب |
|---|---|---|
كتابة واجهة، مثل buttons.save | ضعه في قائمة المسارات المسموح بها وقم بتأكيدها قبل الترجمة. | المسار عبارة عن عنوان واضح، وهو أكثر موثوقية من تخمين ما إذا كانت السلسلة تشبه الكلام البشري. |
| قيمة التوجيه، رمز الخدمة | اتركه كما هو ولا تدخل في نطاق الترجمة | ويعتمد البرنامج على هذه القيم. بعد التعديل، ستكون هناك مشكلة تتمثل في عدم إمكانية العثور على عنصر التكوين. |
| العناصر النائبة ومقتطفات HTML وعناوين URL في حقول النسخ | أضف قواعد الحماية من المستوى التالي | قد تظل الحقول الموجودة ضمن المسار المسموح بها تحتوي على محتوى يحتاج إلى الحماية |
| عناصر المصفوفة | استخدم تعيين المعرف عندما يكون هناك معرف ثابت | بعد إعادة ترتيب العناصر، قد يشير الفهرس إلى نسخة أخرى |
| يختفي المسار بعد تحديث الملف المصدر | أبلغ عن خطأ وقم بتحديث الإصدار المصدر دون إعادة كتابة الترجمة القديمة تلقائيًا. | قد تتسبب أسماء الحقول المتشابهة في كتابة الترجمة في موضع خاطئ |
ابدأ بمسار الحقل بدلاً من اجتياز جميع السلاسل
تعتبر معاملة buttons.save كعنوان أكثر موثوقية من استبدال السلسلة "حفظ" عندما تراها. قد تظهر الجملة نفسها في نسخة الواجهة وعينات السجل وحالات الاختبار في نفس الوقت، وقد لا تكون الترجمة مطلوبة في الأماكن الثلاثة جميعها.
يجب أن يتم تمثيل المسارات بشكل لا لبس فيه باستخدام الصفوف أو مؤشرات JSON. عند الربط بالنقاط ببساطة، سيحدث الغموض إذا كان اسم المفتاح نفسه يحتوي على نقاط.
المثال التالي يحد فقط من مسارين محددين، ويترك المحتوى الآخر كما هو. هذه استراتيجية ترجمة لهذه المقالة، وليست أحد متطلبات تنسيق JSON نفسه. تحتوي العينة التركيبية على نص الواجهة وقيمة التوجيه التي يجب عدم تغييرها لتسهيل التحقق من الحدود.
قم فقط بتغيير القيم المسموح بها صراحةً في المرة الواحدة
import copy
source = {"buttons": {"save": "保存", "cancel": "取消"},
"route": "/settings", "version": 1}
approved = {("buttons", "save"): "Save",
("buttons", "cancel"): "Cancel"}
def apply_texts(document, replacements):
result = copy.deepcopy(document)
for path, translated in replacements.items():
if not path or not isinstance(translated, str):
raise ValueError("invalid replacement")
parent = result
for key in path[:-1]:
parent = parent[key]
key = path[-1]
if key not in parent or not isinstance(parent[key], str):
raise ValueError("target must be an existing string")
parent[key] = translated
return result
result = apply_texts(source, approved)
assert result["buttons"]["save"] == "Save"
assert result["route"] == source["route"]
assert source["buttons"]["save"] == "保存"
try:
apply_texts(source, {("version",): "one"})
except ValueError:
pass
else:
raise AssertionError("numeric field must be rejected")
يوضح المثال مستوى الكائن فقط، ولا يطبق فهرسة المصفوفة، ولا يستدعي خدمة الترجمة. عند الإرسال إلى المسار الحقيقي، يجب تحديد قائمة المسارات المسموح بها قبل الترجمة، ولا يمكن السماح للطرف الذي يقوم بإنشاء الترجمة بتوسيع نطاق تعديلاته في نفس الوقت.
يمكن للنسخة العميقة أن تمنع تعديل كائنات الإدخال في مكانها، ولكنها ليست نظام معاملات. لا تزال هناك حاجة إلى تصميم الثبات بشكل منفصل.
القبول يعتمد على الأجزاء التي لم تتغير
| يفحص | نتيجة طبيعية | الإجراءات في حالة الاستثناء |
|---|---|---|
| جمع اسم المفتاح | متوافق مع الملف المصدر | منع الكتابة فوق الملف الأصلي |
| طريق غير مصرح به | تبقى القيمة دون تغيير | البحث عن تعديلات خارج الحدود |
| نوع الحقل المستهدف | لا تزال سلسلة | رفض تحويلات النوع الضمني |
| المسار المفقود | الإبلاغ عن خطأ بوضوح | قم بتحديث الإصدار المصدر دون إنشاء الحقول تلقائيًا |
مجرد التحقق من أن "اللغة الهدف موجودة" لا يكفي. يجب أيضًا حفظ قائمة تجزئات ومسارات الملف المصدر. إذا تم حذف المسار بعد تحديث الملف المصدر، فلا يمكن إعادة كتابة الترجمة القديمة تلقائيًا بأسماء حقول مماثلة.
يجب النظر في المصفوفات والقيم الخالية والمفاتيح المكررة بشكل منفصل
- المصفوفة: بعد إعادة ترتيب العناصر، قد لا يشير الفهرس إلى النسخة الأصلية. عندما يكون هناك معرف ثابت، يتم استخدام المعرف أولاً لرسم الخرائط.
- Null:
nullليست سلسلة فارغة ويجب عدم استبدالها بالحرف "فارغ" لتسهيل الترجمة. - مفتاح مكرر: ربما تم فقدان معلومات المفتاح المكررة بعد اكتمال تحليل JSON العادي. إذا كنت تريد رفض المفاتيح المكررة، فيجب عليك التعامل معها أثناء مرحلة التحليل بدلاً من انتظار انتهاء الترجمة. مرجع وثائق بايثون JSON.
هذا المثال مناسب لتوطين التكوين الجيد التنظيم، وليس مترجمًا تلقائيًا لـ JSON. عند قبول الترجمة، تأكد أولاً من أن البنية والحقول المحمية لم تتغير، ثم ناقش ما إذا كانت اللغة طبيعية أم لا. سيكون تسلسل استكشاف الأخطاء وإصلاحها أكثر وضوحًا.
📊 المقارنة الأساسية
| طريق | يمارس | المخاطر الرئيسية | السيناريوهات القابلة للتطبيق |
|---|---|---|---|
| التكرار من خلال جميع السلاسل | يتم إعطاء كل سلسلة للمترجم | قد يتم تغيير أسماء المفاتيح والتوجيه ورموز الأعمال معًا | لم يتم تناولها في المقال الأصلي |
| القائمة البيضاء حسب مسار الحقل | قم بترجمة المسارات المحددة مسبقًا فقط | تحتاج إلى الحفاظ على قائمة المسار | توطين التكوين جيد التنظيم |
🎯 ما هي الطريقة المناسبة لك؟
###إذا كنت......
- للحفاظ على ملف تكوين الواجهة، إذا كنت تريد أن تكون نسخة الزر قابلة للترجمة وأن يظل تكوين البرنامج دون تغيير، فيرجى استخدام القائمة البيضاء لمسار الحقل وتحديد قائمة المسار قبل الترجمة.
- قد يتم إعادة ترتيب عناصر المصفوفة، يرجى إعطاء الأولوية لاستخدام المعرفات الثابتة لرسم الخرائط بدلاً من الاعتماد على الفهارس.
- سيتم تحديث الملف المصدر بشكل مستمر. الرجاء حفظ تجزئة الملف المصدر وقائمة المسار. إذا اختفى المسار، سيحدث خطأ ولن تتم إعادة كتابة الترجمة القديمة تلقائيًا.
- إذا كنت بحاجة إلى معالجة تسليم المستندات الحقيقية، فيرجى إنشاء قائمة مراجعة للمسارات المسموح بها والنص الأصلي والترجمة ومراجعتها واحدة تلو الأخرى.
❓ الأسئلة الشائعة (الأسئلة الشائعة)
1. لماذا لا تترجم مباشرة جميع السلاسل في JSON؟
لأن نفس السلسلة قد تكون نسخة واجهة أو اسم مفتاح برنامج أو رمز عمل في نفس الوقت. عندما يتم تسليم كل سلسلة إلى المترجم، قد يتم أيضًا تغيير اسم المفتاح والتوجيه وترميز الأعمال معًا، مما يتسبب في عدم عثور البرنامج على عنصر التكوين.
2. ما هي مشكلة استخدام النقاط لربط المسارات؟
إذا كان اسم المفتاح نفسه يحتوي على نقطة، فسيؤدي تسلسل النقاط إلى الغموض. توصي المقالة الأصلية باستخدام تمثيلات لا لبس فيها مثل الصفوف أو مؤشرات JSON.
3. هل يكفي التحقق مما إذا كانت اللغة الهدف مضمنة في الترجمة؟
لا يكفي. يجب عليك أيضًا التحقق مما إذا كانت مجموعة أسماء المفاتيح متوافقة مع الملف المصدر، وما إذا كانت قيمة المسار غير المصرح به تظل دون تغيير، وما إذا كان الحقل الهدف لا يزال عبارة عن سلسلة، وما إذا كان يتم الإبلاغ عن المسارات المفقودة بشكل صريح على أنها أخطاء.
4. هل يمكن استبدال null بالنص "فارغ"؟
لا أستطيع. null ليست سلسلة فارغة ويجب عدم استبدالها بنص لتسهيل الترجمة.
5. ما الذي يجب استخدامه لرسم الخرائط عند ترجمة المصفوفات؟
عندما يكون هناك معرف ثابت، يتم استخدام المعرف أولاً لرسم الخرائط. وبالاعتماد على الفهرس فقط، قد تتم مطابقة النسخة الخاطئة بعد إعادة ترتيب العناصر.
📝 ملخص
قبل ترجمة تكوين JSON، قم أولاً بتوضيح المسارات التي تسمح بالترجمة، ثم استخدم قائمة التحقق من القبول للتحقق من الأجزاء التي لم تتغير. وهذا يجعل من السهل تحديد المشكلة عندما يحدث خطأ ما.
جربه الآن: قم بتحميل المستند لبدء الترجمة، مع الاحتفاظ بالتخطيط الأصلي


