4

在我的Symfony应用程序中,我想根据当前用户的文化选择 routing.yml;

'en' => routing.en.yml
'no' => routing.no.yml

等等。

关于如何做到这一点的任何建议?

编辑:我不是想以这种方式做 i18n - 我使用Symfony的内置方法。我只是想要“静态”网址来反映用户的语言:

/en/projects/internal/project-name
/no/prosjekter/interne/prosjektnavn
/fr/baguette/champs-elysee/foux-de-fafa

其中“项目”是一个模块,类别“内部”和“项目名称”存储在数据库中。

4

5 回答 5

4

我最近的一个网站也遇到了同样的问题。但是,我没有找到合适的解决方案,最终将所有 URL 设为英文。

我认为你应该看看ysfDimensionsPlugin - 我还没有检查过,但它可能对你有用。

于 2009-11-03T16:08:50.023 回答
3

我想实现同样的目标。在 Symfony 1.4 中,这是我所做的:

创建了一个域 => 文化地图app.yml

all:
  languages:
    domain_map:
      www.example.com: en
      www.example.it: it
      www.example.es: es

创建了一个myPatternRouting扩展类sfPatternRouting

class myPatternRouting extends sfPatternRouting
{
    public function getConfigFileName()
    {
        $domain_map = sfConfig::get('app_languages_domain_map');
        $domain     = $_SERVER['SERVER_NAME'];
        $culture    = isset($domain_map[$domain]) ? $domain_map[$domain] : 'en';
        $routing    = sprintf('config/routing.%s.yml', $culture);

        return sfContext::getInstance()->getConfigCache()->checkConfig($routing, true);
    }
}

更改了路由的工厂factories.yml

all:
  routing:
    class: myPatternRouting

为 routing.yml 文件的新模式创建了一个配置处理程序条目到config_handlers.yml

config/routing.*.yml:
  class:    sfRoutingConfigHandler

然后将路由文件创建为routing.[culture].yml

它有效:)

于 2012-04-01T10:53:41.453 回答
1

如果不使用过滤器动态加载路由,可能无法做到这一点。您可以覆盖 sfPatternRouting 并编写自定义 loadConfiguration 函数,但是当路由类被实例化时,您需要了解用户的文化*。如果您使用过滤器路由,只需在过滤器链的前半部分加载正确的路由文件。

*如果你走这条路,确保你也改变了 factory.yml。

于 2009-11-03T00:21:10.843 回答
0

我用 这个插件。我的路线如下所示:

news_ro:
  url:   /ro/stiri/:slug
  requirements: { sf_culture: (?:ro),  page: \d+  }
  param: { module: news, action: index, page: 1, sf_culture: ro}


news_en:
  url:   /en/news/:slug
  requirements: { sf_culture: (?:en),  page: \d+  }
  param: { module: news, action: index, page: 1, sf_culture: en }

我根据当前的文化采取蛞蝓。

于 2009-11-07T10:55:26.227 回答
0

我不确定这是实现 i18n 的正确方法。您想通过此解决方案实现什么目标?Symfony 内置了所有 i18n 工具,使用集成方式应该没有问题。

看这里:http ://www.symfony-project.org/book/1_2/13-I18n-and-L10n并向下滚动到“URL 中的文化”框。它应该可以解决您的问题。

于 2009-11-03T15:31:20.470 回答