不同地理顶级域名域中的多个symfony3本地化网站,共享相同的核心

时间:2017-07-11 18:33:34

标签: symfony deployment routing localization multilingual

对于不耐烦的人

项目中的routing.yml策略应该在多个域中部署多个区域设置,某些区域设置是"类似的",并且页面,逻辑和布局绝对是相同?

上下文

我有代理旅行。让我们来命名公共网络"目录"。我目前在我的es_ES域中使用西班牙语(.es)拥有Symfony 3项目的目录。

我会将其翻译成加泰罗尼亚语(ca_ES)到我的.cat域名中。接下来的翻译将使用英语英语(en_GB)和西班牙语墨西哥语(es_MX)。在接下来的未来,更多" spanishes"更多"发表"将被添加,等等。

我目前在我的symfony中有5条主要路线(还有更多,但对于这里的问题,这已经足够了):

/                       # proposal of value, main message
/viajes                 # index of the catalog
/quienes-somos          # Who we are
/{destination}          # for example "/tailandia")
/{destination}/{trip}   # for example "/tailandia/circuito-norte-sur")

请注意,/viajesquienes-somos位于/{destination}之前,以便匹配器正确捕获它们。

我计划在明年增加约20种语言或语言变体。

部署策略

我目前有一名部署员。该项目包括大约10个.git回购,一个用于管理面板,一个用于目录,一个用于DDD模型,一个用于静力学等。

域策略

静态路由问题

如果我只使用一个.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-titles以获取要呈现的内容。

到目前为止的战略

我认为有两种策略可行:

a)路由YML策略

routing.yml中有某种"规则"与"主持人有关#34;并设置" _locale"手工制作的param,类似于:

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

注意/ DOUBT:我不知道是否主持了#34;实际上会影响路线匹配器的东西,或仅用于建造路线。

此外,这会在生成路线时产生问题。如果在主页中我放置了whoWeAre的链接,我应该知道要渲染的那些路线是什么,并在某种意大利面条代码中产生了我的意料。

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})将在所有路由文件中重复。

Okey,我可以将它们的常用因子提取到其他所有文件中。

两种方法的常见问题

静态路由仍然只在设置_locale内容时有所不同,但共享_controller部分。

我不知道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!

0 个答案:

没有答案