Laravel 的简单国际化

v2.0.04 2023-08-08 08:53 UTC

README

GitHub Release GitHub Release Total Downloads License Actions Status

Sin 对国际化(i18n)采取了一种全新的方法,适用于简单的项目或开发者可以快速进行即时翻译的情况。其工作方式非常简单:只需以特殊格式定义包含所有语言的字符串,如下所示

"en::What is your name?|nl::Wat je is naam?|de::Wie heisst du?|fr::Comment t'appelles-tu?"

因为 Sin 只使用字符串,所以它可以在代码中,也可以在数据库、yaml 或 json 文件中,或者在任何向用户展示字符串的地方使用。

Sin 与 Laravel 无缝集成,并使用旧的和新的 Laravel 国际化风格,因此它被视为该机制的附加组件。

Sin 对双语应用程序(如荷兰语/英语)最有用,在这种应用程序中,开发者在编码时可以包括即时翻译。

安装

    composer install cosninix/sin

sin 包创建了一个 Sin 面向对象别名、一个服务提供商和一个辅助函数

基本用法

    echo app('Sin')->lang("nl::via de serviceprovider|en::via the serviceprovider");

    echo Sin::lang("nl::via de Sin facade deze keer|en::through the Sin facade this time");
    
    // three underscores
    echo ___("nl::via de helper function|en::works with the helper function");

在 blade 中也可以使用 @slang 指令

    <h1>@slang('nl::blade constructie|en::blade construct')</h1>

如果未找到 sin 语法,Sin 将字符串原样传递。语法在以 XX:: 格式开头的所有字符串上触发。

    Sin::lang('passed without alterations %f'); --> 'passed without alterations %f'

Sin 将每个结果(语法被触发的所有结果)通过 sprintf 运行

    Sin::lang("en::We have %d smartphones in stock|nl::nu %d smartphones op voorraad",20); 

当然,Sin 不仅仅限于 PHP 代码。只要在展示之前通过 Sin 传递,你就可以在 yaml 或 json 文件中使用 Sin。

    list: { options: [ 1, 3 ], text: [ "nl::kies 1|en::choose 1", "nl::Neem er 3|en::Take 3" ] }

例如,这可以在 blade 中的数据库值中完成

    <h1>@slang( $stock->article_name )</h1>

Laravel 集成

Sin 使用 app.locale 配置作为默认语言,使用 app.fallback_locale 作为回退语言。如果你使用以下方式更改 app 语言:

    App::setLocale('nl');

如果当前语言未找到,则使用回退语言。

你可以通过提供额外的 laravel 键来为 Laravel 翻译做准备,该键可以与传统的 @lang 构造一起使用

    Sin::lang('nl::Nederlands|en::English|@@::language_key);

如果 language_key 存在于 Laravel 翻译中,则它具有优先级,否则使用 Sin 翻译。因此,你可以稍后添加传统翻译。