fixhub/js-localization

此包已被弃用且不再维护。未建议替代包。

Laravel 包,为 JavaScript 代码提供本地化。

0.0.1 2017-09-08 06:46 UTC

This package is not auto-updated.

Last update: 2017-11-28 22:36:32 UTC


README

Build Status Scrutinizer Code Quality Code Coverage Total Downloads

这是一个简单、易于使用且灵活的 Laravel Web 框架包。允许您在 JavaScript 代码中使用 Laravel Web 应用的本地化消息(请参阅 resources/lang 目录)。您可以轻松配置需要导出的消息。

👉 寻找新的维护者。欢迎联系我。

新闻

修复了在使用 Laravel 5 时与该包一起使用时出现的一个主要错误。

此外,已删除 master 分支。请使用与您的框架版本匹配的分支

Laravel 分支
5.x laravel-5
4.2 laravel-4.2
4.1 laravel-4.1(即将停用)
4.0 laravel-4.0(已停用)

安装

将以下行添加到您的 Laravel Web 应用的 composer.json 文件的 require 部分

    "require": {
        "andywer/js-localization": "dev-laravel-5"    // "dev-laravel-4.1", "dev-laravel-4.2" for Laravel 4
    }

运行 composer update 以安装包。

最后,将以下行添加到您的 app/config/app.php 文件的 providers 数组中

    'providers' => [
        /* ... */
        JsLocalization\JsLocalizationServiceProvider::class
    ]

配置

首先运行 php artisan vendor:publish。此命令将包的默认配置复制到 config/js-localization.php

您现在可以编辑此文件以定义您需要在 JavaScript 代码中的消息。只需编辑配置文件中的 messages 数组。

示例(导出所有提醒消息)

<?php

return [
    // Set the locales you use
    'locales' => ['en'],

    // Set the keys of the messages you want to use in javascript
    'messages' => [
        'passwords' => [
            'password', 'user', 'token'
        ]
    ],

    /*
     * in short:
     * 'messages' => ['passwords']
     *
     *
     * you could also use:
     *
     * 'messages' => [
     *     'passwords.password',
     *     'passwords.user',
     *     'passwords.token'
     * ]
     */
     
     // Set the keys of config properties you want to use in javascript.
     // Caution: Do not expose any configuration values that should be kept privately!
     'config' => [
         'app.debug'
     ],
     
     // Disables the config cache if set to true, so you don't have to run `php artisan js-localization:refresh`
     // each time you change configuration files.
     // Attention: Should not be used in production mode due to decreased performance.
     'disable_config_cache' => false,
];

重要

当第一次使用 JsLocalizationController 时,消息配置将被缓存。更改消息配置后,您需要调用 php artisan js-localization:refresh 以刷新该缓存。这也影响您导出到 JavaScript 的配置属性,因为它们也被缓存了。

使用方法

JavaScript 的翻译资源可以在运行时由您的 Laravel 应用提供,也可以预先生成为静态 JavaScript 文件,允许您直接从您的 Web 服务器或 CDN 提供它们,或在您的构建过程中包含它们。

运行时生成

您只需将必要的 <script> 标签添加到您的布局中。以下是一个 blade 视图示例

@include('js-localization::head')
<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Test view</title>
        @yield('js-localization.head')
    </head>
    <body>
        <p>
            Here comes a translated message:
            <script type="text/javascript">
                document.write( Lang.get('reminder.user') );
            </script>
        </p>
    </body>
</html>

请记住,最好不要在 <head> 中放置 @yield('js-localization.head'),因为它包含发送此包前端部分的 <script> 标签。最佳实践是在 <body> 的末尾放置它,但 其他 <script> 标签之前。上面的示例简单地将其包含在头中,因为它是最简单的一种使用方式。

静态生成

为了提高性能,可以生成包含所有生成字符串的静态 JavaScript 文件。这些文件可以直接作为静态文件提供,或作为您前端资产构建过程的一部分包含。

要指定资产输出目录,只需在 config/js-localization.php 文件中相应地设置 $storage_path 字符串(参见 配置)。

    /*
    |--------------------------------------------------------------------------
    | Define the target to save the exported messages to
    |--------------------------------------------------------------------------
    |
    | Directory for storing the static files generated when using file storage.
    |
    */

    'storage_path' => public_path('vendor/js-localization/'),

然后可以使用 artisan 命令生成文件

php artisan js-localization:export

这将在目标目录中生成两个文件

  • messages.js 包含您的翻译字符串
  • config.js 包含您的导出配置值

请记住,每次编辑、添加或删除任何翻译字符串时,都需要使用 php artisan js-localization:export 重新生成文件。

功能

您可以在您的 JavaScript 代码中使用 Lang.get()、Lang.has()、Lang.choice()、Lang.locale() 和 trans()(Lang.get() 的别名)以及在您的 JavaScript 代码中传递配置属性。JavaScript 中也有 Config.get()。使用 config/js-localization.php 中的 config 字段配置传递给客户端的配置属性。注意:不要导出任何安全关键属性,如数据库凭证等,因为它们会对使用您应用程序的任何人可见!

支持消息中的变量。例如:"这是我的测试字符串,用于 :name."

也支持复数形式,但不会关心区域设置。它仅使用英语复数规则("单数文本|复数文本")。尚未支持更复杂的复数量词。

服务提供者

假设您正在开发一个依赖此 JavaScript 本地化功能的 Laravel 扩展包,并且您想要配置哪些包的消息必须对 JS 代码可见。

幸运的是,这非常简单。只需监听 JsLocalization.registerMessages 事件,并使用 JsLocalization\Facades\JsLocalizationHelper::addMessagesToExport() 方法。如下所示

<?php

use Illuminate\Support\ServiceProvider;
use JsLocalization\Facades\JsLocalizationHelper;

class MyServiceProvider extends ServiceProvider
{
    /* ... */

    public function register()
    {
        Event::listen('JsLocalization.registerMessages', function()
        {
            JsLocalizationHelper::addMessagesToExport([
                // list the keys of the messages here, similar
                // to the 'messages' array in the config file
            ]);
        });
    }

    /* ... */
}

许可证

此软件根据 MIT 许可证发布。请参阅 许可证