- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
自 2012 年以来,this post似乎是关于如何在 CakePHP 中执行本地化路由的最权威资源(下面复制的代码)。
它运行良好,但有一个异常(exception):它不会重定向缺少语言前缀的请求。例如,http://example.com将显示与 http://example.com/eng 相同的内容(如果英语是默认语言)。同样,如果不是主页:http://example.com/foo/bar/ => http://example.com/eng/foo/bar .评论中提到了这个问题,但没有确定的解决方案,这就是我正在寻找的。
代码。
// Step 1: app/Config/routes.php
Router::connect('/:language/:controller/:action/*',
array(),
array('language' => 'eng|fra'));
Router::connect('/:language/:controller',
array('action' => 'index'),
array('language' => 'eng|fra'));
Router::connect('/:language',
array('controller' => 'welcome', 'action' => 'index'),
array('language' => 'eng|fra'));
//Step 2: app/Config/core.php
Configure::write('Config.language', 'eng');
//Step 3: create app/View/Helper/MyHtmlHelper.php
App::uses('HtmlHelper', 'View/Helper');
class MyHtmlHelper extends HtmlHelper {
public function url($url = null, $full = false) {
if(!isset($url['language']) && isset($this->params['language'])) {
$url['language'] = $this->params['language'];
}
return parent::url($url, $full);
}
}
//Step 4: app/Controller/AppController.php
class AppController extends Controller {
public $components = array('Cookie','Session');
//set an alias for the newly created helper: Html<->MyHtml
public $helpers = array('Html' => array('className' => 'MyHtml'));
public function beforeFilter() {
$this->_setLanguage();
}
private function _setLanguage() {
//if the cookie was previously set, and Config.language has not been set
//write the Config.language with the value from the Cookie
if ($this->Cookie->read('lang') && !$this->Session->check('Config.language')) {
$this->Session->write('Config.language', $this->Cookie->read('lang'));
}
//if the user clicked the language URL
else if ( isset($this->params['language']) &&
($this->params['language'] != $this->Session->read('Config.language'))
) {
//then update the value in Session and the one in Cookie
$this->Session->write('Config.language', $this->params['language']);
$this->Cookie->write('lang', $this->params['language'], false, '20 days');
}
}
//override redirect
public function redirect( $url, $status = NULL, $exit = true ) {
if (!isset($url['language']) && $this->Session->check('Config.language')) {
$url['language'] = $this->Session->read('Config.language');
}
parent::redirect($url,$status,$exit);
}
}
//add the links to the languages:
//Step 5: app/View/...
echo $this->Html->link('English', array('language'=>'eng'));
echo $this->Html->link('Français', array('language'=>'fra'));
更新 1
我尝试了 user221931 的建议,但它似乎不起作用。这是我添加到 route 的内容:
/* Add default language param */
Router::redirect('/:controller/:action/*',
array('language' => 'fra'),
array('persist' => false) );
Router::redirect('/:controller/',
array('language' => 'fra'),
array('persist' => false) );
Router::redirect('/',
array('controller'=>'pages', 'action'=>'display', 'language' => 'fra', 'home'),
array('persist' => false) );
好像没有效果。以下 URL 不重定向:http:example.com/, http://example.com/controller/ , http://example.com/controller/action/
更新 2根据要求,这是我的完整路线文件:
<?php
/**
* Routes configuration
*
* In this file, you set up routes to your controllers and their actions.
* Routes are very important mechanism that allows you to freely connect
* different URLs to chosen controllers and their actions (functions).
*
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://cakephp.org CakePHP(tm) Project
* @package app.Config
* @since CakePHP(tm) v 0.2.9
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
#http://book.cakephp.org/2.0/en/views/json-and-xml-views.html
Router::parseExtensions('json');
/**
* Here, we are connecting '/' (base path) to controller called 'Pages',
* its action called 'display', and we pass a param to select the view file
* to use (in this case, /app/View/Pages/home.ctp)...
*/
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
/**
* ...and connect the rest of 'Pages' controller's URLs.
*/
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
/**
* LOCALIZED URLs
* See: http://colorblindprogramming.com/multiple-languages-in-a-cakephp-2-application-in-5-steps
*/
Router::connect('/:language/:controller/:action/*',
array(),
array('language' => 'eng|fra'));
Router::connect('/:language/:controller',
array('action' => 'index'),
array('language' => 'eng|fra'));
Router::connect('/:language',
array('controller' => 'pages', 'action' => 'display', 'home'),
array('language' => 'eng|fra'));
# prevent routing conflicts with plugins...
# http://www.omaroid.com/cakephp-locale-language-routing/
// make an array of loaded plugins
$loaded = CakePlugin::loaded();
array_walk($loaded, function(&$item,$key){
$item = Inflector::underscore($item);
});
$loaded = implode('|', $loaded);
Router::connect('/:language/:plugin/:controller/:action/*',
array(),
array('language' => 'eng|fra','plugin' => "($loaded)"));
/* HIDE /index */
//Router::connect('/:controller/', array('action'=>'index') );
Router::connect('/:language/:controller/', array('action'=>'index') );
/**
* Load all plugin routes. See the CakePlugin documentation on
* how to customize the loading of plugin routes.
*/
CakePlugin::routes();
/**
* Load the CakePHP default routes. Only remove this if you do not want to use
* the built-in default routes.
*/
require CAKE . 'Config' . DS . 'routes.php';
最佳答案
这在 AppController.php 中非常简单:
const DEFAULT_LANGUAGE = 'eng';
public function beforeFilter() {
parent::beforeFilter();
if (empty($this->params['language'])) {
$this->redirect(array('language' => self::DEFAULT_LANGUAGE));
}
}
关于php - CakePHP 中的本地化路由 : How to redirect to default language,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27255840/
翻译 silverlight 5 应用程序 (Prism + MEF) 的可用选项是什么? 如果可能的话,我想: 没有 resx 文件(我不喜欢它们的管理方式) 而是提取并翻译 xaml 字符串(我认
我可以同时使用这两种方法来本地化 $| 还是我应该使用其中一种来支持另一种? 方法一:备份“_init_scr”中$|的旧值,并在调用“_end_win”时将$|设置回旧值。方式 2:调用 local
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: C# localization , really confusing me 有人可以分享他们对大型 C# 应
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
我正在使用 Phoenix 框架开发多语言应用程序 到目前为止,路由器看起来像这样: scope "/:locale", App do pipe_through [:browser, :bro
我想为我的域对象添加本地化支持。我有以下几点: class Person { int Id; City city; } class City { int Id; str
我需要 BlackBerry 本地化方面的帮助。我在 http://na.blackberry.com/eng/developers/resources/developer_labs.jsp#tab_
我正在尝试通过关注 documentation 来本地化我的 Flutter 应用程序. 我想要实现的是,在动态构建小部件的同时,我想转换来自我的模型的数据。这是我迄今为止尝试过的 List.gene
如何更改 EKEventEditViewController 中的默认语言,即使我手动设置 AppleLanguages 对象,它也始终是英语 最佳答案 我通过向我的应用程序 plist 添加一个 L
我在 iphone 日期选择器中遇到本地化问题。我希望日期选择器仅以英语显示日期,但现在它需要在 iphone 设置中设置为区域的语言。我尝试了各种没有用的方法像下面这样。 在 uidatepicke
我的应用仅支持荷兰语和法语。英语不是此应用程序的可用语言。如果我想使用可本地化的字符串,则默认值始终设置为英语。我希望这是荷兰语。所以我所做的就是使用英语可本地化字符串文件并用荷兰语单词填充它。我遇到
我即将本地化 iPhone 应用程序。当用户的语言(iOS 系统语言)是德语时,我想使用不同的 URL。 我想知道这是否是正确的方法: NSURL *url = [NSURL URLWithStrin
我正在将我的 iPhone 应用程序本地化为多种语言,除了更改一些字符串之外,我还需要更改一些背景。是否可以查询iPhone并获取用户的语言代码? 谢谢! 最佳答案 看一下 NSLocale: NSS
在本地化的 Iphone(语言设置为希伯来语)上,当我们使用 Safari 查看网页并点击输入字段时,我们会在键盘上显示希伯来语的“下一个/上一个/完成”按钮。 当我们使用应用程序中嵌入的 UIWeb
是否有更好的方法来存储大量文本以在 laravel 中进行本地化?如果我的整个页面只是纯文本,那会很容易,但是我的几个页面具有复杂的布局,我需要添加多个字符串来将文本包裹在图像/链接/媒体等内容周围。
我正在尝试将我的应用程序本地化。我为支持的语言创建了所需的 string.arb 文件。 为什么AppLocalizations.of(context)需要上下文? 我只是想访问文件/语言环境文件/类
绑定(bind)到 double可能会产生以下验证错误 Value ... could not be converted. 使用 ExceptionValidationRule 时错误更健谈: Inp
我有一些 Delphi 经验,并且正在尝试使用 Lazarus 构建一个项目,这对我来说是全新的。 我想,我已经阅读了有关 Lazarus、翻译/国际化/本地化的所有可用信息,但我无法找到我真正想要的
我一直在尝试更新网站的语言。 Controller public function getUpdateLanguage(Request $request) { $request_dat
我正在为我们正在启动的一个项目寻找框架和 CMS,该项目是一个需要支持本地化内容的网站。 Laravel 看起来不错,并且当然允许您本地化 UI 内容,但它似乎本身并不支持存储在数据库中的内容的本地化
我是一名优秀的程序员,十分优秀!