如何获取当前的语言环境名称? - October CMS

4

请问如何获取当前语言名称或类似内容。

我想在基于October CMS的网站上自定义区域设置切换器。

最好能够获得类似以下的内容:

...
{{ set var = ****.getLocale();}}
...
then use it for switch($var){}
...
3个回答

7
在twig中,你可以使用{{ activeLocale }}来访问当前语言,使用{{ activeLocaleName }}来获取完整的语言名称,使用{{ locales }}来获取所有可用区域设置的数组。
你可以使用{{ dump() }}来查看页面上所有可用的变量。如果你尝试一下,就会发现区域设置变量也在其中。

很不幸,对于我来说{{ activeLocale }}是空的。 - alexwenzel
1
@alexwenzel,你在页面上添加了翻译插件吗? - BenjaVR

6

我尝试使用activeLocalelocales数组,但是无法停止循环,因此我无法有条件地渲染一些内容。这就是我解决问题的方法,在阅读了插件的逻辑之后,我在我的部分中执行了以下操作。

==
use RainLab\Translate\Classes\Translator;
protected $translator;

function onStart()
{
    $this->translator = Translator::instance();
    $this['SelectedLanguage'] = $this->activeLocale = $this->translator->getLocale();
}
==
{% set CurrentLanguage = SelectedLanguage %}

现在{{CurrentLanguage}}将为我提供当前语言的代码,因此现在使用Twig,我可以像这样进行一些条件渲染:

{% if CurrentLanguage is same as('en') %}{% endif %}
{% if CurrentLanguage is same as('tr') %}{% endif %}
{% if CurrentLanguage is same as('gr') %}{% endif %}

也许还有其他解决方案,但这个方法非常有效。
更新:
虽然在组件或其他地方,可以使用会话(session)以此方式检索当前语言。
Session::get('rainlab.translate.locale')

2
假设您使用RainLab.Translate插件?
创建一个部分,使用localePicker组件,然后使用您的自定义代码:
<div>{{ activeLocale }} - {{ activeLocaleName }}</div>
{% for code, name in localePicker.locales %}
    <div>{{ code }} - {{ name }}</div>
{% endfor %}

只需要在需要使用它的地方调用该局部即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接