سؤال

في كل مكان حتى عندما يتعلق الأمر جعل متعدد اللغات التطبيق في PHP الجميع يقول أن gettext هو أفضل طريقة للقيام بذلك.أنا أريد فقط أن أعرف لماذا ؟

مثل ما يجعل هذا الأسلوب أدناه ، أقل كفاءة ثم استخدام gettext?

<?PHP
//Have seperate language files for each language I add, this would be english file
function lang($phrase){
    static $lang = array(
        'NO_PHOTO' => 'No photo\'s available',
        'NEW_MEMBER' => 'This user is new'
    );
    return $lang[$phrase];
}
//Then in application where there is text from the site and not from users I would do something like this
echo lang('NO_PHOTO');  // No photo's available would show here
?>
هل كانت مفيدة؟

المحلول

شيء جيد مع gettext هو نوع من بحكم الواقع القياسية :يتم استخدامه من قبل الكثير من التطبيقات في العديد من اللغات -- وهو ما يعني كثير من الناس العمل معها.

آخر شيء جيد (ربما نتيجة ، أو قضية ، أو كليهما ، في الواقع) هو أن العديد من الأدوات مثل Poedit فعلى سبيل المثال ، توجد تحرير ملفات gettext :لم يكن لديك للذهاب من خلال بعض PHP (أو أيا كان) التعليمات البرمجية المصدر.وهذا أمر مهم جدا :

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

نصائح أخرى

هناك عدد قليل من العيوب في "تنفيذ".

  • على عكس gettext انها تنفذ في php. ;-)
  • فإنه يحتفظ كل ترجمة في الذاكرة لا يهم إذا كنت تستخدم أو لا
  • والذي هو أسوأ من ذلك ، instantiates مجموعة كاملة من البيانات كلما كنت في حاجة سطر واحد (الأمر يستغرق بعض الوقت و بعض الذاكرة في PHP)
  • إنه غير قادر على التعامل مع صيغ الجمع للعديد من اللغات
  • رمز باستخدام هذه الترجمة لا يكاد للقراءة
  • رمز باستخدام هذه الترجمة لا جزءا لا يتجزأ من تراجع لاستخدامها في حالة غياب الترجمة.

في الأساس, التطبيق الخاص بك يستخدم على نطاق واسع في العديد من المشاريع الذين يموتون من أجل طلب دعم التدويل و مبتكرة للغاية اختراع العجلة ، ولكن لا أهتم قليلا عن النتيجة و لا تعرف الجيد من السيئ.

انها نفس الإجابة على جميع الأسئلة تبحث مثل :

ما هو أفضل مع [hightly ثبت و تستخدم إلى حد كبير حل] من [لي hacky مغرور مستجد تنفيذ]?

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

أنا لا أنتقد ، أن يحاول إقناعنا أننا smarties وغيرها مبالغة المبرمجين.هذا جزء من طريقة للتعلم.أنا في الواقع باستمرار تفعل ذلك ، إعادة اختراع العجلة أو الرياء مع الأصدقاء / الزملاء عن بعض قبلة رمز اخترقت.مع مرور الوقت, كنت فقط في نهاية المطاف القيام بذلك أقل وأقل ، و أفترض أنك يتوقف عن فعل ذلك اليوم عندما كنت فعلا تستحق أن تفعل ذلك :-)

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

وقارن هذا:

printf(_("No photo available (error %d)."), err);

ومع هذا:

printf(i18n(NO_PHOTO), err);
// or some variant of the same thing

في الحالة الأولى، يمكنك ان ترى الرسالة هناك حق في رمز وتعرف بالضبط ما تقوم به. وفي الحالة الأخيرة، ترى فقط ثابت رمزي ويكون للبحث عن الدقيق النص وشكل المتخصصين.

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