多个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