Cet article vous présente principalement les informations pertinentes sur le module de localisation du didacticiel d'apprentissage Laravel. L'article vous le présente en détail à travers un exemple de code. Il a une certaine valeur d'apprentissage de référence pour les études ou le travail de chacun. ça peut suivre Venez apprendre avec moi. J'espère que cela aide tout le monde.
Avant-propos
Cet article présente principalement le contenu pertinent sur le module de localisation Laravel et le partage pour votre référence et votre étude. Cela dit, jetons un coup d’œil à l’introduction détaillée.
Cet article est basé sur l'analyse et l'écriture du code du module localisé de la version Laravel 5.4
Composition du module
Les paramètres liés à ce module dans le répertoire de configuration config sont uniquement locale et fallback_locale dans le fichier app.php
locale indique quelle est la langue de localisation par défaut, afin que les traductions soient obtenues en premier à partir de la ressource de langue ; contenu du répertoire (Conversion) ;
Introduction aux fonctions
Le répertoire global des ressources linguistiques se trouve sous les ressources/lang du projet. Chaque sous-répertoire est nommé d'après la langue, par exemple en. , zh_CN, etc.; Certains autres sous-répertoires portent le nom d'espaces de noms, qui sont des remplacements supplémentaires pour les fichiers de ressources de bibliothèque de chargement tiers
Il peut également y avoir des fichiers Json tels que en.json ; et zh_CN, et les projets partent parfois des données de lecture du fichier Json, ces données proviennent de ce fichier Json existant
Sortie "nom d'utilisateur en appelant le code
ou l'aide globale function trans
<?php return [ 'accepted' => ':attribute 必须接受。', 'active_url' => ':attribute 不是一个有效的网址。', 'after' => ':attribute 必须是一个在 :date 之后的日期。', ...... ];
Doit être accepté ";
app('translator')->trans('validation.accepted', ['attribute' => '用户名'])
Le processus d'appel est le suivant :
trans('validation.accepted', ['attribute' => '用户名'])
Analyser le. nom de la clé : analyse le nom de la clé dans un tableau () ; l'espace de noms est *, ce qui signifie qu'il se trouve dans l'espace de noms global, groupe, est en fait le nom du fichier, et un fichier est un élément de groupe ;
$namespace = '*', $group = 'validation', $item = 'accepted'
Méthode pour obtenir la valeur de l'élément de $this->loaded[$namespace][$group][$locale] = $lines;
: l'attribut doit être accepté. ;À ce stade, le tableau de paramètres n'est pas vide, remplacement de boucle, et le résultat est "Le nom d'utilisateur doit être accepté.";
Arr::get
$this->loaded[$namespace][$group][$locale]
Traduire les langues avec des espaces de noms Ressources
L'auteur a créé le fichier supplier/Faker/Provider/zh_CN/Internet.php sous le répertoire racine des ressources de langue resource/lang, avec le contenu suivant : En même temps, enregistrez manuellement l'emplacement du répertoire racine des ressources du plug-in tiers (c'est-à-dire avec un espace de noms) dans Translator ; >Maintenant, obtenez la ressource avec l'espace de noms ;
Sortie 'bonjour, Faker/Provider'
<?php return [ 'message' => 'hello, Faker/Provider', ...... ];
Le processus d'appel est le suivant :
app('translator')->addNamespace('Faker/Provider', base_path('vendor/xx/resource/lang'))
解析键名:将键名进行解析成数组 ($namespace = 'Faker/Provider', $group = 'Internet', $item = 'message');
获取语言数组: 这里的$locale为null,所以返回的是默认与备用语言组成的数组,也就是['zh_CN', 'en'];并进行for循环,进入语言资源目录中寻找需要的元素值,如果找到,即 break;
加载资源:因为命名空间为Faker/Provider,此时会分两步;第一步读取第三方插件资源库下的信息,这时读取命名空间注册的根目录为base_path('vendor/xx/resource/lang'),就读取base_path('vendor/xx/resource/lang')/zh_CN/Internet.php内容,文件不存在,返回空数组;第二步读取全局语言资源,进行补充,也就是读取base_path('resource/lang/vendor/Faker/Provider')/zh_CN/Internet.php;
最后进行保存 $this->loaded[$namespace][$group][$locale] = $lines;
获取资源,并替换参数:通过Arr::get
方法从$this->loaded[$namespace][$group][$locale]中
获取元素值" hello, Faker/Provider";此时,参数数组为空,直接返回结果 "hello, Faker/Provider";
翻译Json文件中的资源
笔者在语言资源根目录resource/lang下,创建zh_CN.json文件,内容如下:
{ "name": "zh_CN.json", "place": "../resources/lang/zh_CN.json" }
现在,获取Json文件中的name值;
trans('*.name')
输出 "zh_CN.json";
调用过程如下:
解析键名:将键名进行解析成数组 ($namespace = '*', $group = '*', $item = 'name');
获取语言数组: 这里的$locale为null,所以返回的是默认与备用语言组成的数组,也就是['zh_CN', 'en'];并进行for循环,进入语言资源目录中寻找需要的元素值,如果找到,即 break;
加载资源:因为命名空间为*,且组也为*,这时会读取语言根目录下,名字为语言值的Json文件;此时会读取resource/lang/zh_CN.json,将读取的内容,进行保存 $this->loaded[$namespace][$group][$locale] = $lines;
获取资源,并替换参数:通过Arr::get方法从$this->loaded[$namespace][$group][$locale]
中获取元素值"zh_CN.json";此时,参数数组为空,直接返回结果 "zh_CN.json";
运行时绑定资源
资源的内容除了放在文件中,用到的时候在读取,也可以在项目运行时,存放;
以resources/lang/zh_CN/validation.php为例,现在想要在运行时,给这个组添加一个新的元素叫 extra,需要指定放在哪个语言下,可以这样写
app('translator')->addLines(array('validation.extra' => '测试添加额外数据'), 'zh_CN');
现在可以获取这个新添加的元素值
trans('validation.extra')
复数资源过滤
笔者通过 运行时绑定资源 添加一条翻译内容:
app('translator')->addLines(array('validation.extra' => '{0}没有|[1,19]一些|[20,*]很多'), 'zh_CN');
如果通过trans('validation.extra')
,获取的就是整条翻译内容,不是我们所期望的;用choice方法:
app('translator')->choice('validation.extra', 0)
得到 没有;
app('translator')->choice('validation.extra', 18)
得到 一些;
app('translator')->choice('validation.extra', 20)
得到 很多;
可以将app('translator')->choice(...)
简写成全局帮助函数trans_choice(...);
相关推荐:
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!