davidecesarano / embryo-translate
PHP 库,提供了一种简单的方式获取多种语言中的字符串。
dev-master
2020-02-05 16:40 UTC
Requires
- php: >=7.1
Requires (Dev)
- davidecesarano/embryo-emitter: dev-master
- davidecesarano/embryo-http: dev-master
- davidecesarano/embryo-middleware: dev-master
- davidecesarano/embryo-session: dev-master
This package is auto-updated.
Last update: 2024-09-06 02:46:01 UTC
README
PSR 兼容的 PHP 库,提供了一种简单的方式获取多种语言中的字符串。
要求
- PHP >= 7.1
- PSR-7 http 消息实现和 PSR-17 http 工厂实现(例如 Embryo-Http)
- PSR-15 http 服务器请求处理器实现(例如 Embryo-Middleware)
- PSR-15 会话中间件(例如 Embryo-Session)
- PSR 响应发射器(例如 Embryo-Emitter)
安装
使用 Composer
$ composer require davidecesarano/embryo-translate
示例
您可以通过内置的 PHP 服务器快速测试,访问 https://:8000。
$ cd example
$ php -S localhost:8000
用法
从文件创建并设置消息
您可以在 lang 目录内存储语言字符串,例如。在这个目录中,应该为应用程序支持的每种语言创建一个子目录
/lang
/en
messages.php
/it
messages.php
所有语言文件返回一个键控字符串数组。例如
return [ 'hello' => 'Hello World!' ];
创建一个 Translate
对象,并传入语言目录路径和默认语言。setMessages
方法创建一个包含所有消息的数组。
$translate = new Translate('/path/lang', 'en'); $translate->setMessages();
设置区域设置
在 Embryo\Translate\Middleware\SetLocaleMiddleware
中存储默认语言。您也可以在运行时使用 uri 中的查询参数更改活动语言
//... $middleware = new RequestHandler; // session $middleware->add( (new SessionMiddleware) ->setSession(new Session) ->setOptions([ 'use_cookies' => false, 'use_only_cookies' => true ]) ); // set locale $middleware->add( (new SetLocaleMiddleware) ->setLanguage('en') ->setSessionRequestAttrbiute('session') ->setLanguageQueryParam('language') ->setSessionKey('language') ); //...
中间件将语言值存储在会话中。要更改它,您可以在 uri 中使用 language
查询参数
example.com/hello-world?language=it
确定当前区域设置
您可以使用会话来确定当前的区域设置
$session = $request->getAttribute('session'); return $session->get('language');
检索翻译字符串
首先,您必须使用 getMessages
方法确定当前语言的消息。然后,您可以使用 get
方法从语言文件中检索行
$session = $request->getAttribute('session'); $language = $session->get('language'); $messages = $translate->getMessages($language); echo $messages->get('hello'); // Hello World!
在翻译字符串中替换参数
您可以在翻译字符串中定义占位符。所有占位符都以 {
和 }
为前缀。例如
'hello' => 'Hello {name}'
您可以在 get
方法的第二个参数中将 {name}
替换为替换数组
echo $messages->get('hello', ['name' => 'David']); // Hello David