我正在尝试为现有的Laravel项目实现一个简单的本地化。
基于以下教程实现本地化:
https://laraveldaily.com/multi-language-routes-and-locales-with-auth/
以下是本地化实施前的简化代码:
web.php
Route::get('/poll/{poll_id}', 'App\Http\Controllers\PollsController@view');
PollsController@view
public function view($poll_id){
echo "poll_id: ".$poll_id;
}
测验
网址:http://domain.name/poll/1
结果:poll_id: 1
以下是本地化所需的简化更改和我得到的结果:
web.php
Route::group(['prefix' => '{locale}', 'where' => ['locale' => '[a-zA-Z]{2}'], 'middleware' => 'setlocale'], function() {
Route::get('/poll/{poll_id}', 'App\Http\Controllers\PollsController@view');
});
中间件/设置语言环境
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class SetLocale
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next){
app()->setLocale($request->segment(1));
return $next($request);
}
}
PollsController@view保持不变。
现在,当我打开以下URL(http://domain.name/en/poll/1)时,结果是:
结果:poll_id: en
问题
有没有办法忽略“前缀”=
最简单的修复方法是在PollsController@view按照以下方式,但闻起来不太好闻,因此我需要向所有函数添加locale参数,尽管我没有在那里使用它:
public function view($locale, $poll_id){
echo "poll_id: ".$poll_id;
}
在中间件中,您可以告诉Route实例忘记该Route参数,这样它就不会试图将其传递给Route操作:
public function handle($request, $next)
{
app()->setLocale($request->route('locale'));
// forget the 'locale' parameter
$request->route()->forgetParameter('locale');
return $next($request);
}
问题内容: 我在AngularJS应用程序中为i18n 使用angular-translate。 对于每个应用程序视图,都有一个专用的控制器。在下面的控制器中,我设置了要显示为页面标题的值。 码 的HTML 的JavaScript 我正在使用angular-translate-loader-url扩展名加载翻译文件。 问题 在初始页面加载时,将显示翻译键,而不是该键的翻译。翻译是,但我看到了。 第
我试图设置cookie来定义用户首选的语言。我通过一个指向助手控制器的链接做到了这一点: /设置区域设置/{locale} 我知道这是正确的,因为如果我这样做: 它显示所选择的正确区域设置。所以下一步是使用中间件实际应用这个选择的语言环境,我把它命名为“设置语言环境”: 但如果我执行 在中间件中,它读取所有加扰的cookie。所以我的问题是为什么它会这样做,我如何从这里正确地读取cookie?
null 现在的问题是: > 作为控制器方法执行的结果,我将返回对象的映射,该映射将解析为JSON。可能的实体是: {“结果”:“12”} 我应该如何提供基于结果的附加消息?我能想到两个解决办法: > 返回映射,该映射在肯定验证结果的情况下具有result=true,在否定验证结果的情况下具有result=false,以及带有相应消息的errorCode 返回指示验证结果的布尔值,并另外对否定结果
我有一个复杂的对象,我需要在提交表单时传递给控制器。这个复杂对象有一个对象和一个对象列表。这是我的Web API控制器,它通过使用Ajax的post接收复杂对象: 这是我的html表单: 这是我通过Ajax发送复杂对象的jQuery代码:
我想在缓存控制头中设置max age以响应。我已经写了如下,但仍然有max-age 0。我想只为一种方法设置max age,所以我不想禁用默认值。我认为应该是ovveride。 有人知道我做错了什么吗?