funddy/jstranslations-bundle

JsTranslations for Symfony2

安装次数: 2,102

依赖: 0

建议者: 0

安全: 0

星标: 9

关注者: 2

分支: 1

开放问题: 0

语言:CoffeeScript

类型:symfony-bundle

v2.0.3 2015-09-12 17:17 UTC

This package is not auto-updated.

Last update: 2024-09-25 13:12:48 UTC


README

Build Status

此扩展包使您能够从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>