甚至适用于国际
甚至适用于国际
国际公众是Symfony vrijwel vanaf het开始在sob娱乐下载taat geweest om de internationalisering (i18n) en lokalisatie (l10n) op een enenvoudige manier aan te pakken。在界面上的应用,在界面上的应用,在网页上的应用,在网页上的应用,在网页上的应用,在网页上的应用。
URL的internationaliseren
国际网站的网址,是国际网站的网址。Bij het vertalen van een网站界面,moet de URL verschillend zijn per locale, om goed om te kunnen gaan met HTTP缓存(gebruik nooit dezelfde URL en sla de locale op in de sessie)。
Gebruik de speciale_locale
Routeparameter om te verwijzen naar de locale:
1 2 3 4 5 6 7 8 9 10 11
——/ src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ -28,7 +28,7 @@类ConferenceController扩展AbstractController {}- #[路由('/',名称:'主页')]+ #[路由('/{_locale}/',名称:'首页')]public函数index(ConferenceRepository $ ConferenceRepository): Response{返回$this->渲染('conference/index.html. html. html. html)嫩枝”,(
Op de首页word de locale nu ingesteld Op basis van de URL;bijvoorbeeld,人事处/ fr /
, geeft请求- > getLocale ()
νfr
terug。
Omdat je waarschijnlijk niet in staat zult zijn om de inhoud naar alle geldige locales te vertalen, beperk je je tot de locales die je wilt ondersteunen:
1 2 3 4 5 6 7 8 9 10 11
——/ src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ -28,7 +28,7 @@类ConferenceController扩展AbstractController {}- #[Route('/{_locale}/', name: '首页')]+ #[路线(' / {_locale < en | fr >} / ',名字:“主页”))public函数index(ConferenceRepository $ ConferenceRepository): Response{返回$this->渲染('conference/index.html. html. html. html)嫩枝”,(
Elke routeparameter kan worden beperkt door even正则表达式tussen<
>
.德主页
路线komt nu alleen nog maar overeen als de_locale
参数在
的fr
是多少。探针/ es /
Op te vragen, je zou een 404 te zien moeten krijgen omdat er geen route overekomt。
Aangezien we dezelfde vereiste in bijna alle routes zullen gebruiken, verplaatsen we deze naar een containerparameter:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21
——/ config / services.yaml+ + + b / config / services.yaml@@ -9,6 +9,7 @@ parameters: admin_email: "%env(string:default:default_admin_email: admin_email)%" default_base_url: 'http://127.0.0.1'base_url:“% env(默认值:default_base_url: SYMob娱乐下载FONY_DEFAULT_ROUTE_URL) % '+ app.supported_locale: 'en|fr'Services: # this*文件中服务的默认配置——/ src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ -28,7 +28,7 @@类ConferenceController扩展AbstractController {}- #[路线(' / {_locale < en | fr >} / ',名字:“主页”))+ #【路线(' / {_locale < %应用。Supported_locales %>}/', name: '主页')]public函数index(ConferenceRepository $ ConferenceRepository): Response{返回$this->渲染('conference/index.html. html. html. html)嫩枝”,(
我们的门是这样的app.supported_languages
参数bij te werken。
Voeg dezelfde locale route prefix toe aan de andere网址:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20
——/ src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ -36,7 +36,7 @@ class ConferenceController extends AbstractController])->setSharedMaxAge(3600);}- #[Route('/conference_header', name: 'conference_header')]+ #【路线(' / {_locale < %应用。Supported_locales %>}/conference_header', name: 'conference_header')]公共函数conferenceHeader(ConferenceRepository $ ConferenceRepository): Response{返回$this->渲染('conference/header.html. html. html)。twig', [@@ -44,7 +44,7 @@ class ConferenceController extends AbstractController])->setSharedMaxAge(3600);}- #[路线(“/会议/{蛞蝓}”,名字:“会议”))+ #【路线(' / {_locale < %应用。Supported_locales %>}/conference/{slug}', name: 'conference')](Request $ Request, Conference $ Conference,
我们zijn bijna klaar。我们从未见过面/
.拉丁语we deze weer ondersteunen en omleiden naar/ en /
:
12 3 4 5 6 7 8 9 10 11 12 13 14 15
——/ src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ -28,6 +28,12 @@类ConferenceController扩展AbstractController {}+ #(路线(“/”))+公共函数indexNoLocale():响应+ {+返回$this->redirectToRoute('首页',['_locale' => 'en']);+}+#(路线(' / {_locale < %应用。supported_locales%>}/', name: '首页')]公共函数索引(ConferenceRepository $ ConferenceRepository): Response {
Nu dat alle hoofdroutes voorzien zijn van de locale, zie je dat de gegenereerde URL's op de pagina's automatisch rekening houden met de huidige locale。
甚至现场切换到evogen
在stellen van de standard州的Om gebruikers在
现场naar甚至andere现场在te schakelen, voegen we bovenin een switcher toe:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
——/模板/ base.html.twig+ + + b /模板/ base.html.twig@@ -34,6 +34,16 @@Admin . Admin ++ + data-b -toggle="下拉" aria-haspopup="true" aria-expanded="false">+英语+ < / >+
+ <李> < class = " dropdown-item " href = "{{路径(“主页”,{_locale:“en”})}}" >英语< / > < /李>+ <李> < class = " dropdown-item " href = "{{路径(“主页”,{_locale:“fr”})}}" >法语< / > < /李>+ < / ul >李+ < / >
在这里,我们是明确的_locale
Routeparameter door aan de路径()
functie。
更新模板om de huidige locale naam weer te geven in plaats van de hard-coded waarde "English":
1 2 3 4 5 6 7 8 9 10 11
——/模板/ base.html.twig+ + + b /模板/ base.html.twig@@ -37,7 +37,7 @@ .- - - - - -英语+ {{app.request.locale|locale_name(app.request.locale)}}< ul class="dropdown-menu dropdown-menu-right" aria- labledby ="dropdown-language"> English
应用程序
甚至是全球枝变量die toegang geeft tot de huidige的要求。Om de locale Om te zetten naar een menselijk leesbare string, gebruiken we de Twig-filterlocale_name
.
Afhankelijk van de locale word de localenaam niet altijd遇到甚至是hoofletter geschreven。Om op de juiste manier Om te gaan met hoofdletters, hebben we een filter nodig die Unicode-bewust is, zoals de ob娱乐下载Symfony String-component en de Twig-implementatie ervan:
1
$ob娱乐下载Symfony作曲家req twig/string-extra
1 2 3 4 5 6 7 8 9 10 11
——/模板/ base.html.twig+ + + b /模板/ base.html.twig@@ -37,7 +37,7 @@ .- {{app.request.locale|locale_name(app.request.locale)}}+ {{app.request.locale|locale_name(app.request.locale)|标题}}< ul class="dropdown-menu dropdown-menu-right" aria- labledby ="dropdown-language"> English
Je kunt nu wisselen van Frans naar Engels en de hele interface past zich netjes aan:
Vertalen van de interface
Het vertalen van elke zin op een grote网站是een hele klus, maar gelukkig hebben we maar een handvol berichten op onze网站。Laten我们开始遇见alle zinnen op de主页:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
——/模板/ base.html.twig+ + + b /模板/ base.html.twig@@ -20,7 +20,7 @@
德反式
树枝过滤器zoekt甚至垂直van de gegeeven invoer naar de huidige现场。印度niet gevonden, valt het terug naar destandaard语言环境Zoals geconfigureerd配置/包/ translation.yaml
:
1 2 3 4 5 6
框架:default_locale:在翻译:default_path:' % kernel.project_dir % /翻译'回退:-在
Merk op dat het垂直“tabblad”van de web调试工具栏rood是geworden:
Het vertelt on dat er 3 berichten nog niet vertaald zijn。
按下"tab" om alle berichten te tonen waarvoor Symfony gob娱乐下载een垂直的重量
Vertalingen ondersteunen
Zoals je misschien al gezien hebt in配置/包/ translation.yaml
, worden vertalingen opgeslagen in een翻译/
Hoofdmap, die automatic atisch voor ons是aangemaakt。
在platts van de vertaalbestanden遇到了hand aan te maken, gebruik je het翻译:提取
突击队:
1
$ob娱乐下载Symfony控制台翻译:提取fr——force——domain=消息
Dit commando genereert een vertaalbestand (——力
vag) voor defr
现场消息
domein。Het消息
Domein bevat allleapplicatieberichten,代表degene die uit Symfonyob娱乐下载 zelf komen zoals的有效性。
Bewerk het翻译/消息+ intl-icu.fr.xlf
bestand en vertaal de berichten in het Frans。speek je geen Frans?Laat me je helpen:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21
——/ /消息+ intl-icu.fr.xlf翻译+ + + + intl-icu.fr.xlf b /翻译/消息@@ -7,15 +7,15 @@ — __会议留言簿 . 0+ <目标>Livre d'Or pour Conferences目标> . <来源>给出你的反馈!> < /来源- __给出你的反馈!> < /目标 + Donnez votre avis ! - <目标> __View目标> < /+ <目标>选择目标> < /
Merk op that we niet altemplate zullen vertalen, maar voel je vrij om dit wel te doen:
Vertalen van formuliren
公式标签worden门Symfony自动完成weerggob娱乐下载egeven门中间的面包车垂直系统。Ga naar een conferentiepagina en klik op het“Vertaling”tabblad van de web调试工具栏;Je zou alle labels die beschikbaar zijn voor vertical moeten zien:
Lokaliseren van datums
Als je overschakelt naar Frans en en conferentiepagina met reacties bezoekt, zul je zien dat datum van de reacties automatisch gelokaliseerd zijn。这是我们的树枝format_datetime
过滤器gebruikt hebben, die op de hoogte is van locales ({{发表评论。createdAt|format_datetime('medium', 'short')}}
).
基准面、基准面、基准面(format_time
), valuta (format_currency
) en getallen (format_number
)在het algemeen (procenten, duurtijden,拼写,....)。
Vertalen van meervouden
垂直于水的问题是垂直于水的问题,是垂直于水的问题。
即使在会议上,我们也有以下反应:这里有两条评论
.Voor 1反应我们foutief有1条评论
.Wijzig de template zodat de zin om te zetten in een vertaalbaar bericht:
1 2 3 4 5 6 7 8 9 10 11
——/模板/会议/ show.html.twig+ + + b /模板/会议/ show.html.twig@@ -44,7 +44,7 @@
Voor deze bookschap hebben we een andere vertical strategie gebruikt。在格莱斯范德恩格尔斯版在范德恩格尔登,hebben we deze vervangen门甚至是唯一的标识符。Die strategie werkt better voor complexe en grote hoevelheden tekst。
更新het vertabestand门het nieuwe bericht toe te voegen:
12 3 4 5 6 7 8 9 10 11 12 13
——/ /消息+ intl-icu.fr.xlf翻译+ + + + intl-icu.fr.xlf b /翻译/消息@@ -17,6 +17,10 @@<源>会议留言簿源> <目标>Livre d'Or pour会议目标> + + <源> nb_of_comments源> < /+ <目标>{计数,复数,=0 {Aucun commentaire。} =1{1个注释。}other {# commentaires.}}+ < / trans-unit >