الحصول على النص:هل من الجيد أن يكون معرف الرسالة هو النص الإنجليزي؟

StackOverflow https://stackoverflow.com/questions/216478

سؤال

نحن نستعد لترجمة موقع PHP الخاص بنا إلى لغات مختلفة، ويبدو أن دعم gettext في PHP هو الحل الأمثل.

جميع البرامج التعليمية التي أراها توصي باستخدام النص الإنجليزي كمعرف للرسالة، على سبيل المثال.

الحصول على النص ("مرحبًا!")

ولكن هل هذه حقا فكرة جيدة؟لنفترض أن أحد الأشخاص في مجال التسويق يريد تغيير النص إلى "مرحبًا بكم جميعًا!".إذن، ألا يتعين عليك تحديث كافة ملفات اللغة لأن هذه السلسلة - والتي هي في الواقع معرف الرسالة - قد تغيرت؟

هل من الأفضل أن يكون لديك نوع من المعرف العام، مثل "hello.message"، وملف ترجمة باللغة الإنجليزية؟

هل كانت مفيدة؟

المحلول

وأنا استخدم معرفات ذات مغزى مثل "welcome_back_1" التي ستكون "welcome back, %1" وما أنا دائما اللغة الإنجليزية لغتي "القاعدة" حتى في أسوأ الحالات عندما لا يكون لغة معينة معرف رسالة، وتقع -عودة على اللغة الإنجليزية.

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

نصائح أخرى

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

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

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

أنا لا أتفق بشدة مع إجابة ريتشارد هاريسون التي قال عنها إنها "الطريقة الوحيدة".عزيزي السائل، لا تثق بإجابة تقول أنها الطريقة الوحيدة، لأن "الطريقة الوحيدة" غير موجودة.

إليك طريقة أخرى يتمتع بها IMHO ببعض المزايا مقارنة بنهج ريتشاردز:

  • ابدأ باستخدام الإصدار الأولي من السلسلة الإنجليزية كالأصل.
  • لا تعرض هذه السلاسل الأولية ولكن قم بإنشاء ملف ترجمة للغة الإنجليزية
  • انسخ السلاسل الأولية للترجمة في البداية

مزايا:

  • رمز قابل للقراءة
  • النص الموجود في الكود الخاص بك قريب جدًا إن لم يكن مطابقًا لما يعرضه العرض الخاص بك
  • إذا كنت تريد تغيير النص الإنجليزي، فلا تقم بتغيير السلسلة الأولية ولكن الترجمة
  • إذا كنت تريد ترجمة نفس الشيء مرتين، فما عليك سوى كتابة سلسلة أولية مختلفة قليلًا أو إضافة "نسخة لهذا وذاك" وسيظل لديك رمز قابل للقراءة تمامًا

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

وأيضا إذا تغير النص الانكليزي ثم ربما الترجمات الأخرى تحتاج إلى تحديث؟

في الممارسة ونحن أيضا استخدام معرفات الصرفة بدلا من ذلك النص الانكليزي، لكنه لا يعني أننا يجب أن نفعل الكثير من العمل الإضافي إلى الافتراضي إلى اللغة الإنجليزية.

في كلمة لا تفعل هذا.

وكلمة نفس / العبارة في اللغة الإنجليزية يمكن في كثير من الأحيان لديها ما يكفي أكثر من معنى واحد، ولكل معنى ترجمة مختلفة.

وتحديد هويات ذاكري سلاسل الخاص بك، وعلاج اللغة الإنجليزية باعتبارها لغة أخرى فقط.

واتفق مع غيرها من الملصقات أن أرقام معرف في كودي هي كابوس من أجل قراءة التعليمات البرمجية.

وتحويلة توطين مهندس

هناك الكثير مما يجب مراعاته والإجابة عليه ليست بهذه السهولة.

باستخدام اللغة الإنجليزية البسيطة

الايجابيات

  • من السهل كتابة وقراءة الكود
  • في معظم الحالات، يعمل حتى بدون تشغيل وظائف الترجمة في التعليمات البرمجية

