charcoal/translator

Charcoal 服务提供者,用于翻译消息和本地化管理。


README

Transator 包提供工具,以支持多语言数据并集成为 Symfony 翻译组件,来实现 Web 应用的国际化。

安装

composer require charcoal/translator

对于 Charcoal 项目,可以在配置文件中注册服务提供者

{
    "service_providers": {
        "charcoal/translator/service-provider/translator": {}
    }
}

概述

功能

翻译对象

Charcoal\Translator\Translation

翻译对象 存储特定字符串在所有可用语言/区域设置中的翻译数据。

// Get a translation object from the Translator
$translation = $container['translator']->translation([
    'en' => 'Hello World',
    'fr' => 'Bonjour'
]);

// If cast to string, the default language will be used.
echo $translation;

// Use ArrayAccess to get (or set) a translated value.
echo $translation['fr'];
$translation['fr'] => 'Bonjour le monde';

// To loop through all translations:
foreach ($translation->data() as $lang => $translatedValue) {
    // ...
}

翻译服务

Charcoal\Translator\Translator

Charcoal 的 翻译器 扩展了 Symfony 的 Translator,并提供了两种新的翻译方法(translation($val)translator($val)),它们都可以接受混合参数,以返回 Translation 对象(在 translation() 的情况下)或字符串(在 translate($val) 的情况下)。

区域设置管理器

Charcoal\Translator\LocalesManager

区域设置管理器 用于管理可用区域设置/语言并跟踪当前语言。

解析脚本

Charcoal\Translator\Script\TranslationParserScript

解析脚本 用于抓取包含可翻译内容的文件。将以下路由添加到您的应用程序配置中

"scripts": {
    "charcoal/translator/parse": {
        "ident": "charcoal/translator/script/translation-parser"
    }
}

服务提供者

TranslatorServiceProvider 提供将应用程序翻译成不同语言所需的服务和选项。

参数

  • locales/config:定义可用语言、回退和默认值的配置对象。
  • locales/default-language:应用程序的默认语言,可选地是浏览器的首选语言。
  • locales/browser-language:浏览器接受的语言。
  • locales/fallback-languages:翻译器的回退语言代码列表。
  • locales/available-languages:从可用区域设置中的语言代码列表。
  • locales/languages:应用程序的可用语言结构列表。
  • translator/config:翻译服务、消息目录和目录加载器的配置对象。
  • translator/translations:按域和区域设置分组的其他翻译字典。

服务

配置

以下是一个配置示例

"locales": {
    "languages": {
        "de": {},
        "en": {},
        "es": {
            "active": false
        },
        "fr": {}
    },
    "default_language": "fr",
    "fallback_languages": [
        "en", 
        "fr"
    ],
    "auto_detect": true
},
"translator": {
    "loaders": [
        "xliff",
        "json",
        "php"
    ],
    "paths": [
        "translations/",
        "vendor/charcoal/app/translations/"
    ],
    "debug": false,
    "cache_dir": "cache/translation/",
    "translations": {
        "messages": {
            "de": {
                "hello": "Hallo {{ name }}",
                "goodbye": "Auf Wiedersehen!"
            },
            "en": {
                "hello": "Hello {{ name }}",
                "goodbye": "Goodbye!"
            },
            "es": {
                "hello": "Hallo {{ name }}",
                "goodbye": "Adios!"
            },
            "fr": {
                "hello": "Bonjour {{ name }}",
                "goodbye": "Au revoir!"
            }
        },
        "admin": {
            "fr": {
                "Save": "Enregistrer"
            }
        }
    }
}

中间件

LanguageMiddleware 可用于支持中间件的 PSR-7 应用程序。中间件使用 Accept-Language HTTP 头、URI 路径、查询字符串或主机检测首选语言。

如果您正在使用 charcoal/app,您可以通过应用程序配置集添加中间件

"middlewares": {
    "charcoal/translator/middleware/language": {
        "active": true,
        "use_params": true,
        "param_key": "hl"
    }
}

否则,例如使用 Slim

use Charcoal\Translator\Middleware\LanguageMiddleware;
use Slim\App;

$app = new App();

// Register middleware
$app->add(new LanguageMiddleware([
    'default_language' => 'fr',
    'use_params'       => true,
    'param_key'        => 'hl',
]));

中间件提供了一套默认选项,可以单独覆盖。

辅助工具

TranslatorAwareTrait

Charcoal\Translator\TranslatorAwareTrait

TranslatorAwareTrait 被提供为便利,以避免重复/样板代码。它只是设置和获取一个 Translator 服务属性。

使用 setTranslator() 设置,使用 translator() 获取。这两个都是受保护的方法。(此特性没有公共接口。)

资源