سؤال

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

  • action.class.php:

    $this->culture = 'pt_BR';
    
  • templates/search_box.php:

    <h1><?php echo __('Destination') ?></h1>
    
  • i18n/pt_BR/messages.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <xliff version="1.0">
      <file datatype="plaintext" source-language="en"
            target-language="pt_BR" original="messages">
        <body>
          <note>
            SEARCH BOX
          </note>
          <trans-unit id="0">
            <source>Destination</source>
            <target>Destino</target>
          </trans-unit>
        </body>
      </file>
    </xliff>
    

هل يوجد نظام مشابه ويفضل أن يكون متوافقًا ومتوفر كحزمة PHP؟

أنا مهتم بالحفاظ على xml ملف مع ترجمات ، لكنني يمكن أن أعيش أيضًا بتنسيق مختلف.

تحديث

ما لدي الآن مستوحى من إجابة @akky:

  • composer.json:

    {
        "name": "example/layout",
        "description":
        "Provides common layout components such as header / footer.",
        "license": "proprietary",
        "require": {
            "symfony/translation": "2.4.*",
            "symfony/config": "~2.0"
        }
    }
    
  • i18n/messages.pt_BR.xliff:

    <?xml version="1.0" encoding="utf-8"?>
    <xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
      <file source-language="en" datatype="plaintext" original="messages">
        <body>
          <trans-unit id="0">
            <source>Destination</source>
            <target>Destino</target>
          </trans-unit>
        </body>
      </file>
    </xliff>
    

    لسوء الحظ، ال <note> تسبب العنصر في رسائل خطأ ، ولذا قمت بإزالتها.

  • public/helper.inc.php:

    <?php
    
    require_once '../vendor/autoload.php';
    
    use Symfony\Component\Translation\Translator;
    use Symfony\Component\Translation\MessageSelector;
    use Symfony\Component\Translation\Loader\ArrayLoader;
    use Symfony\Component\Translation\Loader\XliffFileLoader;
    use Symfony\Component\Config\Resource\FileResource;
    
    $loader = new XliffFileLoader();
    $catalogue = $loader->load('../i18n/messages.pt_BR.xliff', 'pt_BR');
    
    function __($text) {
      global $catalogue;
      return $catalogue->get($text);
    }
    
  • public/header.php:

    <?php require_once('helper.inc.php') ?>
    
    <h1><?php echo __('Destination') ?></h1>
    
هل كانت مفيدة؟

المحلول

اسم تنسيق ملف المورد هو XLIFF.قد تجد XLIFF يتعامل مع حزم php، بالإضافة إلى محولات xliff2 (تنسيق i18n المفضل لديك).

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

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