gpt4 book ai didi

php - Joomla 3 PHP脚本中的语言标记错误

转载 作者:可可西里 更新时间:2023-11-01 00:59:08 24 4
gpt4 key购买 nike

我有一个joomla多语言网站(fr/en),所有的菜单和内容都使用这两种语言。但是,在我的php脚本中,始终选择en-gb:

$lang = JFactory::getLanguage();
$language_tag = $lang->getTag();
echo($language_tag);

return always en-GB ?

尽管菜单和面包屑正确遵循语言过滤模块中选定的语言。

最佳答案

见AA>

$lang = JFactory::getLanguage();
echo 'Current language is: ' . $lang->getName();

一旦你有了语言,你也可以检索语言环境(例如 en-US)。乔姆拉!语言可以有多个区域,这样就可以得到一个数组。
$lang = JFactory::getLanguage();
foreach($lang->getLocale() as $locale) {
echo 'This language supports the locale: ' . $locale;
}

如果出于某种原因,您只对第一个区域感兴趣,可以简单地抓取第一个元素。您可能需要一个数组,如下所示:
$lang = JFactory::getLanguage();
$locales = $lang->getLocale();
echo 'This language\'s first locale is: ' . $locales[0];

如果您只想获得选定的语言标记(例如PT PT),可以使用GETAG()。
$lang = JFactory::getLanguage();
echo 'Current language is: ' . $lang->getTag()

乔姆拉!语言文件工作
首先,让我们解释一下joomla中的语言文件是如何工作的!。如果您对此不感兴趣,请向下滚动以获取php代码。基本原理是,对于每种语言,都使用目录语言中的单独子文件夹。例如:
JOOMLA/language/en-GB
JOOMLA/language/de-DE
JOOMLA/language/fr-FR
JOOMLA/language/nl-NL

在这个文件夹里,Joomla!核心本身可以翻译,但第三方扩展(组件,模块,插件和模板)。默认情况下,乔姆拉!附带先加载的核心文件。
JOOMLA/language/en-GB/en-GB.ini

在此之后,将加载属于其他扩展名的语言文件。因此,如果您想更改某些翻译,编辑核心文件毫无意义,因为它可能会被其他扩展名覆盖。此外,编辑核心文件是一个核心黑客,用它你的所有更改将被覆盖下一个joomla!升级。
使用模板重写语言字符串
现在的诀窍是所有的扩展(组件、模块、插件、模板)实际上模板代码最终都被加载了。因此,如果为特定模板创建语言文件,则该语言文件将有机会重写以前加载的扩展名中的任何语言字符串。
JOOMLA/language/en-GB/en-GB.tpl_mytheme.ini

重载语言文件
尽管如此,language/en-gb文件夹仍然是核心的一部分,在该文件夹中乱搞并不是我们想要的。相反,我们使用模板创建基于mvc的组件或模块的模板覆盖。那么为什么不创建一个语言文件的模板覆盖呢?
这可以通过加载包含以下代码的语言文件来实现。这段代码可以放在模板的index.php文件中的某个地方——在本例中,是一个名为mytheme的模板。
$language =& JFactory::getLanguage();
$extension = 'mod_login';
$base_dir = JPATH_SITE;
$language_tag = 'en-GB';
$language->load($extension, $base_dir, $language_tag, true);

或者简而言之就是:
JFactory::getLanguage()->load('mod_login', JPATH_SITE, 'en-GB', true);

此示例重新加载joomla的英语文件!-登录模块。但两次重新加载同一语言文件并不是很有用。但代码显示load()函数的第二个参数是joomla所在的基本目录!将查找语言文件。
现在,如果我们创建一个具有以下位置的文件并将$base_dir更改为我们自己的模板目录,这将有效地覆盖以前的语言文件:
$language =& JFactory::getLanguage();
$extension = 'mod_login';
$base_dir = dirname(__FILE__);
$language_tag = $language->getTag(); // loads the current language-tag
$language->load($extension, $base_dir, $language_tag, true);

文件将是:
JOOMLA/templates/mytheme/language/en-GB/en-GB.mod_login.ini

添加您自己的自定义语言文件
但乐趣并不止于此。如果手动加载语言文件,它可以覆盖系统中的任何语言字符串。那么为什么不创建我们自己的自定义语言文件呢?
$language =& JFactory::getLanguage();
$language->load('custom' , dirname(__FILE__), $language->getTag(), true);

此代码将在当前目录(模板目录?)对于具有以下名称的文件夹,具体取决于当前语言。如果文件不存在,joomla!就跳过那个文件。
JOOMLA/templates/mytheme/language/en-GB/en-GB.custom.ini
JOOMLA/templates/mytheme/language/fr-FR/fr-FR.custom.ini
JOOMLA/templates/mytheme/language/de-DE/de-DE.custom.ini

这样就可以对语言字符串进行任何更改,而无需进行任何核心攻击。很不错的。
了解引导
当重载语言文件时,理解joomla是很重要的!引导:语言加载程序将加载任何尚未加载的语言文件。因此,如果核心语言文件是在您自己的版本之后加载的,它实际上会将您自己的更改覆盖回默认值。例如,模板代码在调用实际模块之前执行。这意味着您必须在调用自己的语言文件之前手动调用原始语言文件。
例如,如果要重写mod_poll的语言文件,则要使用的代码如下:
$language =& JFactory::getLanguage();
$language->load('mod_poll'); // this loads the original
$language->load('mod_poll', dirname(__FILE__), $language->getTag(), true); // this loads our own version

希望这有帮助。

关于php - Joomla 3 PHP脚本中的语言标记错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32326435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com