首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用键而不是字符串作为对象键的i18n

i18n是国际化(Internationalization)的缩写,是指将软件应用程序设计成可以适应不同语言、地区和文化的过程。在软件开发中,i18n是一个重要的概念,它可以帮助开发者轻松地将应用程序本地化,以满足不同用户群体的需求。

使用键而不是字符串作为对象键的i18n是一种最佳实践,它可以提高代码的可维护性和可扩展性。通常情况下,开发者在应用程序中需要使用大量的字符串作为界面文本、错误消息、日志等。而使用键来代替字符串作为对象键,可以将这些字符串集中管理,方便进行国际化处理。

使用键而不是字符串作为对象键的i18n的优势包括:

  1. 可维护性:使用键来代替字符串,可以将所有的文本内容集中管理,方便进行修改、更新和维护。开发者可以根据需要随时添加、删除或修改键值对,而无需修改代码中的具体字符串。
  2. 可扩展性:使用键来代替字符串,可以轻松地支持新的语言、地区和文化。开发者只需要添加新的键值对,而无需修改现有的代码逻辑。
  3. 可重用性:使用键来代替字符串,可以将相同的文本内容在不同的地方进行重用,减少重复代码的编写。
  4. 可测试性:使用键来代替字符串,可以方便地进行软件测试。开发者可以针对不同的语言、地区和文化编写对应的测试用例,确保应用程序在不同环境下的正确性。
  5. 可协作性:使用键来代替字符串,可以方便地进行多人协作开发。开发者可以将文本内容的管理与代码的开发分离,不同的开发人员可以独立地进行工作,提高开发效率。

