سؤال

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

على سبيل المثال، لدي أشياء مثل تسجيل الدخول حيث لدي متغير يوضح نوع الخطأ.

$this->translate('page-error-' . $error);

عندما أقوم بالتحديث التلقائي من poedit، تتم قراءة هذا مثل "خطأ في الصفحة-".ما أفعله هو أن لدي ملفًا أقوم فيه بإجراء مكالمات وهمية لطريقة الترجمة مع جميع المفاتيح الممكنة لإضافتها إلى قصيدتي عند التحديث التلقائي.

أنا لا أحب هذا الوضع بشكل خاص.كيف تقومون بذلك يا شباب.

شكرا لأفكارك

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

المحلول

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

نصائح أخرى

هل تحاول شيء من هذا القبيل

$this->translate(sprintf('page-error-%s', $error));

جئت عبر نفس المشكلة.

على سبيل المثال لدي

في PHP

//Gives FORM_HEADER_ADD or FORM_HEADER_EDIT
echo $this->translate('FORM_HEADER_' . strtoupper($this->data)); 

عندما أقوم بالمزامنة مع poedit، فإنه سيلتقط "FORM_HEADER_" وهو ليس معرفًا قمت (بإنشائه) في الكود.

لذلك اضطررت إلى حل المشكلة الخاصة بإعطاء معرفات Poedit الكاملة وقمت بحلها عن طريق القيام بما يلي في php

echo ($this->data === 'add') ? $this->translate('FORM_HEADER_ADD') : $this->translate('FORM_HEADER_EDIT');

تحديث!

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

  1. أنشئ التطبيق واستخدم أكبر عدد ممكن من المعرفات الثابتة.
  2. تمكين تسجيل المعرفات (الديناميكية) غير المترجمة

    protected function _initMyTranslate(){
    
        $date = new Zend_Date();
        $fileName = sprintf('/../logs/translation_%1$s.log', $date->toString('dd-MM'));
    
        $writer = new Zend_Log_Writer_Stream(APPLICATION_PATH . $fileName);
        $log    = new Zend_Log($writer);
    
        // get the translate resource from the ini file and fire it up
        $resource = $this->getPluginResource('translate');
        $translate = $resource->getTranslate();
    
        // add the log to the translate
        $translate->setOptions(
                array(
                    'log'             => $log,
                    'logUntranslated' => true
                )
            );
    
        // return the translate to get it in the registry and so on
        return $translate;
    }
    
  3. استخدم Poedit للمزامنة مع المصدر وترجمة السلاسل التي تم العثور عليها.

  4. أثناء مرحلة الاختبار/التصحيح، تحقق من السجل بحثًا عن السلاسل غير المترجمة.
  5. قم بإضافة السلاسل غير المترجمة إلى ملف .po.

    msgid "IDENTIFIER"
    msgstr "TRANSLATION STRING"
    
  6. افتح ملف po واحفظه لإنشاء ملف mo (لا تقم بالمزامنة مع المصدر وإلا فقد كل شيء).

تحديث 2.

أستخدم الآن ملفًا منفصلاً للمعرفات اليدوية الخاصة بي، باستخدام محرر النصوص (gedit/notepad).الآن لدي ملفين:

  1. تم إنشاؤه تلقائيًا بواسطة poedit المسمى <language>.po
  2. ملف تم تحريره يدويًا يسمى <language>_manual.po

لقد قمت بتكوين الترجمة في application.ini للبحث عن كافة الملفات الموجودة في دليل اللغة

resources.translate.adapter = gettext
resources.translate.content = APPLICATION_PATH "/../library/languages/"
resources.translate.locale = auto ;use en to force english or nl for dutch..etc
resources.translate.scan = directory
resources.translate.options.disableNotices = false

إذا كنت تريد الترجمة إلى لغة أخرى في poedit، فافعل الملف -> كتالوج جديد من ملف POT، وابدأ في ترجمة سلاسلك المضافة يدويًا.

إذا كان لديك عدد محدود من الأخطاء، يمكنك إضافة بعض رمز وهمية داخل حالة if (false)، الذي هو أن يكون PoEdit التقاط ترجمة غرض وحيد.

وعلى سبيل المثال:

if (false) {
  _('role_visitor');
  _('role_hiker_reader');
  _('role_hiker');
  _('role_translator');
  _('role_proofreader');
  _('role_moderator');
  _('role_moderator_2');
  _('role_moderator_3');
  _('role_admin');
}

ويمكنك ثم ترجمة مع:

$translated_role = _('role_' . $role);

وقروض ل: <لأ href = "http://eng.marksw.com/2012/12/05/how-to-expose-dynamic-translatable-text-to-translation-tools-like-poedit/" يختلط = "نوفولو noreferrer"> http://eng.marksw.com/2012/12/05/how-to-expose-dynamic-translatable-text-to-translation-tools-like-poedit/

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