samsonos / php_i18n
SamsonPHP 内部化模块
Requires
- samsonos/php_core: 1.*
Requires (Dev)
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开发