krisanalfa/bono-lang

Bono 本地化包

0.1.1 2014-11-04 07:16 UTC

This package is auto-updated.

Last update: 2024-08-29 04:14:24 UTC


README

想要在基于Bono的应用程序中添加翻译?使用这个组件。代码如老板。

安装

将此包添加到 composer.json 依赖文件中

"require": {
    "krisanalfa/bono-lang": "dev-master",
},

激活本地化包

将Provider添加到你的 bono.providers 配置中

'bono.providers' => array(
    '\\Bono\\Lang\\Provider\\LangProvider',
),

配置

基本配置如下

'bono.providers' => array(
    '\\Bono\\Lang\\Provider\\LangProvider' => array(
        'driver' => '\\Bono\\Lang\\Driver\\FileDriver',
        'lang'   => 'en',
        'debug'  => true
    ),
),
  • driver 是一个类,负责获取所有已注册的语言列表,并为列表中的每种语言获取单词
  • lang 是你想要用来翻译的激活语言,你可以使用一个 closure 来设置默认语言,以下是一个示例
  • debug 当你将此配置设置为 false,且你从翻译中没有任何获取,结果将是空字符串;但如果设置为 true,你将获得一些调试关键词

使用闭包来确定默认设置的语言

array(
    'driver' => '\\Bono\\Lang\\Driver\\FileDriver',
    'lang' => function() {
        return $_SESSION['user']['config']['lang'];
    },
    'debug' => true
),

基本FileDriver词典知识

你可以通过在配置文件中添加 lang.path 来更改词典的位置

'bono.providers' => array(
    '\\Bono\\Lang\\Provider\\LangProvider' => array(
        'driver'    => '\\Bono\\Lang\\Driver\\FileDriver',
        'lang'      => 'en',
        'debug'     => true,
        'lang.path' => 'lang'
    ),
),

所以,在你的 根项目 中,你应该创建一个 lang 文件夹,并将你的词典放入该文件夹中。

{{ ROOT }}
├── composer.json
└── lang
    ├── en
    │   └── list.php
    │   └── anotherList.php
    └── id
        └── list.php
        └── extraList.php

当你想要在存储库中存在西班牙语时,在 lang 文件夹中创建一个 es 文件夹。你的词典结构应该是这样的

{{ ROOT }}
├── composer.json
└── lang
    ├── en
    │   └── list.php
    │   └── anotherList.php
    ├── id
    │   └── list.php
    │   └── extraList.php
    └── es
        └── list.php
        └── spanishList.php
return array(
    'full_name'  => 'Full Name',
    'birth_date' => 'Birth Date',
    'message'    => 'Hello',
    'flash'      => array(
        'fail'    => 'Sorry, app is currently fucked up', // nested content
        'success' => 'Hurray, that is that I am talking about', // yet another nested content
    ),
);

#示例词典 假设这是我们的词典

return array(
    'full_name'  => 'Full Name',
    'birth_date' => 'Birth Date',
    'message'    => 'Hello',
    'flash'      => array(
        'fail'    => 'Sorry, app is currently fucked up', // nested content
        'success' => 'Hurray, that is that I am talking about', // yet another nested content
    ),
);

#用法(基于示例词典)

你可以从应用程序容器上下文中访问翻译,例如

$app        = \Bono\App::getInstance();
$translator = $app->translator;
$word       = $translator->translate('message');
echo $word; // output => 'Hello'

或通过别名函数

$word = t('message'); // 't' is an alias for 'translate' method in $translator
echo $word; // output => 'Hello'

你可以向你的语言添加一些参数。但首先,你必须确认你的行接受参数,通过将其更改为

// List of English dictionary
array(
    // ... snip
    'message' => 'Hello, :name',
    // ... snip
);

所以你可以通过向你的字典添加参数

$app        = \Bono\App::getInstance();
$translator = $app->translator;
$word       = $translator->translate('message', array('name' => 'Alfa'));
echo $word; // output => 'Hello, Alfa'

translate 方法中的第三个参数是可选的,可以给翻译器提供一个默认翻译,如果词典中没有翻译

$app        = \Bono\App::getInstance();
$translator = $app->translator;
$word       = $translator->translate('n00p', array(), 'Default one');
echo $word; // output => 'Default one.'

当你想要访问嵌套词典时

$app        = \Bono\App::getInstance();
$translator = $app->translator;
$flash      = $translator->translate('flash.fail');
echo $flash; // output => 'Sorry, app is currently fucked up'

此包还支持在键中有多个消息时进行选择,如下所示

// List of English dictionary
array(
    // ... snip
    'options' => 'Sagara|Xinix|Solusitama',
    // ... snip
);

如果你想从 options 键中获取 Sagara,你可以通过以下方式访问它们

$app        = \Bono\App::getInstance();
$translator = $app->translator;
$word       = $translator->choice('options', 1);
echo $word; // output => 'Sagara'

你还可以在 choice 中放置任何占位符,如下所示

// List of English dictionary
array(
    // ... snip
    'options' => 'Sagara|Xinix :string|Solusitama',
    // ... snip
);
$app        = \Bono\App::getInstance();
$translator = $app->translator;
$word       = $translator->choice('options', 2, array('string' => 'Technology'));
echo $word; // output => 'Xinix Technology'

count 变量会自动添加到 choice 方法中

// List of English dictionary
array(
    // ... snip
    'options' => 'Sagara|Xinix :string|Solusitama :count',
    // ... snip
);
$app        = \Bono\App::getInstance();
$translator = $app->translator;
$word       = $translator->choice('options', 3);
echo $word; // output => 'Solusitama 3'

你可以访问的其他一些方法

$app        = \Bono\App::getInstance();
$translator = $app->translator;

// Get current active driver
$translator->getDriver();

// Get current active language
$translator->getLanguage();

// Set Spanish to our current active language
$translator->setLanguage('es');

// Determine if we have Spanish language in our repository
$translator->hasLanguage('es');

许可证

MIT LICENSE

Copyright (c) 2014 Krisan Alfa Timur (PT. Sagara Xinix Solusitama)

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.