Laravel本地化,连字符和下划线

bbuxkriu  于 2022-12-01  发布在  其他
关注(0)|答案(1)|浏览(252)

您在以下环境中使用哪种语言环境:url、文件夹名称、数据库??
定位有两种。

1. URL本地化

en-us  
  zh-tw

我使用mcamara/laravel本地化

2.内容本地化

喜欢不同语言的产品名称。我使用Astrotomic/laravel-可翻译,它需要在翻译表中的区域设置列。
产品翻译:

id locale product_id   name
1   en-us    1         iphone
2   zh-tw    1         蘋果手機

这是不行的:

languages table  
id, locale, name
1 en-us English
2 zh-tw Taiwan

product_translations
id language_id product_id name
1   1           1         iphone
2   2           1         蘋果手機

转换表中必须存在“locale”列。
在产品的OptionController中,我希望为刀片式服务器进行选项转换。

if($option->translations->isEmpty()){
        $option_translations = [];
    }else{
        foreach ($option->translations as $translation) {
            $locale = str_replace('-', '_', $translation->locale);
            //$option_translations->$locale = $translation->toArray();
            $option_translations[$locale] = $translation->toArray();
        }
    }

这导致了一个错误。因为连字符不能是变量名。所以,en-us不能是$option_translations-〉$locale
我必须在翻译时添加替换代码。

$locale = str_replace('-', '_', $locale);
or  
$locale = str_replace('_', '-', $locale);
  • 拉瑞维尔文件建议使用下划线。

根据ISO 15897,您可以使用“en_GB”而不是“en-gb”来表示英式英语。

  • mcamara/laravel本地化包在配置文件中使用连字符:config\laravellocalization.php

这将Map到文件夹名称。虽然它有localesMapping参数。

  • 连字符在网址中似乎更常见,就像微软的网站:

https://www.microsoft.com/zh-tw
那么,您在以下环境中使用哪种区域设置:url、文件夹名称、数据库??

m1m5dgzv

m1m5dgzv1#

现在我的解决方案是

  • 在数据库中,使用en_GB。
  • lang文件夹名称,使用eg_GB
  • config\app.php

语言环境=〉en_GB

  • 在mcamara/laravel-localization软件包的配置文件“config\laravellocalization.php”中,默认的“supportedLocales”数组是连字符,更改为下划线en_GB,

[......][ ......][ ......][......][... ...][... ...][......][...... ]
和“localesMapping”数组相加

'localesMapping' => [
    'zh_Hant' => 'zh-Hant'
],

默认值为none。
所以url是en-GB,就像http://example.com/en-GB一样。项目中的所有代码都是en_GB。因为mcamara/laravel-localization包将进行Map。
如果我用

App::getLocale()

我将获得“en_GB”,而不是URL的“en-GB”
则可以将$product_translations

foreach($product_translations as $product_translation){
    ...
    $product_translation->$locale = ...
    ...
}

这将是

$product_translation->en_GB
$product_translation->zh_TW
...

我们不需要执行任何str_replace();

相关问题