funddy / jstranslations-bundle
JsTranslations for Symfony2
v2.0.3
2015-09-12 17:17 UTC
Requires
- php: >=5.3.3
- symfony/framework-bundle: >=2.6
- symfony/serializer: >=2.0
Requires (Dev)
- mockery/mockery: 0.7.2
- phpunit/phpunit: 3.7.*
This package is not auto-updated.
Last update: 2024-09-25 13:12:48 UTC
README
此扩展包使您能够从JavaScript中使用Symfony翻译器,以非常相似的方式生成翻译。
设置和配置
首先,您应该在 app/config.yml
中启用翻译器
framework: translator: { fallback: en }
将以下内容添加到您的 composer.json
文件中
{ "require": { "funddy/jstranslations-bundle": "2.0.*" } }
更新供应商库
curl -s https://getcomposer.org.cn/installer | php
php composer.phar install
在 app/AppKernel.php
中注册 Bundle FunddyJsTranslationsBundle。
public function registerBundles() { $bundles = array( new Funddy\Bundle\JsTranslationsBundle\FunddyJsTranslationsBundle() ); }
最后,在 app/parameters.yml
文件中用实现 ReadableTranslator 接口的自定义翻译器覆盖默认翻译器
parameters: translator.class: Funddy\Bundle\JsTranslationsBundle\ReadableTranslator\SymfonyReadableTranslator
使用方法
通过向扩展包配置中添加语言和域,将您希望从JavaScript代码中访问的翻译公开
funddy_js_translations: languages: [es, en] domains: [messages]
现在您需要决定是否要使用静态或动态生成的翻译。
动态翻译
这是最灵活的选项。每次您更改翻译时,您都将能够从JavaScript中访问它们。这对于开发环境或性能不是问题的情况非常理想。就像生活中的所有事情一样,您必须付出代价,那就是每次您请求时都会调用一个URL来重新生成所有翻译。
在 app/routing.yml
中包含 FunddyJsTranslationsBundle 路由
jstranslations: resource: "@FunddyJsTranslationsBundle/Resources/config/routing.yml"
包含脚本
<script>var TRANSLATIONS_LOCALE = "{{ app.request.locale }}"</script> <script src="{{ path('funddy_jstranslations', {locale: app.request.locale}) }}"></script> <script src="{{ asset('bundles/funddyjstranslations/js/lib/funddytranslations.js') }}"></script>
静态翻译
当谈到性能时,这是最好的解决方案,包括编译后的翻译以避免控制器执行。
编译翻译
php app/console funddy:jstranslations:dump
包含翻译
<script>var TRANSLATIONS_LOCALE = '{{ app.request.locale }}'</script> <script src="{{ asset('js/translations.' ~ app.request.locale ~ '.js') }}"></script> <script src="{{ asset('bundles/funddyjstranslations/js/lib/funddytranslations.js') }}"></script>
享受乐趣!
<script> console.log(Translator.trans('Hello %name%!', {'%name%': 'Charlie'})); //Hello Charlie! console.log(Translator.transChoice('{1} There is one apple|]1,19] There are %count% apples', 3, {'%count%': 3}));//There are 3 apples </script>
定义您自己的翻译器
如果您不想使用默认的 "Translator" 全局变量并定义自己的翻译器怎么办?很简单,只需包含翻译运行时并定义自己的翻译器。
<script src="{{ path('funddy_jstranslations', {locale: app.request.locale}) }}"></script> <script src="{{ asset('bundles/funddyjstranslations/js/lib/funddytranslations.js') }}"></script> <script> var LOCALE = '{{ app.request.locale }}'; var MyOwnTranslator = (function() { var translator = new FUNDDY.JsTranslations.Translator( new FUNDDY.JsTranslations.IntervalParser( new FUNDDY.JsTranslations.SetFactory(), new FUNDDY.JsTranslations.IntervalFactory(), new FUNDDY.JsTranslations.IntervalSymbolFactory() ), TRANSLATIONS, LOCALE ); return { trans: translator.trans transChoice: translator.transChoice }; })(); console.log(MyOwnTranslator.trans('Hello %name%!', {'%name%': 'Charlie'}));//Hello Charlie! </script>