kg-bot / laravel-localization-to-vue
Laravel 包,用于从 resources/lang (和自定义) 目录及其子目录收集所有本地化文件,并将它们作为 JSON 文件提供
Requires
- php: ^8.0
- ext-json: *
- laravel/framework: 5.*|^6|^7|^8|^9|^10.0|^11.0
This package is auto-updated.
Last update: 2024-09-17 20:38:05 UTC
README
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文件