在自定义Laravel软件包中进行本地化

b09cbbtk  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(153)

我的自定义软件包的服务提供商在boot()方法中有以下行:

$this->loadTranslationsFrom(__DIR__.'/../resources/lang', 'name');
$this->publishes([
            __DIR__.'/../resources/lang' => resource_path('lang/vendor/name'),
        ], 'lang');

我运行了php artisan vendor:publish命令,packages/vendorname/packagename/resources/lang/de.json文件成功地复制到了项目中。
翻译不起作用。我也试着复制到/lang/vendor/name/文件夹。
当我手动将我的de.json文件移动到/lang时,翻译就开始工作了。到文件本身没有问题。
我已经试过清空所有缓存了。

ymdaylpp

ymdaylpp1#

我不知道为什么,但是,似乎Laravel只是加载主项目的JSON翻译文件和供应商文件夹中的第一个包。
我的解决方案是:
1.要从软件包加载***JSON***翻译文件,必须在软件包的服务提供程序中使用***loadJsonTranslationsFrom***:

class CustomeServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the package services.
     *
     * @return void
     */
    public function boot()
    {
        $this->loadJsonTranslationsFrom(__DIR__.'/../resources/lang');
    }
}

1.在您的***JSON***文件***中,您可以使用您的软件包名称作为每个键的前缀***。例如,如果您的软件包名称是***MyPackage***,则您的***en. json***文件如下所示:

{
  "MyPackage::email": "Email",
  "MyPackage::username": "Username",
  ...
}

1.您可以使用Laravel的一些辅助函数来加载您的翻译密钥:

trans('MyPackage::email'); // returns "Email"
OR
__('MyPackage::username'); // returns "Username"

您可以点击以下链接了解更多信息:
https://laracasts.com/discuss/channels/laravel/loadjsontranslationsfrom-does-not-load-all-json-translation-files
https://github.com/laravel/framework/issues/17923
Laravel 5 loadJsonTranslationsFrom method does not load all JSON translation files from packages
https://github.com/nWidart/laravel-modules/pull/412
https://github.com/laravel/framework/pull/20599

相关问题