سلبيات

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

استخدام المفاتيح

الايجابيات

  • يمكنك استخدام وظائف منصة الترجمة حتى بالنسبة للغة الإنجليزية.أي.نحن نستخدم منصة Crowdin الجميلة.هناك الكثير من الأدوات المفيدة - أو بالأحرى سير العمل الكامل - لإدارة الترجمة:التصويت على الترجمات المختلفة، وتاريخ الترجمة، والمعاجم (مما يساعد في الحفاظ على تماسك الترجمة/اللغة)، والتدقيق، والموافقة، وما إلى ذلك.استخدام المفاتيح يجعل هذه العملية أكثر سلاسة.

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

سلبيات

  • إعداد مشروع أكثر تعقيدًا.
  • من الصعب استخدام %d و%s وما إلى ذلك.

ولم تكن قد أجبت على سؤالك؟ :)

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

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

هذا يجعلني أشعر أن الإجابة الصحيحة هي استخدام نسخة معدلة من gettext حيث يمكنك وضع سلاسل مثل هذا

_(id, backup_text, context)

_('ABOUT_ME', 'About Me', 'HOMEPAGE')

السياق اختياري

لماذا هكذا؟لأنك تحتاج إلى تحديد النص في النظام باستخدام المعرف الفريد وليس النص الإنجليزي الذي يمكن أن يتكرر في مكان آخر.

يجب عليك أيضًا الاحتفاظ بالنسخة الاحتياطية والمعرف والسياق في نفس المكان في التعليمات البرمجية الخاصة بك لتقليل التناقضات.

يجب أيضًا أن تكون المعرفات قابلة للقراءة، مما يؤدي إلى مشكلة المرادفات والاستخدام المكرر (حتى كمعرفات)، يمكننا وضع بادئة للمعرفات مثل "HOMEPAGE_ABOUT_ME" أو "MAIL_LETTER"، ولكن

  1. ينسى الناس القيام بذلك في البداية ويشكل تغييره لاحقًا مشكلة
  2. إنه أكثر مرونة للنظام ليكون قادرًا على التجميع حسب المعرف والسياق

ولهذا السبب أضفت أيضًا متغير السياق في النهاية

يمكن أن يكون النص الاحتياطي أي شيء تقريبًا، وقد يكون أيضًا "[ABOUT_ME@HOMEPAGE فشل تحميل النص، يرجى الاتصال بـ example@example.com]"

لن يعمل هذا مع برامج تحرير النص الحالية مثل "poedit"، ولكن أعتقد أنه يمكنك تحديد أسماء المتغيرات المخصصة للترجمات مثل "t()" فقط بدون الشرطة السفلية في البداية.

أعلم أن gettext يدعم أيضًا السياقات، لكنه غير موثق جيدًا أو مستخدم على نطاق واسع.

ملاحظة.لست متأكدًا من أفضل ترتيب متغير لفرض تعليمات برمجية جيدة وقابلة للتمديد، لذا نرحب بالاقتراحات.

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

والمشكلة هي مماثلة، إلا أنك ستكون أيضا مسؤولة عن تحديث جميع الروابط ...

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

وبالإضافة إلى الاعتبارات أعلاه، هناك العديد من الحالات حيث كنت تريد "مفتاح" (msgid) أن تكون مختلفة من النص المصدر (اللغة الإنجليزية). على سبيل المثال، في رأي HTML، وأنا قد أريد أن أقول [س س س س] حيث الوجهة وتسمية تلك العلامة مرساة تعتمد على لغة المستخدم. مثلا قد يكون وجود صلة لشبكة اجتماعية، وفي الولايات المتحدة سيكون الفيسبوك ولكن في الصين سيكون يبو. لذلك قد يكون شيء من هذا القبيل MsgIds socialSiteUrl وsocialSiteLabel.

ويمكنني استخدام المزيج.

لسلاسل الأساسية أنني لا أعتقد أن هناك صراعات / التغييرات / معاني غريبة، وأنا سوف تجعل المفتاح يكون نفس الإنجليزية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top