见getLanguage in JFactory:
$lang = JFactory::getLanguage();
echo 'Current language is: ' . $lang->getName();
获得语言后,您还可以检索区域设置/语言代码(例如en-US)。 Joomla!语言可以有多个语言环境,所以你会得到一个数组。
$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),您可以使用 getTag()
$lang = JFactory::getLanguage();
echo 'Current language is: ' . $lang->getTag()
Joomla!语言文件工作
首先,让我们解释一下语言文件在 Joomla! 中是如何工作的。如果您对此不感兴趣,只需向下滚动查看 PHP 代码。基本原理是,对于每种语言,都使用目录语言中的单独子文件夹。例如:
JOOMLA/language/en-GB
JOOMLA/language/de-DE
JOOMLA/language/fr-FR
JOOMLA/language/nl-NL
在这个文件夹中,Joomla!核心本身可以翻译,但也可以翻译第三方扩展(组件、模块、插件和模板)。默认情况下,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!-login 模块的英语语言文件。但是两次重新加载相同的语言文件并不是很有用。但是代码显示 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! 很重要! bootstrap:语言加载器将加载任何尚未加载的语言文件。因此,如果在您自己的版本之后加载核心语言文件,它实际上会将您自己的更改覆盖回默认值。例如,模板代码在调用实际模块之前执行。这意味着您必须在调用自己的语言文件之前手动调用原始语言文件。
例如,如果我们要覆盖 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
希望这会有所帮助。