andywer / js-localization
Laravel 包,用于为 JavaScript 代码提供本地化支持。
Requires
- php: >=7.3.0
- illuminate/support: 6.*|7.*|8.*
Requires (Dev)
- mockery/mockery: ~1.0
- orchestra/testbench: 4.*
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-08-25 23:36:47 UTC
README
简单、易于使用且灵活的 Laravel 网络框架包。允许您在 JavaScript 代码中使用 Laravel 网络应用程序的本地化消息(参见 resources/lang
目录)。您可以轻松配置需要导出的消息。
⚠️ 正在寻找新的维护者。如果您感兴趣,请与我联系。
分支
安装
将以下行添加到您的 Laravel 网络应用程序的 composer.json
文件的 require
部分
"require": { "andywer/js-localization": "dev-laravel-6" // see table above }
运行 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, // Split up the exported messages.js file into separate files for each locale. // This is to ensue faster loading times so one doesn't have to load translations for _all_ languages. 'split_export_files' => true, ];
重要
当首次使用 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>
请记住,最好不要将 @yield('js-localization.head')
放在 <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
包含您导出的配置值
如果您想自动将 messages.js
文件拆分为针对每个区域的单独 .js 文件,您可以在您的 config/js-localization.php
配置文件中将以下设置为 true
'split_export_files' => true,
这将反过来在您的目标目录中生成以下文件(如果 split_export_files
配置选项设置为 true)
lang-{locale}.js
包含一种语言的翻译字符串
请记住,每次编辑、添加或删除翻译字符串时,都需要使用 php artisan js-localization:export
重新生成文件。
特性
您可以在您的JavaScript代码中使用 Lang.get()、Lang.has()、Lang.choice()、Lang.locale() 和 trans()(Lang.get() 的别名)。
支持消息中的变量。例如:"这是我的测试字符串,用于 :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许可证下发布。请参阅许可证。