ما هي الأجزاء التي يمكن ترجمتها أثناء توطين 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، قم أولاً بتوضيح المسارات التي تسمح بالترجمة، ثم استخدم قائمة التحقق من القبول للتحقق من الأجزاء التي لم تتغير. وهذا يجعل من السهل تحديد المشكلة عندما يحدث خطأ ما.

جربه الآن: قم بتحميل المستند لبدء الترجمة، مع الاحتفاظ بالتخطيط الأصلي

تاريخ التحديث: 2026-11-14