当前位置: 首页 > 知识库问答 >
问题:

CakePHP 2。i18n路由

陈坚
2023-03-14

有一些解决方案使用CakePHP路由与参数只有当不是空的?

现在我在下面编码,但我想要一些更好的:

if(Configure::read('Config.language') !== 'en') { // en is default language
    $language = '/:language';
} else {
    $language = '';
}

Router::connect($language .'/'. __('register', true), array(
    'controller' => 'users',
    'action' => 'register'));

这段代码工作得很好,但我仍然必须通过url()方法在AppHelper中设置语言。

在旧的应用程序中,我总是重复路由器::连接:

Router::connect('/:language/'. __('register', true), array(
    'controller' => 'users',
    'action' => 'register')); // for all languages without default language
Router::connect('/'. __('register', true), array(
    'controller' => 'users',
    'action' => 'register')); // only for default language (en)

也许有最简单的解决办法?

共有2个答案

唐阳飙
2023-03-14

好的,这些东西工作得更好,但我还有其他问题。

我设置默认语言配置e::写('Config.language');en在bootstrap.php

接下来,我为url编写了shema,如下所示:

Router::connect('/:language/'. __('register', true), array('controller' => 'users', 'action' => 'register'), array('persist' => array('lang')));
Router::connect('/'. __('register', true), array('controller' => 'users', 'action' => 'register')); 

当用户通过在AppController(设置新的Config.language)中的beForeFilter更改语言时,将内容从静态. po和db Worsk完美,但链接没有翻译。参数:语言工作,但神奇的功能__()路由器:连接()不工作。

因为首先加载的是引导。php,接下来是路由器。最后是AppController。php

我的问题是,如何强制路由器。php来翻译链接(\uuuuuux0())?

对不起,我还是学英语。。。

邵伟泽
2023-03-14

您需要使用2个路由,但为基于语言的路由添加“持久化”选项。添加“persist”将避免每次生成URL时都必须指定“language”键。

// for all languages without default language. 
Router::connect(
    '/:lang/'. __('register', true),
    array(
        'controller' => 'users', 
        'action' => 'register'
    ), 
    array(
        'persist' => array('lang')
    )
);

// only for default language (en)
Router::connect(
    '/'. __('register', true),
    array(
        'controller' => 'users', 
        'action' => 'register'
    )
); 

您可能还想签出CakeDC的I18n插件。

 类似资料:
  • 我有一个i18n项目在Symfony 4.1上运行。 我想实现一些路由,如: /= 在本文之后,我将使用注释处理路由,并为注释路由设置全局前缀: 这样,从'.../src/Controller/'注释中定义的所有路由都带有前缀,这导致我的“选择语言”页面和主页之间的冲突。 我想从i18n前缀中排除“选择语言”页面,这样当主页可以停留在 /fr或 /en.时,我就可以使用“/”了 有什么办法可以做到

  • 我有一个简单的(目前)应用程序,使用react router和redux,我想为它添加国际化功能。 我已经安装了npm包,并且能够安装和运行提供的示例。我已经将适当的导入添加到我自己的应用程序中,并将国际化标签添加到根渲染方法中。 当我将I18nextProvider标记添加到render方法时,我得到了错误 找不到模块“react” 这并不是特别有用,尤其是因为如果我删除标签,react应用程序

  • Installation and configuration of locales. Locale installation This chapter describes the installation of locales in SliTaz GNU/Linux from a SliTaz GNU/Linux host system. The installation of locales c

  • This tutorial will walk you through the basis of the Docusaurus i18n system. We will add French translations to a newly initialized English Docusaurus website. Initialize a new site with npx @docusaur

  • i18n-chain 是一个 TypeScript 高性能 i18n(国际化)操作组件,支持 React、React-Native、Taro 与 NodeJS。 采用链式操作,并具有提示功能,代码可以自动补全。 支持以下浏览器:

  • Nuiton-I18n 是一个 Java 国际化开发包,基于 ResourceBundles 类。 示例代码: I18n.init(new DefaultI18nInitializer("myBundle"), Locale.FR);System.out.println(I18n._("This text will be translated"));