1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| # 增加以下內容到 composer.json { "require": { "symfony/translation": "2.3.x-dev", "symfony/config": "2.3.x-dev", "symfony/twig-bridge": "2.3.x-dev" } }
# 更新新增了的 vendor php composer.phar update
# 加入新的 vendor 到專案中 use Symfony\Component\Translation\Translator; use Symfony\Component\Translation\MessageSelector; use Symfony\Component\Translation\Loader\ArrayLoader; use Symfony\Component\Translation\Loader\YamlFileLoader; use Symfony\Bridge\Twig\Extension\TranslationExtension;
# 設置語系檔案的存放位置 define('LOCALE_ROOT', './locale');
# 設定翻譯物件 (支持 php array 和 yaml 文件) $translator = new Translator('en_US', new MessageSelector()); $translator->setFallbackLocale(array('en_US')); $translator->addLoader('array', new ArrayLoader()); $translator->addLoader('yaml', new YamlFileLoader());
foreach(glob(LOCALE_ROOT."/*") as $locale_resource) { if (preg_match('/.(php|yaml)$/', $locale_resource) == true) { $path_info = pathinfo($locale_resource);
$extension = $path_info['extension']; $resource = $locale_resource; if (strtolower($path_info['extension']) == 'php') { $extension = "array"; $resource = require($resource); } $translator->addResource($extension, $resource, $path_info['filename']); } }
# 增加 views 裡面 trans filter 的支持 Views\Twig::$twigExtensions = array( 'Twig_Extensions_Slim', new TranslationExtension($translator) );
# locale/en_US.php 文件 <?php return array( 'Hello %name%' => 'Bonjour %name%', );
# locale/en_US.yaml 文件 'Hello %name%': Bonjour %name%
# 測試在程式中的翻譯效果 echo $translator->trans('Hello %name%', array("%name%" => "abc"));
# 測試在 Twig 模板中的翻譯效果 {{ "Hello %name%" | trans({ '%name%': "abc" }) }}
{% trans with {'%name%': 'abc'} %} Hello %name% {% endtrans %}
|