列表本地化

2024-05-01

本地化字符串列表的正确方法是什么?我知道分隔符可以本地化为逗号或分号,但是连词是否本地化?如果是这样,任意长度列表的格式字符串会是什么样子?

Example

“蝙蝠、猫和狗”。我可以根据区域设置使用分隔符并构建列表,如下所示:

LIST := UNIT
LISTMID := UNIT SEPARATOR UNIT
LISTMID := LISTMID SEPARATOR UNIT
LIST := UNIT CONJUNCTION UNIT
LIST := LISTMID CONJUNCTION UNIT

我必须为每种语言制定这个规则吗?有什么图书馆可以帮助解决这个问题吗?


我来这里寻找同一问题的答案,最后进行了更多谷歌搜索,结果发现:http://icu-project.org/apiref/icu4j/com/ibm/icu/text/ListFormatter.html http://icu-project.org/apiref/icu4j/com/ibm/icu/text/ListFormatter.html

该类接受参数two, start, middle, and end:

  • two - 两个项目的字符串,第一个项目包含 {0},第二个项目包含 {1}。
  • start - 列表项开头的字符串,其中第一个项包含 {0},其余项包含 {1}。
  • middle - 列表项开头的字符串,其中包含 {0} 表示列表的第一部分,{1} 表示列表的其余部分。
  • end - 列表项末尾的字符串,其中包含 {0} 表示列表的第一部分,{1} 表示最后一项。

所以,对于英语来说,那就是:

 - TWO := "{0} and {1}"
 - START := "{0}, {1}"
 - MIDDLE := "{0}, {1}" 
 - END := "{0} and {1}"

我写了一个快速的 Lua 演示来展示我想象的它是如何工作的:

function list_format(words, templates)
    local length = #words
    if length == 1 then return words[1] end
    if length == 2 then 
        return replace(replace(templates['two'], '{0}', words[1]), 
            '{1}', words[2])
    end

    local result = replace(templates['end'], '{1}', words[length])
    while length > 3 do
        length = length - 1
        local mid = replace(templates['middle'], '{1}', words[length])
        result = replace(result, '{0}', mid)
    end
    result = replace(result, '{0}', words[2])
    result = replace(templates['start'], '{1}', result)
    result = replace(result, '{0}', words[1])
    return result
end

function replace(template, index, text)
    str, _ = string.gsub(template, index, text)
    return str
end

local english = {
    ["two"] = "{0} and {1}",
    ["start"] = "{0}, {1}",
    ["middle"] = "{0}, {1}",
    ["end"] = "{0} and {1}"
}

print(list_format({"banana"}, english))
print(list_format({"banana", "apple"}, english))
print(list_format({"banana", "apple", "mango"}, english))
print(list_format({"banana", "apple", "mango", "pineapple"}, english))

将其适用于其他语言应该是微不足道的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

