可定制的本地化

本页面讲述的内容长期有效

可定制的本地化(Customizable localizations)被引入于补丁 1.20。它们基本上允许添加 括号指令,能被用于本地化以动态地展示不同的文本字符串。 它们能被用在可能使用缺省的 括号指令(例如:定制的工具提示自定触发工具提示决议标题和描述事件标题、描述和选项,等)的每个地方。

定义一个定制的括号指令

定制的括号指令(Custom bracket commands)被定义于一个在 ...\customizable_localization 中的文件。

defined_text = {
    name = GetIfPapalController

    text = {
        localisation_key = string_is_papal_controller
        trigger = {
            is_papal_controller = yes
        }
    }
    text = {
        localisation_key = string_is_not_papal_controller
        trigger = {
            is_papal_controller = no
        }
    }
}

“name”定义括号指令,之后能被用于本地化。 “text”段落定义特定的字符串,其代替括号指令在游戏中展示,如果触发器符合。 “localisation_key”定义被展示的字符串,如果触发器符合。这个关键字需要被本地化,哪怕它不包含任何字符;否则将显示实际的关键字。

“random”属性

可定制的本地化支持使用“random”属性。 如果定制的括号指令使用 random = yes 或者留空,游戏将随机地选择一个符合触发器的字符串,如果有比一个更多的可能的字符串。这意味着,当这样定义一个定制的括号指令,不同“text”段落的触发器应该彼此互斥;类似于多个 if 段落,而不使用 if-else 机制 时。

如果定制的括号指令使用 random = no,游戏将总是选择第一个符合触发器的字符串,即使有其它符合触发器的字符串。类似于 if-else 机制,这很有用,如果有很多字符串,因为触发器不需要被复制很多次。它可能也少些性能开销,因为它很可能不检查全部触发器,而停止在一个触发器被满足之后。

defined_text = {
    name = GetIfPapalController
    random = no

    text = {
        localisation_key = string_is_papal_controller
        trigger = {
            is_papal_controller = yes
        }
    }
    text = {
        localisation_key = string_is_not_papal_controller
        trigger = {
            always = yes
        }
    }
}

局部的字符串

定义于“text”段落的字符串必须被本地化在 localisation 文件中。如果没那么做,游戏将显示关键字代替字符串。 这样,如果一个字符串假定要显示完全没东西,它也必须被本地化。

l_english:
 string_is_papal_controller: "Papal Controller"
 string_is_not_papal_controller: "not Papal Controller"

如果字符串假定要显示没东西,它能只用引号本地化:

l_english:
 string_is_papal_controller: ""
 string_is_not_papal_controller: " not"

用于本地化

定制的括号指令与缺省的 括号指令 相同的方式使用。根据定义的触发器,它们支持不同的作用域(例如:[From.GetIfPapalController][Root.GetIfPapalController])。如果触发器被全局地检查,例如当检查全局标识、日期、年份、年龄、月份等,它们不要求使用作用域,类似于缺省的 括号指令(例如:[GetYear][GetMonth])。

对于上文给出的例子,其中的工具提示应该,根据情况,显示“(国名)is Papal Controller”或者“(国名)is not Papal Controller”。

l_english:
 example_tooltip: "[Root.GetName] is [Root.GetIfPapalController]."

第二个例子在上文“局部的字符串”段落给出,它应该用作这样:

l_english:
 example_tooltip: "[Root.GetName] is[Root.GetIfPapalController] Papal Controller."