将 LookML 模型本地化

模型本地化通常在进行数字格式本地化和选择界面语言的同时进行。如需详细了解这些主题,请访问本地化数字格式支持的界面语言文档页面。

使用模型本地化功能,您可以根据用户的语言区域来自定义模型的标签和说明的显示方式。

您不必根据地理位置或语言进行本地化。您可以使用语言区域来表示其他差异化因素(例如内部用户、外部用户、管理员还是个人贡献者),并相应地自定义您的标签和说明。

模型本地化目前与项目导入不兼容。

本页面介绍了本地化项目的步骤:

如需详细了解如何将 Looker 界面本地化或本地化数字格式,请访问支持的界面语言本地化数字格式文档页面。

在模型文件中使用本地化元素

您可以将模型中的标签、组标签和说明本地化,包括:

dimension_group 不支持本地化。您可以改用 group_labelgroup_item_label 自行创建一组可本地化的维度。

您还可以在项目中创建本地化的 LookML 信息中心。以下 LookML 信息中心参数可以本地化:

如需查看项目中的所有可本地化字段,您可以将项目的本地化级别设置为 strict。使用此设置时,对于任何可本地化但没有标签的 LookML 元素,以及 LookML 模型中可本地化但未在语言区域字符串文件中定义的任何字符串,Looker IDE 都会返回 LookML 验证错误。

以下是包含一些标签和说明的视图文件示例:

