kg-bot/laravel-localization-to-vue

Laravel 包,用于从 resources/lang (和自定义) 目录及其子目录收集所有本地化文件,并将它们作为 JSON 文件提供

v2.2 2024-03-17 19:29 UTC

README

Latest Stable Version Total Downloads Latest Unstable Version License Monthly Downloads Daily Downloads

Laravel Localization To Vue/JSON

此包收集来自 resources/lang 目录及其子目录的所有本地化,并将它们转换为普通数组
之后可以转换为 JSON 对象,并用于 Vue、Angular 等库

安装

Laravel 版本 9 之前

composer require kg-bot/laravel-localization-to-vue:^1

Laravel 9

composer require kg-bot/laravel-localization-to-vue:^2

Laravel 8+

Laravel 8 需要 PHP 7.3 或更高版本。在运行 composer 之前,请确保您至少有 PHP 7.3。

Laravel 9+

Laravel 9 需要 PHP 8.0.2 或更高版本。在运行 composer 之前,请确保您至少有 PHP 8.0.2。

Laravel 5.5+

Laravel 5.5 使用包自动发现,因此不需要您手动添加 ServiceProvider。

如果您不使用自动发现,请将 ServiceProvider 添加到 config/app.php 中的 providers 数组

KgBot\LaravelLocalization\LaravelLocalizationServiceProvider::class

如果您想添加别名,请在 config/app.php 中的 aliases 数组内添加此别名

"ExportLocalization" => "KgBot\\LaravelLocalization\\Facades\\ExportLocalizations"

设置和配置

您可以通过运行以下命令导出配置:

php artisan vendor:publish --provider="KgBot\LaravelLocalization\LaravelLocalizationServiceProvider" --tag=config

如果您想解析多个语言目录或除 lang_path() 之外的目录,可以在配置文件中添加多个路径到 config paths.lang_dirs 数组中。

可以是一个路径,也可以是多个路径,例如

paths => [lang_path(), app_path('lang'), app_path('Modules/Blog/lang')]

您可以在导出后运行自己的回调函数,为此您必须注册全局可访问的函数,例如在 composer 文件的自载中注册 function.php,并在 config/laravel-localization.php 中添加您的函数,键为 export_callback。示例

// helpers/functions.php

if (! function_exists('testExport')) {
    /**
     * Change all instances of :argument to {argument}
     *
     * @param $string
     * @return void
     *
     */
    function testExport($string) {
        array_walk_recursive($string, function (&$v, $k) { $v = preg_replace('/:(\w+)/', '{$1}', $v); });

        return $string;
    }
}


// composer.json
....
"autoload": {
        "files": [
            "helpers/functions.php"
        ],
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ]
    },
....

// config/laravel-localization.php
...
'export_callback' => 'testExport',
...

用法

此包可以以多种方式使用,我将给出一些示例,但实际上没有限制。

第一个示例是向视图复合变量添加内容并在 blade 视图中使用它。

// inside ServiceProvider

// With alias
use ExportLocalization;

// Without alias
use KgBot\LaravelLocalization\Facades\ExportLocalizations as ExportLocalization;


View::composer( 'view.file', function ( $view ) {

    return $view->with( [
        'messages' => ExportLocalization::export()->toArray(),
    ] );
} );

第二种方式是像任何其他文件一样通过 HTTP 请求它

<script>
let messages = axios.get('http://localhost/js/localization.js') // This is default route which can be changed in config
</script>

为了使此功能正常工作,您需要在 .env 文件或 config/laravel-localization.php 中启用路由 LARAVEL_LOCALIZATION_ROUTE_ENABLE

您还可以使用 artisan 命令 php artisan export:messages 将消息导出为 ECMAScript 6 标准的 JavaScript 模块

为 npm 本地化包(如 Lang.js)导出

如果您需要某些 npm 本地化包(如 Lang.js)能识别的特殊数组格式。

// Call toFlat() instead of toArray()
ExportLocalization::export()->toFlat()

or

// For CLI usage
php artisan export:messages-flat

一些使用此包和 Laravel 标准本地化消息的示例

// Inside blade view
<script>
    window.default_locale = "{{ config('app.locale') }}";
    window.fallback_locale = "{{ config('app.fallback_locale') }}";
    window.messages = @json($messages);
</script>
// And optionaly you can then use it in any JavaScript file or Vue.js component

// app.js
import Vue from 'vue';
import Lang from 'lang.js';

const default_locale = window.default_language;
const fallback_locale = window.fallback_locale;
const messages = window.messages;

Vue.prototype.trans = new Lang( { messages, locale: default_locale, fallback: fallback_locale } );
// Example.vue
<b-input v-model="query"
    type="text"
    :placeholder="trans.get('search.placeholder')"
></b-input>

关于 json 文件的一些说明

Laravel 5.4+ 允许使用单个 .json 文件为每种语言进行结构化本地化,为了使用提供的 json 文件中的字符串,您必须使用 __JSON__ 键作为前缀

// Assuming that es.json exists and it is the default locale in your app
{
   "I love programming": "Me encanta programar"
}
// Example.vue
<b-input v-model="query" type="text" :placeholder="trans.get('__JSON__.I love programming')"></b-input>

路由

此包默认公开一个路由 http://localhost/js/localization.js,但您可以在配置文件中将其前缀更改为任何您想要的。

您还可以为 blade 模板或任何其他路由调用设置一个好看的路由名称,默认为 route('assets.lang'),但可以通过配置文件中的环境文件进行自定义。

建议、评论、反馈

所有这些都非常受欢迎且受到赞赏

待办事项

  • 创建排除配置,以确保不收集文件/目录

您可以想到的其他任何内容,请留下评论、给我发邮件、创建问题,或者您喜欢的任何方式。

许可证

本项目采用MIT许可证 - 详细内容请参阅LICENSE.md文件