跳至主要内容
版本:5.1

多语言

Joomla提供了强大的多语言支持,允许开发人员创建易于翻译和在不同语言中使用的扩展。

Joomla如何支持多种语言

Joomla区分**已安装语言**(Joomla核心或扩展程序已翻译成的语言)和**内容语言**(网站内容可以使用的语言)。

这种区分有助于更有效地管理翻译。

语言常量

为了处理翻译,Joomla使用**语言常量**。这些常量在语言文件(.ini.sys.ini)中定义,并在整个代码库中使用。

通过使用**常量**,您可以确保您的扩展程序易于翻译。

语言文件

**语言文件**是简单的文本文件,将语言常量映射到其翻译。主要有两种类型的语言文件

  • .ini文件:用于**常规翻译**。
  • .sys.ini文件:用于**安装和系统消息,以及扩展程序在后端显示的位置(例如已安装的扩展程序列表)**。

这是一个语言文件(mod_example.ini)的示例

MOD_EXAMPLE_HELLO="Hello"
MOD_EXAMPLE_GOODBYE="Goodbye"

将其放置在扩展程序的language/en-GB目录中。

在您的扩展程序中实现多语言支持

语言文件存储位置

Joomla中的语言文件存储为.ini文件,并根据扩展程序的类型放置在特定的目录中

  • **组件:**language/en-GB/com_example.ini
  • **模块:**language/en-GB/mod_example.ini
  • **插件:**language/en-GB/plg_example.ini
  • **模板:**language/en-GB/tpl_example.ini

语言根目录

语言文件可以存储在以下任一根目录中

  • **前端:**/language
  • **管理员(后端):**/administrator/language

何时使用每个目录

  • **使用/language:**用于与网站前端关联的语言文件(例如,影响访客看到内容的组件、模块或模板)。
  • **使用/administrator/language:**用于与网站的后端或管理员界面关联的语言文件(例如,仅由管理员使用的管理组件、模块或插件)。

通过将语言文件放置在正确的目录中,Joomla可以根据扩展程序是在前端还是后端使用来正确加载语言字符串。

使用Text

要翻译代码中的字符串,请使用Joomla的Text处理类。

use Joomla\CMS\Language\Text;

// Usage in PHP code
echo Text::_("MOD_EXAMPLE_HELLO"); // Outputs: Hello

echo Text::_("MOD_EXAMPLE_GOODBYE"); // Outputs: Goodbye

传递给Text::_方法的键必须与相应语言文件或语言覆盖中定义的键匹配。

组件中的语言文件

信息

从Joomla版本4和5开始,您不再需要在语言文件名中包含语言前缀(如en-GB.)。

组件的语言文件应按以下方式组织

components
com_example
language
en-GB
com_example.ini // Site language strings (for the frontend)
com_example.sys.ini // System language strings (for the backend/administrator)

模块中的语言文件

modules
mod_example
language
en-GB
mod_example.ini // Site language strings (for the frontend)
mod_example.sys.ini // System language strings (for the backend/administrator)

在清单中包含语言文件

为了确保您的扩展程序的语言文件被识别,请将其包含在**扩展程序的清单文件中**。

<languages>
<language tag="en-GB">language/en-GB/mod_example.ini</language>
<language tag="en-GB">language/en-GB/mod_example.sys.ini</language>
</languages>

有关清单文件的更多详细信息,请参阅Joomla文档

数据库模式

对于组件,请确保在数据库表中包含一个“language”列以存储内容的语言代码。

这样做允许您根据语言过滤内容。

CREATE TABLE `#__example` (
`id` INT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(255) NOT NULL,
`language` CHAR(7) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

保存内容时,此列应填充语言代码(例如,en-GBfr-FR*表示所有语言)。

调试多语言问题

Joomla提供强大的调试工具,以帮助识别未翻译的字符串并解决已安装扩展程序中语言翻译的问题。

以下是启用和使用这些工具的方法

  1. 访问全局配置

    • 从主页仪表盘中,单击系统面板中的**全局配置**按钮。
  2. 启用调试语言

    • 在系统面板中,将**调试语言**切换为**是**。
  3. 调整语言显示

    • 语言显示的默认设置为**值**。将其更改为**常量**可能会由于长常量无法正确换行而导致布局中断。

当激活**调试语言**时,Joomla会使用特殊字符突出显示所有可翻译的值,这些字符指示其状态

  • 已翻译的字符串

    • 用星号(*Joomla CMS*)包围的文本表示该字符串已从语言文件中成功翻译。
  • 未翻译的字符串

    • 用问号(??Joomla CMS??)包围的文本表示该字符串旨在进行翻译,但在语言文件中未找到相应的条目。
  • 不可翻译的字符串

    • 没有任何特殊字符(Joomla CMS)的文本表示该字符串未设置为翻译。

您还可以利用**调试栏**来查看突出显示的字符串,并识别扩展程序中任何未翻译或不可翻译的值。

img.png

启用带有调试语言调试栏时,它提供了所有调试信息的便捷概述,包括未翻译的语言字符串,直接显示在您的网站上。此工具对于开发人员确保所有语言字符串都正确实现特别有用。

其他资源

语言覆盖

语言覆盖允许管理员自定义翻译,而无需修改核心语言文件。

此功能可以通过后端访问,位于系统 > 语言覆盖下。选择站点用于前端字符串,选择管理员用于后端字符串。

语言关联

语言关联

Joomla的多语言关联组件通过允许您将翻译相互关联来简化多语言内容的管理。

启用和使用多语言关联

  1. 启用语言过滤器插件

    • 导航到**扩展 > 插件**。
    • 搜索**系统 - 语言过滤器**插件,启用它。
    • 将**项目关联**设置为**是**,然后保存更改。
  2. 创建内容的翻译

    • 转到**内容 > 文章**。
    • 编辑一篇文章,并在**关联**选项卡中,单击**创建**按钮以生成所需语言的翻译。
    • 添加翻译的标题和内容,然后保存文章。
  3. 管理多语言关联

    • 转到**组件 > 多语言关联**。
    • 使用此界面并排查看和管理所有翻译,从而更轻松地跟踪和关联您的多语言内容。

此过程对于维护网站不同语言版本的一致性至关重要。

如何在组件中启用语言关联在Joomla 文档中进行了描述。

表单字段

Joomla 提供了用于语言和内容语言的标准表单字段。这些字段可用于您的扩展程序,以更有效地管理多语言内容。请参阅以下链接以获取更多信息

通过遵循这些指南,您可以确保您的 Joomla 扩展程序完全支持多语言,为不同语言的用户提供无缝体验。