view: flights {
  label: "flight_info"
  sql_table_name: flightstats.accidents ;;

  dimension: id {
    label: "id"
    primary_key: yes
    type: number
    sql: ${TABLE}.id ;;
  }

  dimension: air_carrier {
    label: "airline"
    type: string
    sql: ${TABLE}.air_carrier ;;
  }

  dimension: country {
    label: "country"

    type: string
    map_layer_name: countries
    sql: ${TABLE}.country ;;
  }

  dimension: number_of_engines {
    label: "number_of_engines"
    type: string
    sql: ${TABLE}.number_of_engines ;;
  }

  dimension: location {
    type: string
    sql: ${TABLE}.location ;;
  }

我们将使用 permissive 本地化级别,将这些值本地化到字符串文件中。请注意,location 维度没有标签,因此我们可以展示未本地化的维度如何显示。

创建语言区域字符串文件

语言区域字符串文件使用键值对来指定为每个语言区域显示模型中的标签和说明的方式。每个键值对的左侧是定位键,它可以是您的模型的标签或说明字符串。您可以在键值对的右侧定义该字符串在 Looker 界面中的显示方式。

为项目所需的每个语言区域创建一个专用的字符串文件。您只能为项目中的每个语言区域创建一个字符串文件。必须有一个名为默认语言区域的字符串文件。例如,如果您在项目的清单文件中指定了 default_locale: en,则模型中必须具有一个名为 en.strings.json 的文件。每个字符串都必须在 default 语言区域字符串文件中定义,否则将无法进行本地化。

模型本地化无需基于地理位置或语言。但是,如果您使用模型本地化,并且还想使用 Looker 原生本地化的信息中心和可视化界面,则必须将字符串文件的标题与 Looker 支持的语言区域代码相匹配。

下面是一个 en.strings.json 文件示例,该文件将用于 Locale 值为 en 的所有用户。在本例中,我们还将 en 指定为默认语言区域,因此,所有文件都必须在此文件中定义才能进行本地化。

{
  "flight_info": "Flights",
  "id": "Identifier",
  "airline": "Air Carrier",
  "country_of_departure": "Country of Departure",
  "number_engines": "Number of Engines"
}

en 用户在 Looker 中会看到以下内容:

请注意以下几点:

  • 上面的视图文件中,我们没有为 location 维度提供标签,因此 Looker 显示了这个维度名称的首字母大写:“Location”。
  • 我们没有在 en.strings.json 文件中为“国家/地区”标签定义本地化,因此 Looker 会按照视图文件中定义的方式显示标签,而不会将其大写:“country”。

再举一例,我们可以创建一个 es_ES.strings.json 文件,供 Locale 值为 es_ES 的所有用户使用:

{
  "flight_info": "Vuelos",
  "id": "Identificador",
  "airline": "Aerolínea",
  "country": "País",
  "country_of_departure": "País de Partida",
  "number_engines": "Número de Motores"
}

es_ES 用户在 Looker 中会看到以下内容:

请注意以下几点:

  • 与上个示例一样,在上面的视图文件中,我们没有为 location 维度提供标签,因此 Looker 显示了维度名称的首字母大写:“Location”。
  • 我们没有在 en.strings.json 文件中将“国家/地区”标签本地化,因为这是我们的默认语言区域字符串文件。因此,即使我们在 es_ES.strings.json 文件中定义了“国家/地区”,Looker 也不会本地化此字符串,而是按照视图文件中定义的“国家/地区”来显示标签。

将本地化设置添加到项目的清单文件中

如需为您的项目启用本地化功能,请在项目的清单文件中添加 localization_settings 参数。

如果您的项目还没有清单文件,您可以使用 Looker IDE 中文件浏览器顶部的 + 图标创建一个

在清单文件中,添加您的本地化设置。示例如下:

localization_settings: {
  default_locale: en
  localization_level: permissive
}

default_locale

default_locale 参数指定项目中默认语言区域字符串文件的名称。

默认语言区域字符串文件决定了模型中的哪些字符串已本地化。即使标签或说明字符串是在其他语言区域字符串文件中定义的,而未在默认语言区域字符串文件中定义,Looker 界面也会显示未本地化的字符串。如需详细了解如何设置语言区域字符串文件,请参阅上文

项目的默认语言区域不要与 Looker 用户的默认语言区域混淆。Looker 管理员可以为您的实例设置默认语言区域。如果未设置默认值,Looker 将默认为 en。如果管理员没有为用户或用户所属的用户群组明确输入语言区域值,Looker 会将该用户分配到默认实例语言区域。此外,如果管理员尚未设置默认实例语言区域,Looker 会将用户分配到 en 语言区域。

因此,除非您确定 Looker 管理员将为您的所有 Looker 用户设置语言区域值,否则应该将项目的 default_locale 参数设为实例的默认语言区域(如果未设置默认设置,则设为 en),并在 .strings.json 文件中为该语言区域定义所有标签和说明。

localization_level

项目的本地化级别可指定模型中是否允许使用未本地化的元素:

  • 将本地化级别设置为 strict,要求项目中的所有模型、探索、视图和字段使用本地化标签。Looker IDE 会针对以下所有没有标签的元素以及未在默认语言区域字符串文件中定义的任何标签和说明返回 LookML 验证错误。
  • 将本地化级别设置为 permissive,以允许不带标签的元素,以及允许在默认本地化字符串文件中定义的标签和说明。

即使在需要 strict 本地化级别时,在开发项目时也可能需要将项目的本地化级别设为 permissive,以免出现验证错误。完成所有标签和说明的本地化后,您可以将本地化级别设置为 strict 以查看任何错误。

将用户分配到语言区域

设置语言区域字符串文件后,您可以将用户分配到与其中一个语言区域字符串文件对应的语言区域。您可以使用语言区域字段或 locale 用户属性在实例用户群组具体用户级别完成此操作。

例如,如果您希望用户看到 es_ES.strings.json 文件中定义的标签和说明,Looker 管理员应将用户的语言区域设置设为 es_ES

使用字符串文件创建的自定义语言区域可以在语言区域字段中输入,方法是点击该字段并输入字符串文件名,而不是从下拉菜单中选择内置语言区域。如需了解详情,请参阅用户文档页面。

如果没有为个人或群组用户设置语言区域,Looker 会将用户分配到实例语言区域。但是,如果没有为实例语言区域设置 .strings 文件,则模型本地化将不适用于这些用户。因此,您应为每个实例的默认语言区域设置一个 .strings 文件。如需了解详情,请参阅 default_locale创建语言区域字符串文件部分。

为 SSO 嵌入用户设置语言区域

与其他任何用户属性一样,您可以在 SSO 嵌入网址中添加用户的语言区域值。SSO 嵌入所需的确切格式取决于用于构建 SSO 嵌入网址脚本的编程语言,但用户属性的名称为 locale。要详细了解单点登录嵌入网址和用于构建单点登录嵌入网址的工具,请参阅单点登录 (SSO) 嵌入文档页面。

在 Liquid 变量中使用语言区域

如上所述,模型本地化可让您自定义针对不同语言区域的模型的标签和说明。但您也可以在 Liquid 变量中添加本地化键,以便对数据值进行本地化。

例如,在名为 en.strings.json 的默认语言区域字符串文件中,我们可以使用以下条目创建本地化键 domesticinternational

{
  "domestic": "Domestic",
  "international": "International"
}

然后,在 es_ES.strings.json 文件中,我们可以提供以下本地化键的西班牙语版本:

{
  "domestic": "Nacional",
  "international": "Internacional"
}

然后,我们可以使用 Liquid 变量中的 domesticinternational 本地化键本地化维度的输出:

dimension: from_US {
    label: "from_us"
    type: string
    sql: CASE
         WHEN ${TABLE}.country = 'United States' THEN '{{ _localization['domestic'] }}'
         ELSE '{{ _localization['international'] }}'
         END;;
  }

现在,使用 en 语言区域的用户会看到以下内容:

下面是使用 es_ES 语言区域的用户看到的内容:

您还可以在信息中心信息中心元素过滤器中使用 Liquid 来过滤过滤器中的默认值。例如,如果 LookML 信息中心有一个来自上述“探索”的卡片,并且该卡片上有过滤器,定义如下:

filters:
  flights.from_US: "{{ _localization['domestic'] }}"

使用 en 语言区域的用户在信息中心内通过该图块探索时会看到以下内容:

下面是使用 es_ES 语言区域的用户在信息中心内通过该图块进行探索时会看到的内容:

了解本地化规则如何应用于扩展对象和优化对象

请注意,当您扩展视图、“探索”信息中心或 LookML 信息中心,以及优化视图或“探索”时,系统会应用本地化规则。

如果您已扩展或优化对象,然后添加新的标签或说明,则应在语言区域字符串文件中提供本地化定义。

例如,如果我们有一个 flights 视图:


view: flights {
  label: "flight_info"
  sql_table_name: flightstats.accidents ;;
  ...
}

然后,我们创建了扩展 flights 视图的新视图:

include: "/views/flights.view"

view: flights_enhanced {
  extends: [flights]
  label: "enhanced_flight_info"
}

在语言区域字符串文件中,我们需要定义两个视图标签字符串("flight_info""enhanced_flight_info")。如果项目的本地化级别设置为 strict,我们将无法在提交新的标签或说明之前提交任何更新。