【问题标题】:Managing Locale in Laravel 5.2, local not setting在 Laravel 5.2 中管理语言环境,本地未设置
【发布时间】:2016-08-02 07:53:11
【问题描述】:

我正在尝试在我的网站上使用 2 种语言。

所以,我已经翻译了我的内容,并使用了这个lib

语言切换代码:

            <li class="dropdown language-switch">
            <a class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
                @if (LaravelLocalization::getCurrentLocale() =='en')
                    <img src="/images/flags/GB.png" class="position-left" alt="">
                @elseif (LaravelLocalization::getCurrentLocale() =='es')
                    <img src="/images/flags/MX.png" class="position-left" alt="">
                @else
                    <img src="/images/flags/{{LaravelLocalization::getCurrentLocale()}}.png" class="position-left" alt="">
                @endif


                <span class="caret"></span>
            </a>
            <ul class="dropdown-menu">
                <li><a class="mexico" href="{{  LaravelLocalization::getLocalizedURL(LaravelLocalization::setLocale('es'), Request::url()) }}"><img src="/images/flags/MX.png" alt=""> Español</a></li>
                <li><a class="english" href="{{  LaravelLocalization::getLocalizedURL(LaravelLocalization::setLocale('en'), Request::url()) }}"><img src="/images/flags/GB.png" alt=""> English</a></li>
            </ul>
        </li>

事情是当我尝试检索语言环境时,如果我这样做了:

Lang::getLocale()

App::getLocale() // official docs

语言环境将坚持“en”

但如果我这样做:

Session::get('locale')

会好的。

事情是大部分内容翻译得很好,但有些部分是英文的。

我仔细检查了翻译文件,但这些元素可以使用西班牙语翻译。

所以,我对语言环境有点困惑......

知道发生了什么吗???

【问题讨论】:

标签: php laravel localization


【解决方案1】:

看起来您正在手动覆盖视图中的语言。这似乎也是en 是它最终使用的语言的原因,因为它是列表中的最后一个。

将您的代码更改为:

<li><a class="mexico" href="{{  LaravelLocalization::getLocalizedURL('es', Request::url()) }}"><img src="/images/flags/MX.png" alt=""> Español</a></li>
<li><a class="english" href="{{  LaravelLocalization::getLocalizedURL('en', Request::url()) }}"><img src="/images/flags/GB.png" alt=""> English</a></li>

【讨论】:

  • 它有效,但我不明白为什么:(!你能详细说明一下吗?
  • 在您的代码中,您调用了LaravelLocalization::setLocale('en'),它会在您的应用程序(如App::setLocale())和其他一些地方设置语言环境。它实际生成正确的语言切换器 URL 的原因是它还再次返回了语言环境。但是要生成本地化的 URL,它只需要知道区域设置,而不是实际设置它。
  • 但我不明白的是,好的,网址是好的,你应该去新的本地,但你没有设置任何东西,所以下一页应该去旧的本地(但它不要:),这就是我不明白的。我在做“设置和展示”,现在,我只做“展示”
  • 你的路由中应该有这样的东西:Route::group(['prefix' =&gt; LaravelLocalization::setLocale()...。这是它通过获取当前请求 url 来设置语言环境的部分。通过在您的视图中使用LaravelLocalization::setLocale('en'),您正在覆盖该语言。因此,之后呈现的所有内容都将使用英文翻译。
  • 你是对的!在路线中,我设置了它!我明白为什么它现在起作用了。
【解决方案2】:

首先:检查您的config/app.php 文件。它应该有你的语言环境(可能是es)和你的后备(可能是en

其次:验证您的语言环境标识符是否与其必需项匹配。

第三:通过运行phpinfo(); 转储php 信息并查找HTTP_ACCEPT_LANGUAGE。应该如您所愿。

希望对你有帮助!

编辑:

我注意到您编写了大量代码来实际更改文件名。 如果你将它放在一个 lang 文件中并使用trans() helper 或@lang() Blade 指令调用信息,也许会更干净。

应该是这样的:

<img src="/images/flags/@lang('navigation.lang.image').png" class="position-left">

<img src="/images/flags/{{ trans('navigation.lang.image') }}.png" class="position-left">

【讨论】:

  • 能否请您详细说明第二点,我不太明白!发送!
  • 确保准确设置esen,而不是es-MXen-US。几天前我被抓住了!
猜你喜欢
  • 1970-01-01
  • 2016-09-09
  • 2018-03-31
  • 1970-01-01
  • 2022-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-31
相关资源
最近更新 更多