alexya-framework/localization

Alexya本地化工具

3.1.0 2017-06-05 14:09 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:36:46 UTC


README

Alexya本地化组件

内容

文本翻译

\Alexya\Localization\Translator 提供了一种翻译文本的方法。基本原理是,您可以使用给定的文本翻译实例化一个 Translator 对象,然后在需要翻译文本时调用 translate 方法。

实例化翻译对象

构造函数接受一个包含语言代码和翻译的关联数组作为参数。可选地,您可以发送第二个参数作为默认语言,其中文本将被翻译。

示例

<?php
$translator = new \Alexya\Localization\Translator([
    "en" => [
        "monday"    => "monday",
        "thursday"  => "thursday",
        "wednesday" => "wednesday",
        "tuesday"   => "tuesday",
        "friday"    => "friday",
        "saturday"  => "saturday",
        "sunday"    => "sunday"
    ],
    "es" => [
        "monday"    => "lunes",
        "thursday"  => "martes",
        "wednesday" => "miercoles",
        "tuesday"   => "jueves",
        "friday"    => "viernes",
        "saturday"  => "sabado",
        "sunday"    => "domingo"
    ]
], "en");

翻译文本

一旦对象被实例化,您可以使用 translate 方法来翻译文本。它接受一个字符串参数,表示要翻译的文本。

可选地,您可以发送一个包含要解析的变量的数组或一个包含语言代码的字符串来翻译文本,甚至两者都可以。

如果不存在该语言,文本将翻译成默认语言。

如果文本无法翻译,它将返回第一个参数。

示例

<?php
$translator = new \Alexya\Localization\Translator([
    "en" => [
        "monday"    => "monday",
        "thursday"  => "thursday",
        "wednesday" => "wednesday",
        "tuesday"   => "tuesday",
        "friday"    => "friday",
        "saturday"  => "saturday",
        "sunday"    => "sunday",

        "Today is {day}" => "Today is {day}"
    ],
    "es" => [
        "monday"    => "lunes",
        "thursday"  => "martes",
        "wednesday" => "miercoles",
        "tuesday"   => "jueves",
        "friday"    => "viernes",
        "saturday"  => "sabado",
        "sunday"    => "domingo",

        "Today is {day}" => "Hoy es {day}"
    ]
]);

// Quick translation
$translator->translate("Today is {day}");
// Today is {day}

// Translation with context
$translator->translate("Today is {day}", [
    "day" => $translator->translate("monday")
]);
// Today is monday

// Translation in a specific language
$translator->translate("Today is {day}", "es");
// Hoy es {day}

// Translation in a specific language with context
$translator->translate("Today is {day}", [
    "day" => $translator->translate("monday", "es")
], "es");
// Hoy es lunes

// Text that can't be translated
$translator->translate("some_text");
// some_text

如果没有指定语言,它将翻译成通过 setDefaultLanguage 方法发送的语言。

要翻译子数组的文本,请使用点(.)将文本与要翻译的文本连接起来

<?php
$translator = new \Alexya\Localization\Translator([
    "en" => [
        "days" => [
            "monday"    => "monday",
            "thursday"  => "thursday",
            "wednesday" => "wednesday",
            "tuesday"   => "tuesday",
            "friday"    => "friday",
            "saturday"  => "saturday",
            "sunday"    => "sunday"
        ],
        "phrases" => [
            "today_is" => "Today is {day}"
        ]
    ]
]);

// Recursive translation
$translator->translate("phrases.today_is", [
    "day" => $translator->translate("days.monday")
]);
// Today is monday

您还可以使用 addTranslations 方法向已指定的语言添加更多翻译。它接受语言代码和一个包含要添加的翻译的数组作为参数。如果语言代码不存在,它将创建它。