localisation
- Comment utiliser les touches courtes
- Récupérer la chaîne de traduction
- Réécrivez le fichier de langue du pack d'extension
Introduction
La fonctionnalité de localisation de Laravel fournit un moyen simple de récupérer des chaînes de différents fichiers de langue, permettant à votre application de mieux prendre en charge le développement multilingue. Les fichiers de langue sont placés par défaut dans le répertoire
resources/lang
. Dans ce répertoire, les fichiers de langue correspondants sont stockés dans les sous-répertoires correspondants, par exemple :resources/lang
目录中。在此目录中,相应的语言文件存放在相应的子目录下,例如:/resources /lang /en messages.php /es messages.php
所有的语言文件都返回一个键值对数组,例如:
<?php return [ 'welcome' => 'Welcome to our application' ];
区域设置
应用的默认语言设置保存在
config/app.php
配置文件中。你可以根据需要修改当前设置,还可以使用App
Facade 的setLocale
方法动态地更改应用运行过程中使用的语言:Route::get('welcome/{locale}', function ($locale) { App::setLocale($locale); // });
你也可以设置『备用语言』,它会在当前语言不包含给定的翻译字符串时被使用。像默认语言一样,备用语言也可以在
config/app.php
配置文件中设置:'fallback_locale' => 'en',
确定当前语言环境
你可以使用
App
Facade 的getLocale
和isLocale
方法确定当前的区域设置或者检查语言环境是否为给定值:$locale = App::getLocale();if (App::isLocale('en')) { // }
定义翻译字符串
使用短键
通常,翻译字符串都存放在
resources/lang
目录下的文件里。在此目录中,但凡应用支持的每种语言都应该有一个对应的子目录:/resources /lang /en messages.php /es messages.php
所有语言文件都返回键值对数组,例如:
<?php // resources/lang/en/messages.php return [ 'welcome' => 'Welcome to our application' ];
使用翻译字符串作为键
对于有大量翻译需求的应用,如果每条翻译语句都要一一使用 『短键』 来定义,那么当你在视图中尝试去引用这些 『短键』 的时候,很容易变得混乱。因此, Laravel 也支持使用字符串 『默认』 翻译作为关键字来定义翻译字符串。
使用翻译字符串作为键的翻译文件以 JSON 格式存储在
resources/lang
目录中。例如,如果你的应用中有西班牙语翻译,你应该在该目录下新建一个resources/lang/es.json
{ "I love programming.": "Me encanta programar." }
Tous les fichiers de langue renvoient un tableau de paires clé-valeur, par exemple :echo __('messages.welcome'); echo __('I love programming.');
Le paramètre de langue par défaut de l'application est enregistré dans leLocale
config/app.php
fichier de configuration au milieu. Vous pouvez modifier les paramètres actuels selon vos besoins, et vous pouvez également utiliser la méthodesetLocale
de la façadeApp
pour changer dynamiquement la langue utilisée lors de l'exécution de l'application : 🎜{{ __('messages.welcome') }} @lang('messages.welcome')
🎜Vous pouvez définissez également "Langue alternative", qui est utilisée lorsque la langue actuelle ne contient pas la chaîne de traduction donnée. Comme la langue par défaut, la langue de sauvegarde peut également être définie dans le fichier de configurationconfig/app.php
: 🎜'welcome' => 'Welcome, :name',
🎜Déterminer les paramètres régionaux actuels
🎜Vous pouvez utiliser les méthodesgetLocale
etisLocale
deApp
Facade pour déterminer les paramètres régionaux actuels ou vérifier si les paramètres régionaux est celui donné. Valeur fixe : 🎜echo __('messages.welcome', ['name' => 'dayle']);
🎜🎜🎜🎜🎜définition des chaînes de traduction🎜🎜🎜🎜🎜Utiliser des touches courtes
🎜Habituellement, les chaînes de traduction sont stockées dansressources/ lang code> dans le répertoire. Dans ce répertoire, il doit y avoir un sous-répertoire correspondant pour chaque langue prise en charge par l'application : 🎜
'welcome' => 'Welcome, :NAME', // Welcome, DAYLE 'goodbye' => 'Goodbye, :Name', // Goodbye, Dayle
🎜Tous les fichiers de langue renvoient un tableau de paires clé-valeur, par exemple : 🎜'apples' => 'There is one apple|There are many apples',
🎜🎜🎜🎜Utiliser des chaînes de traduction comme clés
🎜Pour les applications avec des exigences de traduction importantes, si chaque instruction de traduction doit être définies une par une à l'aide de "touches courtes", donc lorsque vous essayez de référencer ces "touches courtes" dans la vue, cela peut facilement devenir déroutant. Par conséquent, Laravel prend également en charge l’utilisation de la traduction « par défaut » de chaîne comme mot-clé pour définir une chaîne de traduction. 🎜🎜Les fichiers de traduction utilisant des chaînes de traduction comme clés sont stockés au format JSON dans le répertoireresources/lang
. Par exemple, si votre application contient des traductions en espagnol, vous devez créer un nouveau fichierresources/lang/es.json
dans ce répertoire : 🎜'apples' => '{0} There are none|[1,19] There are some|[20,*] There are many',
🎜🎜🎜🎜🎜🎜Récupérer la chaîne de traduction
Vous pouvez utiliser la fonction auxiliaire
__
pour récupérer le fichier de langue. La fonction__
accepte le nom du fichier plus le nom de clé de la chaîne de traduction. comme premiers paramètres. Par exemple, nous souhaitons récupérer la chaîne de traductionwelcome
dans le fichier de langueresources/lang/messages.php
:__
从语言文件中检索,__
函数接受翻译字符串所在的文件名加键名作为其第一个参数。例如,我们要检索resources/lang/messages.php
语言文件中的翻译字符串welcome
:echo trans_choice('messages.apples', 10);
如果你正使用 Blade 模板引擎 ,你可以在视图文件中使用
{{ }}
语法或者使用@lang
指令来打印翻译字符串:'minutes_ago' => '{1} :value minute ago|[2,*] :value minutes ago', echo trans_choice('time.minutes_ago', 5, ['value' => 5]);
如果指定的翻译字符串不存在,那么
__
函数会直接返回该翻译字符串的键名。所以,如果上述示例中的翻译字符串对应的键值对不存在,__
函数将会直接返回messages.welcome
。{note}
@lang
指令不会对任何输出进行转义。当你使用这个指令时,你必须 完全由自己承担 对输出内容的转义工作。翻译字符串中的参数替换
如果需要,你可以在翻译字符串中定义占位符。所有的占位符都有一个
:
前缀。例如,你可以使用占位符 name 定义欢迎消息:'apples' => '{0} There are none|{1} There is one|[2,*] There are :count',
你可以在
rrreee__
函数中传递一个数组作为第二个参数,它会将数组中的值替换到翻译字符串的占位符中:如果你的占位符中包含了首字母大写或者全部为大写,翻译过来的内容也会做相应的大写处理:
rrreee复数
复数是一个复杂的问题,因为不同的语言对复数有不同的规则, 使用 『管道符』
rrreee|
,可以区分字符串的单复数形式:你甚至可以创建更复杂的复数规则,为多个数字范围指定翻译字符串:
rrreee在定义具有复数选项的翻译字符串之后,你可以使用
rrreeetrans_choice
函数来检索给定『数量』 的内容。例如,设置 『总数』 为 10 ,符合数量范围 1 至 19 ,所以会得到 There are some 这条复数语句:你也可以在复数字符串中插入占位符。
rrreeetrans_choice
函数第三个参数所传递数组将会替换占位符:如果你想让传递给
Si vous utilisez le moteur de template Blade, vous peut utiliser la syntaxetrans_choice
函数的 『数量』 参数显示在翻译字符串中,你可以使用:count
rrreee{{ }}
dans le fichier ou utiliser la directive@lang
pour imprimer la chaîne de traduction :{note} La directive
@lang
n'échappe à aucune sortie. Lorsque vous utilisez cette directive, vous devez être seul responsable de l'échappement de la sortie. 🎜🎜🎜Remplacement de paramètres dans les chaînes de traduction h3>🎜Vous pouvez définir des espaces réservés dans la chaîne de traduction si nécessaire. Tous les espaces réservés ont un préfixe
:
. Par exemple, vous pouvez définir un message de bienvenue en utilisant le nom d'espace réservé : 🎜rrreee🎜 Vous pouvez passer un tableau comme deuxième paramètre dans la fonction__
, qui remplacera les valeurs du tableau dans le chaîne de traduction Dans l'espace réservé : 🎜rrreee🎜Si votre espace réservé contient la première lettre en majuscules ou toutes les lettres majuscules, le contenu traduit sera également mis en majuscule en conséquence : 🎜rrreee🎜🎜 🎜🎜🎜Nombres au pluriel
🎜Les nombres au pluriel sont un problème complexe car différentes langues ont des règles différentes pour les nombres au pluriel. Utilisez le "caractère vertical" < code>| , peut différencier les formes singulières et plurielles d'une chaîne : 🎜rrreee🎜 Vous pouvez même créer des règles de pluralisation plus complexes, en spécifiant des chaînes de traduction pour plusieurs plages de nombres : 🎜rrreee🎜 Lors de la définition de traductions avec des options de pluralisation Après la chaîne, vous pouvez utiliser la fonctiontrans_choice
pour récupérer le contenu d'une "quantité" donnée. Par exemple, définir "Nombre total" sur 10 correspond à la plage de quantités de 1 à 19, vous obtiendrez donc l'instruction au pluriel. Il y en a : 🎜rrreee🎜Vous pouvez également insérer des espaces réservés dans la chaîne au pluriel. Le tableau passé dans le troisième paramètre de la fonctiontrans_choice
remplacera l'espace réservé : 🎜rrreee🎜Si vous souhaitez que le paramètre "numéro" passé à la fonctiontrans_choice
soit affiché dans le caractère de traduction Dans la chaîne, vous pouvez utiliser l'espace réservé:count
: 🎜rrreee🎜🎜🎜🎜🎜🎜Réécrivez les fichiers de langue du pack d'extension
Certains packs d'extension peuvent être livrés avec leurs propres fichiers de langue. Vous pouvez les remplacer en plaçant les fichiers dans le répertoire
resources/lang/vendor/{package}/{locale}
au lieu de modifier directement les fichiers principaux du package d'extension.resources/lang/vendor/{package}/{locale}
目录放置文件来重写它们,而不要直接修改扩展包的核心文件。例如,当你需要重写
Par exemple, lorsque vous devez réécrire le fichier de langue anglaiseskyrim/hearthfire
扩展包的英语语言文件messages.php
,则需要把文件存放为resources/lang/vendor/hearthfire/en/messages.php
messages.php
du pack d'extensionskyrim/hearthfire
, vous devez stocker le fichier en tant queressources /lang/vendor /hearthfire/en/messages.php
. Dans ce fichier, il vous suffit de définir les chaînes de traduction que vous souhaitez modifier. Toutes les chaînes de traduction qui n'ont pas été remplacées seront toujours chargées à partir des fichiers de langue d'origine du pack d'extension. .