davidecesarano/embryo-translate

PHP 库,提供了一种简单的方式获取多种语言中的字符串。

dev-master 2020-02-05 16:40 UTC

This package is auto-updated.

Last update: 2024-09-06 02:46:01 UTC


README

PSR 兼容的 PHP 库,提供了一种简单的方式获取多种语言中的字符串。

要求

安装

使用 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