多个symfony3本地化站点位于不同的地理TLD域中,共享同一个核心 不耐烦的人
在一个将在多个域中部署多个区域设置的项目中,多个symfony3本地化站点位于不同的地理TLD域中,共享同一个核心 不耐烦的人,symfony,deployment,routing,localization,multilingual,Symfony,Deployment,Routing,Localization,Multilingual,在一个将在多个域中部署多个区域设置的项目中,routing.yml策略应该是什么,其中一些区域设置“相似”,并且页面、逻辑和布局完全相同 上下文 我有旅行社。让我们把公共网站命名为“目录”。我目前在我的.es域中有一个Symfony 3项目的西班牙语目录(es_es) 我将把它翻译成加泰罗尼亚语(ca_ES)到我的.cat域中。接下来的翻译将在英国(en_GB)和西班牙墨西哥(es_MX)进行。在未来,更多的“西班牙式”和更多的“英国式”将被加入其中 我目前在symfony有5条主要路线(还有更
routing.yml
策略应该是什么,其中一些区域设置“相似”,并且页面、逻辑和布局完全相同
上下文
我有旅行社。让我们把公共网站命名为“目录”。我目前在我的.es
域中有一个Symfony 3项目的西班牙语目录(es_es
)
我将把它翻译成加泰罗尼亚语(ca_ES
)到我的.cat
域中。接下来的翻译将在英国(en_GB
)和西班牙墨西哥(es_MX
)进行。在未来,更多的“西班牙式”和更多的“英国式”将被加入其中
我目前在symfony有5条主要路线(还有更多路线,但对于这里的问题,这就足够了):
请注意,/viajes
和quienes somo
放在/{destination}
之前,以便匹配者正确捕获它们
我计划在明年增加大约20种语言或语言变体
部署策略
我现在有一个部署人员。该项目由大约10个.git
repo组成,一个用于管理面板,一个用于目录,一个用于DDD模型,一个用于静态,等等
域策略
- 当区域TLD域可用时,我的计划是获得它们:
- 等等
- 如果不可用,我计划在一个特殊的全局域中创建子域或目录:
- 或者:
.git
和一个routing.yml
,我会预测意大利面条的布线问题
我不认为只有:
/qui-som # For Catalan
/chi-siamo # For Italian
/quienes-somos # HEY!! WHAT HERE? es_ES or es_MX???
/who-we-are # the same => en_US or en_GB?
他们需要“主持人”资格
动态路径问题
此外,当路线匹配/{destination}
或/{destination}/{trip}
时,我只想探索目的地的子集:
如果我在example.mx
中,并且我得到了/tailandia/circuito sur norte
,我不需要用所有语言和所有行程浏览完整的目的地列表;只有西班牙语es_MX
seo友好目的地和旅行
类似地,如果我在example.co.uk
中,并且我得到了/thailand/circuit south north
,我只需要浏览en_GB
seo标题就可以得到要呈现的内容
迄今为止的战略思考
我认为有两种策略可以奏效:
a) 路由YML策略
在routing.yml
中,使用与“主机”相关的某种“规则”并手动设置“_locale”参数,类似于:
whoWeAre_es_ES:
path: /quienes-somos
methods: [ GET ]
host: example.es
defaults:
_controller: CatalogBundle:Legal:whoWeAre
_locale: es_ES
whoWeAre_es_MX:
path: /quienes-somos
methods: [ GET ]
host: example.mx
defaults:
_controller: CatalogBundle:Legal:whoWeAre
_locale: es_MX
注意/疑问:我不知道那里的“主机”是否会影响路由匹配器,或者它只是用于构建路由
此外,这会在生成路由时产生问题。如果在主页中我放置了一个指向whoware
的链接,我应该知道要呈现哪些路径,并以某种不需要的意大利面代码生成我
b) 部署者策略
拥有多个routing.yml文件,并调整部署程序中的包含项:
src/CatalogBundle/Resources/config/routing_es_ES.yml
src/CatalogBundle/Resources/config/routing_es_MX.yml
src/CatalogBundle/Resources/config/routing_en_GB.yml
src/CatalogBundle/Resources/config/routing_en_US.yml
然后在部署器中,在文件上使用sed
app/config/routing.yml
并在我当前部署的域的功能中包含一个或另一个路由文件
我喜欢这种方法,因为每个域都有自己的“自动包含”路由定义;它还允许我将整个站点的区域设置设置为config.yml
中的设置,如下所示:
parameters:
locale: en_GB
相反,这造成了丑陋的重复。例如,所有常规匹配路由(如/{destination}/{trip}
)将在所有路由文件中重复
好的,我可以将它们的公共因子提取到另一个文件中,该文件包含在所有它们中
两种方法的共同问题
静态路由仍然只在设置\u区域设置方面有所区别,但共享\u控制器
部分
我不知道symfony中的路由是否可以添加一个default
参数,然后将匹配器转发到另一个命名路由,例如:
whoWeAre_es_ES:
path: /quienes-somos
host: example.es
defaults:
_locale: es_ES
someKindOfReroutingThingPointingTo: whoWeAre
whoWeAre_es_MX:
path: /quienes-somos
host: example.mx
defaults:
_locale: es_MX
someKindOfReroutingThingPointingTo: whoWeAre
whoWeAre_en_GB:
path: /who-we-are
host: example.co.uk
defaults:
_locale: es_MX
someKindOfReroutingThingPointingTo: whoWeAre
whoWeAre:
methods: [ GET ]
defaults:
_controller: CatalogBundle:Legal:whoWeAre
所以问题
- 这两种解决方案中有哪一种是我应该选择的
- 有没有人试过这些方法,并列出了客观的利弊
- SF3应用程序多域本地化的最佳实践路由策略是什么
- 路由定义是否可以添加一些参数,然后切换到另一个具有共同点的路由规则
Thnkx 你应该看一看这个项目中使用的策略。我使用这个包作为我的一个大型多本地化项目的起点。使用此捆绑包,您还可以使用首选地区对每个本地化进行国际化。@哈维·蒙特罗最后做了什么?我也遇到过同样的情况,我很想听听你的最终解决方案是什么。我还没有发布多语言网站,但我仍计划发布。我查看了前面提到的MultisiteBundle,但第一眼就觉得它并不像我希望的那样干净,所以我认为要找到一个最终干净的好解决方案会更困难。我积极地希望找到一个解决办法@db306我不知道StackOverflow中是否有任何私人消息传递的方法,我不这么认为,但我们可能会联系一起探索,以避免这里混乱,一旦我们有了最终的解决方案,就一起发布在这里。我们如何联系?试图通过你的杂志私下联系你。也更新了我的个人资料。
whoWeAre_es_ES:
path: /quienes-somos
host: example.es
defaults:
_locale: es_ES
someKindOfReroutingThingPointingTo: whoWeAre
whoWeAre_es_MX:
path: /quienes-somos
host: example.mx
defaults:
_locale: es_MX
someKindOfReroutingThingPointingTo: whoWeAre
whoWeAre_en_GB:
path: /who-we-are
host: example.co.uk
defaults:
_locale: es_MX
someKindOfReroutingThingPointingTo: whoWeAre
whoWeAre:
methods: [ GET ]
defaults:
_controller: CatalogBundle:Legal:whoWeAre