grajewsky/laravel-i18n

JavaScript 翻译提供者

v2.0.2 2022-11-18 06:35 UTC

This package is auto-updated.

Last update: 2024-09-18 11:18:30 UTC


README

将 Laravel 翻译推送到前端,并使用 JavaScript 轻松使用。

不支持基于 JSON 的翻译!

入门

您可以使用 composer 安装此包,运行 composer require grajewsky/laravel-i18n 命令。

Laravel 5.4 及以下

您需要手动注册服务提供者。转到 config/app.php 文件,并将 Grajewsky\Laravel\I18n\Providers\I18nServiceProvider::class 添加到 providers 数组中。

Laravel 5.5 及以上

包自动发现

配置

> php artisan vendor:publish

您只能添加自己的 i18n 路径提供者,您必须做到的是实现 Grajewsky\Laravel\I18n\Interfaces\I18nProvider

  • getI18nPath(): string
  • getLocale(): string;
  • getNamespace(): string;

并将 I18nProvider 添加到 config/i18n.php 中 Fullnamespace\MyI18nProvider::class

视图文件中的翻译

您可以使用 @translations blade 指令。此指令会自动将翻译包装到 <script> 标签中。

@translations

<!-- The result -->
<script>window['translations'] = { auth: {...}, validation: {...} }</script>

您可能需要覆盖翻译的默认键。您可以通过传递字符串到 blade 指令来实现这一点。

@translations ('myTranslations')

<!-- The result -->
<script>window['myTranslations'] = { auth: {...}, validation: {...} }</script>

发布和使用 JavaScript 库

使用 php artisan vendor:publish 命令,并选择 Grajewsky\Laravel\I18n\Providers\I18nServiceProvider::class 提供者。发布后,您可以在 resources/assets/js/vendor 文件夹中找到您的最新副本。

使用 I18n.js

然后您可以将 I18n 类导入并分配给 window 对象。

import I18n from './vendor/I18n';
window.I18n = I18n;

初始化翻译实例

从这一点开始,您可以从应用程序的任何位置初始化翻译服务。

let translator = new I18n;

默认情况下,它使用 window 对象中的 translations 键。如果您想使用在 blade 指令中设置的自定义键,请将相同的键传递给构造函数。

let traslator = new I18n('myTranslations');

作为 Vue 服务使用

如果您想直接从 Vue 模板中使用它,您可以使用此方法轻松扩展 Vue。

Vue.prototype.$I18n = new I18n;

您可以从模板或组件的脚本部分调用它,如下所示

<template>
    <div>{{ $I18n.trans('some.key') }}</div>
</template>
computed: {
    translations: {
        something: this.$I18n.trans('some.key')
    }
}

方法

此包在 JS 端提供了两个方法。一个是 trans()trans_choice()

trans()

trans 方法接受翻译的键和我们要替换的属性,但这些属性是可选的。

translator.trans('auth.failed');

// These credentials do not match our records.

translator.trans('auth.throttle', { seconds: 60 });

// Too many login attempts. Please try again in 60 seconds.

trans_choice()

trans_choice 方法根据给定的计数确定翻译是否应该被复数化。它也接受我们想要替换的属性。

假设我们有一条以下翻译行

[
    'attempts' => 'Be careful, you have :attempts attempt left.|You still have :attempts attempts left.',
]

注意,复数和单数版本由 | 字符分隔!

translator.trans_choice('auth.attempts', 1, { attempts: 'only one' });

// Be careful, you have only one attempt left.

translator.trans_choice('auth.attempts', 4, { attempts: 'less than five' });

// You still have less than five attempts left.

与 Laravel 类似,您有设置复数化范围的能力。您也可以像之前一样替换占位符。

[
    'apples' => '{0} There are none|[1,19] There are some (:number)|[20,*] There are many (:number)',
]

您可以使用 | 字符分隔超过两个选项。

translator.trans_choice('messages.apples', 0);

// There are none

translator.trans_choice('auth.attempts', 8, { number: 8 });

// There are some (8)

translator.trans_choice('auth.attempts', 25, { number: 25 });

// There are many (25)

转换替换参数

与 Laravel 的功能类似,您可以转换您的参数为 uppercase,或将首字符转换为大写。所有您需要做的,就是修改您的翻译。

[
    'welcome' => 'Welcome, :NAME',
    'goodbye' => 'Goodbye, :Name',
]

如果您想,您可以在一行中传递具有不同修饰符的相同参数,如 :NAME:name:Name

translator.trans('messages.welcome', { name: 'pine' });

// Welcome, PINE

translator.trans('messages.goodbye', { name: 'pine' });

// Goodbye, Pine