在实际应用中,可以使用一些开源的i18n框架或库来实现使用键而不是字符串作为对象键的i18n功能,例如:

  1. react-i18next(https://react.i18next.com/):适用于React应用程序的国际化框架,提供了丰富的功能和API,可以方便地实现键值对的管理和国际化处理。
  2. vue-i18n(https://kazupon.github.io/vue-i18n/):适用于Vue.js应用程序的国际化插件,提供了简单易用的API,可以实现键值对的管理和国际化处理。
  3. gettext(https://www.gnu.org/software/gettext/):一个广泛使用的国际化工具,支持多种编程语言,可以方便地进行键值对的管理和国际化处理。

总之,使用键而不是字符串作为对象键的i18n是一种良好的开发实践,可以提高软件应用程序的可维护性、可扩展性和可测试性。开发者可以根据具体需求选择适合的i18n框架或库来实现国际化功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

CA1831:在合适情况下,为字符串使用 AsSpan 不是基于范围索引器

规则说明 对字符串使用范围索引器并将其分配给范围类型时,将触发此规则。...Span 上范围索引器是非复制 Slice 操作,但对于字符串范围索引器,将使用方法 Substring 不是 Slice。 这会生成字符串所请求部分副本。...,请对字符串使用 AsSpan 不是基于 Range 索引器,以避免创建不必要数据副本。...若要使用它,请将光标置于数组冲突上,然后按 Ctrl+。 (句点)。 从显示选项列表中选择“对字符串使用 AsSpan 不是基于范围索引器”。...不是基于范围索引器来获取数组 ReadOnlySpan 或 ReadOnlyMemory 部分 CA1833:使用 AsSpan 或 AsMemory 不是基于范围索引器来获取数组 Span

1.1K00

在 .NET 对象和 JSON 互相序列化时候,枚举类型如何设置成字符串序列化,不是整型?

默认情况下,Newtonsoft.Json 库序列化和反序列化 JSON 到 .NET 类型时候,对于枚举值,使用是整数。...然而,在公开 JSON 格式 API 时,整数会让 API 不易于理解,也不利于扩展和兼容。 那么,如何能使用字符串来序列化和反序列化 JSON 对象枚举呢?...None, ABit, Normal, Very, Extreme, } } 对于“逗比程度”枚举,增加了转换器后,这个对象序列化和反序列化将成...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后作品务必以相同许可发布。

62140
  • C++核心准则T.5:结合使用泛型和面向对象技术应该增强它们效果不是成本

    天人菊 T.5: Combine generic and OO techniques to amplify their strengths, not their costs T.5:结合使用泛型和面向对象技术应该增强它们效果不是成本...泛型和面向对象技术是互补。...静态协助动态:使用静态多态技术实现动态多态接口。...动态帮助静态:提供通用,舒适静态边界接口,但是内部进行动态分发,这样就可以提供一致对象布局。示例代码引入了和std::shared_ptr删除器一样类型消除机制。...在类模板中,非虚函数只有在被使用时才会实例化-但是虚函数任何时候都会实例化。这会使代码膨胀,并且因为实例化根本不用功能而过度约束通用类型。要避免这个问题,即使标准库有时也会犯这样错误。

    58620

    Spring Boot 两行代码轻松实现国际化

    i18n 实现 在Java中,通过java.util.Locale类表示本地化对象,它通过语言类型和国家/地区等元素来确定创建一个本地化对象 。Locale对象表示具体地理,时区,语言,政治等。...Springboot 集成 i18n 在Springboot中,我们会使用到一个MessageSource接口,用于访问国际化信息,此接口定义了几个重载方法。...code即国际化资源属性名();args即传递给格式化字符串中占位符运行时参数值;local即本地化对象;resolvable封装了国际化资源属性名,参数,默认信息等。...Locale对象,即取请求头Accept-Language值来判断,我们也可以自定义请求头,来获取语言标识 Locale locale = LocaleContextHolder.getLocale...来获取本地对象Locale,它是取请求头Accept-Language语言值来判断生成相应Locale对象

    2.7K11

    JSON、AJAX、i18n

    每个由引号引起来,和值之间使用冒号进行分隔,多组键值对之间用逗号进行分隔。...一种是以字符串形式存在,我们叫他json字符串。 一般我们要操作json中数据时候,需要json对象格式。 一般我们要在客户端和服务器之间进行数据交换时候,使用json字符串。...JSON.stringify():把json对象转换为json字符串 JSON.parse():把json字符串转换为json对象 示例代码: // json对象字符串 var jsonObjString...(personJsonString); //fromJson把json字符串转换回Java对象 //第一个参数是json字符串 //第二个参数是转换回去...,而我们希望相同一个网站,不同人访问时候可以根据用户所在区域显示不同语言文字,网站布局样式等不发生改变。

    1.9K10

    Easy Vue 国际化 - Vue I18n 插件教程

    它提供了一个简单灵活 API,可将翻译集成到 Vue 组件中,这使得创建多语言应用程序几乎不费吹灰之力。有了 Vue I18n,您可以定义不同语言翻译信息,并根据用户地域轻松地在它们之间切换。...对象中定义了翻译后消息,其中代表本地语言(例如,en 代表英语,cn 代表中文)。...最后,我们使用 app.use(i18n) 将 i18n 实例安装到 Vue 应用程序上,并将该应用程序挂载到 ID 为 app DOM 元素上。..."message.greeting",并向 $t API 传递了一个带有 name 属性对象。...userName 值将动态插入翻译后信息中。 复数化 复数化是国际化一个常见要求, Vue 国际化为处理翻译中复数形式提供了内置支持。

    69730

    这 5 个 VSCode 扩展提高你开发效率

    反正我是记不住。 VSCode 为我们提供了一个小颜色框作为参考,但它还不够大,无法判断相似颜色之间差异。Color Highlight 通过用颜色包装每个十六进制代码为我们提供了更大预览。...3. i18n Ally 几个月前,我开始使用i18n,不得不说它使我网络应用本地化为多种语言变得异常容易。唯一困难是,无法在实际处理文件中编辑翻译。...i18n Ally为我们提供了基本语言文本内联预览,允许咱们创建新,查看现有,并直接从模板中编辑它们。 地址:https://marketplace.visualstu... ? ?...应该说很大程度上受到 Webstorm 启发。 ? 还有一个额外必要扩展! VS Code Icons 当前有超过四百万用户,你可能已经在使用此功能,这就是为什么它在此列表中具有很高优势。...如果你没有,现在就安装它,让你在长长文件和文件夹列表中找到你要找东西速度快十倍。它为每种文件类型添加独特图标使文件搜索变得直观简单。 ? 写在最后,希望这5个扩展能对你有所帮助。

    1.5K40

    Vue项目实战05:18n实现多语言自动切换-浏览器语言设置「建议收藏」

    什么是vue-i18n i18n是 Internationalization 这个英文简写,即国际化意思,vue-i18n是一款针对于vue开发国际化插件,让项目支持多语言切换,以适应不同地区用户需求...from '@/locale' Vue.use(i18n) new Vue({ router, i18n, // 挂载 render: h => h(App) })....$mount('#app') ---- ---- ---- 定义语言包 语言包已json格式书写,数据以键值对形式呈现,所以每个语言包都是对应,只是值不想同,为避免编码问题问题,我们统一用英文...,所以创建语言包时候我们先从英文开始,搞定之后直接复制再修改对应值就好了,最后记得export导出对象。...如果你觉得每次都要通过lang来获取数据比较麻烦,我们可以再优化下,把export const lang=改写成module.exports= 模式,这样就可以直接获取对象对象了。

    2.3K20

    这 5 个 VSCode 扩展提高你开发兴趣

    反正我是记不住。 VSCode 为我们提供了一个小颜色框作为参考,但它还不够大,无法判断相似颜色之间差异。Color Highlight 通过用颜色包装每个十六进制代码为我们提供了更大预览。...image.png 3. i18n Ally 几个月前,我开始使用i18n,不得不说它使我网络应用本地化为多种语言变得异常容易。唯一困难是,无法在实际处理文件中编辑翻译。...i18n Ally为我们提供了基本语言文本内联预览,允许咱们创建新,查看现有,并直接从模板中编辑它们。 地址:https://marketplace.visualstu......VS Code Icons 当前有超过四百万用户,你可能已经在使用此功能,这就是为什么它在此列表中具有很高优势。...如果你没有,现在就安装它,让你在长长文件和文件夹列表中找到你要找东西速度快十倍。它为每种文件类型添加独特图标使文件搜索变得直观简单。

    1K40

    Django 之视图篇

    API 属性 下面除非特别说明,属性都是只读 path: 一个字符串,表示请求页面的完整路径,不包含域名 method: 一个字符串,表示请求使用HTTP方法,常用值包括: 'GET', 'POST...' encoding: 一个字符串,表示提交数据编码方式 如果为None则表示使用浏览器默认设置,一般为utf-8 这个属性是可写,可以通过修改它来修改访问表单数据使用 GET: 一个类似于字典对象...cookie,和值都为字符串 session: 一个即可读又可写类似于字典对象,表示当前会话, 只有当Django启用会话支持时才可用 详细内容见"状态保持" 方法 is_ajax(): 如果请求是通过...与python字典不同,QueryDict类型对象用来处理同一个带有多个值情况 方法get(): 根据获取值 只能获取一个值 如果一个同时拥有多个值,获取最后一个值 方法getlist()...属性 QueryDict类型对象 包含post请求方式所有参数 与form表单中控件对应 表单中控件必须有name属性, name为, value为值 checkbbox存在一多值问题 是开发人员定下来

    1.1K87

    那些绕不过去 Redis 核心知识点

    Redis 使用跳跃表作为有序集合底层实现之一:如果一个有序集合包含元素数量比较多, 又或者有序集合中元素成员(member)是比较长字符串时, Redis 就会使用跳跃表来作为有序集合底层实现...通过 encoding 属性来设定对象使用编码, 不是为特定类型对象关联一种固定编码, 极大地提升了 Redis 灵活性和效率, 因为 Redis 可以根据不同使用场景来为一个对象设置不同编码...linkedlist 编码列表对象使用双端链表作为底层实现, 每个双端链表节点(node)都保存了一个字符串对象每个字符串对象都保存了一个列表元素。...当一个列表包含了数量比较多元素, 又或者列表中包含元素都是比较长字符串时, Redis 就会使用链表作为列表底层实现。...hashtable 编码集合对象使用字典作为底层实现, 字典每个都是一个字符串对象, 每个字符串对象包含了一个集合元素, 字典值则全部被设置为 NULL 。

    77230

    【Django | 开发】 (国际化项目&支持多语言)

    文件 2)HTML文件 2.2 生成本地化翻译资源文件 三、配置settings文件 四、让用户自己选择语言 1) 通过表单修改语言版本 2)通过对应链接修改 小结 一、国际化项目介绍 这个翻译不是浏览器翻译...二、实现步骤 2.1 为翻译字符串添加钩子 1) py文件 将需要翻译字符串统一使用gettext_lazy或gettext包裹 from django.utils.translation import...django-admin makemessages -l zh_Hans -l en 生成对应文件 我们需要在对应文件中,给这些需要翻译添加值 ( msgid (message id)是,...en 文件 ( 这里en 是之前所设置名字,需要与setting中语言配置元组中第一个数据一样,此时我们需要都将中文翻译成英文,注意!!不进行翻译会默认使用其他语言!...在切换语言from表单中,我们所提交表单路径set_language 是我们所导入i18n url 路径所提供,提交language.code能够对应到我们所设置语言就能切换语言。

    70410

    Python 项目实践二(下载数据)第四篇

    2 将字符串转换为数字值 population_data.json中每个和值都是字符串。...为消除这种错误,我们先将字符串转换为浮点数,再将浮点数转换为整数: population = int(float(pop_dict['Value'])) 函数float()将字符串转换为小数,函数int...Pygal使用国别码存储在模块i18n(internationalization缩写)中。字典COUNTRIES包含和值分别为两个字母国别码和国家名。...,不是Yemen)。当前,我们将忽略导致错误数据,看看根据成功恢复了数据制作出地图是什么样。 3 绘制世界地图 有了国别码后,制作世界地图易如反掌。...下面不将所有国家都作为一个编组,而是根据人口数量分成三组——少于1000万、介于1000万和10亿之间以及超过10亿

    2.6K90

    Redis使用及源码剖析-8.Redis对象-2021-1-21

    ziplist 编码哈希对象使用压缩列表作为底层实现, 每当有新键值对要加入到哈希对象时, 程序会先将保存了压缩列表节点推入到压缩列表表尾, 然后再将保存了值压缩列表节点推入到压缩列表表尾。...hashtable 编码哈希对象使用字典作为底层实现, 哈希对象每个键值对都使用一个字典键值对来保存:字典每个都是一个字符串对象对象中保存了键值对;字典每个值都是一个字符串对象对象中保存了键值对值...hashtable 编码集合对象使用字典作为底层实现, 字典每个都是一个字符串对象, 每个字符串对象包含了一个集合元素, 字典值则全部被设置为 NULL 。...ziplist 编码有序集合对象使用压缩列表作为底层实现, 每个集合元素使用两个紧挨在一起压缩列表节点来保存, 第一个节点保存元素成员(member), 第二个元素则保存元素分值(score)...Redis 会在初始化服务器时, 创建一万个字符串对象, 这些对象包含了从 0 到 9999 所有整数值, 当服务器需要用到值为 0 到 9999 字符串对象时, 服务器就会使用这些共享对象不是新创建对象

    55340

    Redis数据结构——对象

    对于redis数据库保存键值对来说,总是一个字符串对象值则可以是字符串对象、列表对象、哈希对象、集合对象或者有序集合对象其中一种。...所以我们执行type命令时,命令返回结果为数据库对应对象类型,不是对象类型。...另一方面,linkedlist编码列表对象使用双端链表作为底层实现,每个双端链表节点都保存了一个字符串对象每个字符串对象都保存了一个列表元素,如下图 编码转换 当列表对象可以同时满足以下两个条件时...另一方面,hashtable编码集合对象使用字典作为底层实现,字典每个都是一个字符串对象,每个字符串对象包含了一个集合元素,字典值则全部被设置为null。...ziplist编码压缩列表对象使用压缩列表作为底层实现,每个集合元素使用两个金爱在一起压缩列表节点保存,第一个节点保存元素成员,第二个元素则保存元素分值。

    48310

    SQL函数 JSON_OBJECT

    [NULL ON NULL | ABSENT ON NULL]) 参数 key:value - :值对或逗号分隔:值对列表。是由单引号分隔用户指定文字字符串。...JSON_OBJECT可以在SELECT语句中与其他类型SELECT-Items结合使用。可以在可以使用SQL函数其他位置指定JSON_OBJECT,例如在WHERE子句中。...Json_object以显示或ODBC模式返回和值值(如果这是查询选择模式)。 JSON_OBJECT不支持将星号(*)语法作为指定表中所有字段方式。...将格式转换函数应用于JSON_OBJECT没有任何效果,因为JSON对象:值对是字符串。 默认排序规则确定返回JSON对象排序规则。...%SQLUPPER在JSON对象之前插入一个空格,不是对象值之前。 在JSON_OBJECT中,可以将排序函数应用于:值对值部分。

    2.9K20

    【云+社区年度征文】再看JavaScript,那些遗漏或易混淆知识点(2)

    不是“真正”数组,因为这样抽象度更高。... Map WeakMap and WeakSet(弱映射和弱集合) Map使用对象作为,不会被垃圾回收机制回收 let john = { name: "John" }; let map = new...let weakMap = new WeakMap(); let obj = {}; weakMap.set(obj, "ok"); // 正常工作(以对象作为) // 不能使用字符串作为 weakMap.set...("test", "Whoops"); // Error,因为 "test" 不是一个对象 现在,如果我们在 weakMap 中使用一个对象作为,并且没有其他对这个对象引用 —— 该对象将会被从内存...getMonth() 获取月份是 从 0 到 11 获取年份使用 getFullYear() 不是 getYear() 。这才是官方

    79300
    领券