samsonos/php_i18n

SamsonPHP 内部化模块

0.1.1 2016-08-16 19:16 UTC

This package is not auto-updated.

Last update: 2024-09-14 15:16:40 UTC


README

该模块为 Web 应用程序提供特殊全局函数,以提供本地化功能

模块默认区域设置为空字符串 ' ',其值存储在 samsonos\php\core\SamsonLocale::DEF 常量中。这允许使用任何区域设置作为默认值,而无需指定它。

设置支持的区域设置

要向您的 Web 应用程序添加本地化支持,必须调用特殊全局函数

setlocales($locale1, $locale2, ...)

其中参数为

  • $locale1 = $locale2 = 'ru'|'en'|'ko',以及 samsonos\php\core\SamsonLocale 支持的其他区域设置

通常,此函数在 Web 应用程序启动脚本 index.php 中调用,在 s() 之前,例如 index.php

// SamsonPHP Configuration
require('config.php');

// Add russian and french locales
setlocales('ru', 'fr');

// Run
s()->composer()->start();

切换区域设置

要将系统切换到另一个 支持 的区域设置(由 setlocales() 定义),您应该在 URL 中添加区域设置前缀,例如,如果我们有域名 http://example.com,我们必须将用户重定向到 http://example.com/ru 以切换到 俄语 本地化版本。此 URL 后缀 /ru 被所有 SamsonPHP 组件忽略,并且实际上在 URL 分派器 samsonos\php\core\URL 和所有其他组件中是不可见的。唯一处理此后缀的模块是 samsonos\php\i18n(此模块)。

如果您指定了不受支持的区域设置后缀(在 SamsonPHP 启动之前未在 setlocales() 中指定),URL 分派器 samsonos\php\core\URL 将将其作为常规模块控制器请求处理。

使用本地化视图

当您切换到其他支持的区域设置时,则默认区域设置,自动系统视图渲染机制将更改。首先,系统使用默认设置在 本地化视图路径 中搜索必要的视图,系统视图路径为 app/view/。在这种情况下,本地化视图路径app/view/$locale/,其中 $locale = 'ru'|'en'|'ko'

因此,如果您想为不同的区域设置创建不同的视图文件,您可以创建两个具有相同名称的视图文件,例如,我们有一个位于 app/view/test.php 的英语视图文件

<h1>This is ENGLISH view file</h1>

以及位于 app/view/ru/test.php 的俄语视图文件

<h1>This is RUSSIAN view file</h1>

我们还有一个位于 app/view/controller/test.php 的常规简单控制器文件

function test()
{
    m()->view('test')->title('Localization test');
}

以及位于 app/view/index.php 的默认视图模板文件,它渲染当前模块

<html>
    <body>
        <?php m()->render()?>
    </body>
</html>

如果您尝试访问 URL htttp://example.com/ru/test,您将获取 app/view/ru/test.php 进行渲染,而不是 app/view/test.php

逻辑是:如果系统找不到本地化视图,它将使用常规视图。

词典本地化

如果我们不想为每个支持的区域设置创建单独的视图,因为它们在 HTML 标记中匹配,只是在一些单词上有所不同,我们可以使用 词典 本地化逻辑。

要使用全局 词典 为您的 Web 应用程序,使用默认设置,您必须在 app/view/i18n/dictionary.php 中创建特殊的词典文件,并定义通用特殊函数

function dictionary()
{
    return array(
        $locale => array(
            $key => $value,
            ...
        ),
        'ru' => array(
            'Translate me' => 'Переведи меня',
        )
    );
}

其中参数为

  • $locale = 'ru'|'en'|'ko' 以及 samsonos\core\SamsonLocale 支持的其他区域设置
  • $key = 'Translate me' 要输出的任何字符串值。此键必须在所有区域设置中进行翻译
  • $value = 'Переведи меня'(翻译为俄语) 字符串 'Translate me' 在当前区域设置数组中

我们在将网络应用压缩成快照时,通过samsonos/php_compressor使用函数来避免错误。

在视图中使用字典

要在视图文件中使用上面创建的字典,您应该使用特殊的全局函数t([key], [return])

其中参数为

  • $key = 'Translate me' - 要输出和翻译的任何字符串值。此键必须在所有语言中匹配以进行翻译
  • $return = true|false - 如果为true - 将返回翻译,否则输出

因此,如果我们有视图文件(或模板视图文件)app/view/test.php,本地化字符串输出将是

<h1><?php t('Translate me')?></h1>

我们不需要为本地化创建单独的视图文件。

自动生成字典文件

您可以使用特殊控制器/i18n/generate来执行字典文件的自动创建。默认情况下,此文件将位于app/i18n/dictionary.php

当您输入URL /i18n/generate时,系统将自动扫描所有视图/控制器/模型,以匹配t([key])函数,并为每个语言环境构建键值列表。因此,您无需手动创建此字典,只需将翻译函数添加到您的视图/控制器/模块中,完成时调用/i18n/generate,它将为您创建字典文件,剩下的工作就是填充生成的键的翻译。

不用担心多次调用/i18n/generate,它不会重写您现有的字典文件,它将分析它,仅添加翻译的新键

支持的语言列表的通用渲染

我们为此模块添加了通用的控制器操作list,以简化在您的Web应用程序中渲染语言切换器。在您的模板视图文件(或简单视图文件),例如app/view/index.php中,您可以使用

<html>
    <body>
        <?php m('i18n')->render('list')?>
        <?php m()->render()?>
    </body>
</html>

此控制器操作list将渲染支持的语列表的无序列表和特殊CSS类进行样式化

<html>
    <body>
        <ul class="i18n-list">
            <li class="i18n-locale-def i18n-active">
            <a href="/" class=""></a>
        </li><li class="i18n-locale-ru ">
            <a href="/ru"></a>
        </li><li class="i18n-locale-fr ">
            <a href="/fr"></a>
        </li></ul>
    </body>
</html>

这是默认LESS示例,用于样式化此语言切换器文件

.i18n-list {/* Locale block parent */

  li {/* Locale block container */

    a { /* Locale link for clicking */
      display: inline-block;
      width:25px;
      height:20px;
      background-repeat: no-repeat;
      background-position: 50% 50%;
      font-size:13px;

        /* Locale inner text block */
      &:before { display:inline-block;  }
    }

    /** Current active locale class */
    &.i18n-active {  }

    /** Default locale inner text block class */
    &.i18n-locale-def a:before { content:"EN"; }
    /** Supported locale inner text block classes */
    &.i18n-locale-ru a:before { content:"RU"; }
    &.i18n-locale-fr a:before {  content:"FR"; }
  }
}

创建多语言备用链接

要创建显示您网站中可以获取哪些语言的备用链接,您可以使用以下代码

<html>
    <body>
        <head>
            <?php m('i18n')->render('meta')?>
        </head>
    </body>
</html>

SamsonOS开发