列表本地化 的相关文章

  • Xcode 6 本地化无法读取字符串文件

    Xcode 无法生成 xliff 本地化文件并出现错误本地化无法读取字符串文件 请检查系统日志以获取更多详细信息 有谁知道我在哪里可以找到这些日志 它是 Xcode 6 3 2 GM 但我也尝试过 6 3 1 版本 同 6 3 1 错误发生
  • 在项目中管理多种语言的良好解决方案

    我们需要为我们的应用程序管理大量 大约 20 多种 语言 对于之前需要较少语言 3 4 的项目 我们使用了一个简单的 Excel 电子表格 并将其发送给各个翻译人员 由他们填写字符串的翻译 面对如此多的语言以及需要多名翻译人员的参与 是否有
  • 自定义错误消息在 ASP.NET MVC 4 中未翻译

    我想翻译验证消息 字段日期必须是日期 我已将以下键添加到 Global asax 的 Application Start 中 ClientDataTypeModelValidatorProvider ResourceClassKey Mod
  • Struts 2 如何从自定义验证器中获取 i18n 消息

    如何从自定义验证器中的 key 获取消息 正如中提到的Struts 2 重用自定义表达式验证器 https stackoverflow com questions 28038827 struts 2 reusing custom expre
  • 使用 Python/PyGObject 在 Windows 中加载 GTK-Glade 翻译

    我有一个 Python 脚本 可以加载可翻译的 Glade GUI 在 Linux 下一切工作正常 但我在理解 Windows 上的必要步骤时遇到了很多困难 Linux 下似乎需要的只是 import locale locale setlo
  • 如何提供其他语言的javadoc? [复制]

    这个问题在这里已经有答案了 我们经常与西班牙 智利 印度等其他国家开发和维护的服务集成 我一直看到来自西班牙和智利的服务 API 调用都是西班牙语 但我们希望我们的代码是英语 Javadoc 是英语和西班牙语 我正在寻找实现这一目标的最佳方
  • formatTime 以“h”而不是“:”作为分隔符

    葡萄牙时间使用以下 24 小时格式 18h30 我试过了 timeFormat H h mm timeFormat H h mm timeFormat H h mm 是否可以 谢谢 您需要使用单引号inside用于插入字母的 JavaScr
  • 尝试从 Django 模板更改语言时出现问题

    我需要包含两个按钮或链接以允许用户在英语和西班牙语之间更改语言 我读了the docs https docs djangoproject com en 1 5 topics i18n translation the set language
  • 当应用程序名称在 InfoPlist.strings 中本地化时,不同的应用程序名称取决于配置

    我们为每个配置使用具有不同 plist 的设置 像这样 目标 Info Dev plist 目标 Info Beta plist 这样我们的配置就可以拥有自己的 CFBundleDisplayName 并且我们可以通过设备上的应用程序名称来
  • 在 Swing 中使用印度语输入法输入文本时不显示英文字符

    我正在开发一个应用程序 它接受英语文本并使用自定义的第 3 方 API 将音译为印度语 受支持的几种语言之一 该应用程序针对 Windows XP 7 和 Ubuntu 我们使用自定义输入法来加载所需的印度语字体 并使用它渲染文本 此外 用
  • PHP:检查任何基于拉丁语的语言中的字母字符?

    使用 PHP 我想检查一个字符串仅包含字母字符 我不想允许任何数字或特殊字符 例如 ctype alpha 对于这个目的来说似乎很棒 问题是我想允许重音字母 例如法语等 例如 我想允许 L rien 我知道ctype alpha 可以与se
  • 如何通过覆盖 MSBuild 目标来防止外语资源生成?

    我正在致力于减少大型 C ASP NET 解决方案的编译时间 我们的解决方案使用通常的 resx 文件方法翻译成大约十几种外语 这些资源文件的解析和编译极大地减慢了我们的编译时间 并且是日常的挫败感 我知道可以创建自定义资源提供程序并摆脱
  • 有没有办法获取 PHP 中可用区域设置的列表?

    在Java中 你可以调用Locale getAvailableLocales 获取可用区域设置的列表 我期待 PHP 的同等功能Locale http php net manual en class locale php类 但找不到 有没有
  • 本地化水晶报表

    在 Crystal Reports 上本地化标签 列标题 字段标签 页眉 页脚等 的好方法是什么 我们目前使用的是 XI R2 SP4 但希望迁移到 2008 年 看起来 2008 年提供了更好的查看器 UI 本地化 它有内容本地化的故事吗
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio
  • 在 *ngFor 循环内使用 Angular i18n 和 Angular 5

    我想在模板中的 ngFor Loop 内使用动态翻译 如下所示
  • 在 Grails 中创建一个新的资源包?

    我想创建另一个资源包来组织我的 Grails 应用程序 Grails 提供了一个 messages 资源包 我需要创建一个 myApp 资源包 如何创建新的资源包并使用 g message GSP 标记读取其属性 你必须创建一个beangr
  • 自动 Photoshop 从文件插入文本

    我有一个多语言网站 需要自动执行从 csv 源更新 psd 文件中文本图层的过程 我知道由于宽度的变化 psp 中可能会出现故障 但无论如何 将文本放在文档中会有很大帮助 我有什么选择 EDIT Murmelschlurmel 有一个可行的
  • 让 NUMBERFMT 填充默认值的简单方法?

    我正在使用 Windows API获取数字格式Ex http msdn microsoft com en us library dd318113 28v vs 85 29 aspx使用当前用户的适当本地化选项来格式化一些数字以进行显示 例如
  • java本地时间格式不带年份

    我喜欢将本地时间格式格式化为不带年份的字符串 目前我可以显示包含年份的本地格式 java text DateFormat df java text DateFormat getDateInstance java text DateForma

随机推荐