前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >网络本地化的痛点和解决方案

网络本地化的痛点和解决方案

原创
作者头像
zayyo
发布2023-12-18 23:09:56
1240
发布2023-12-18 23:09:56
举报
文章被收录于专栏:zayyo前端zayyo前端

这是关于多语言支持的问题以及一些解决方案和痛点:

常见解决方案

处理多语言通常采用键值对的方式,所谓的 "loca keys" 是文本的标识符,"value" 则是本地化的文本。

定义键和值

首先,你需要在某处定义键和值,比如在一个 JSON 文件中:

代码语言:json
复制
{
  "welcome": "Welcome to my website!",
  "hello": "Hello, {{name}}!"
}

上面可能是你的 en.json 文件,同一文件夹下可能有一个 it.json,其中的键相同但值不同:

代码语言:json
复制
{
  "welcome": "Benvenuto nel mio sito!",
  "hello": "Ciao, {{name}}!"
}

你甚至可以更进一步,为每种语言创建不同的文件夹,然后有多个 JSON 文件,这样你可以将键拆分到不同的文件中,更好地组织。但确保文件中没有缺失的键!

使用键

有了键和值后,你可以在代码中使用它们。使用 react-i18next,你可以使用 useTranslation 钩子获取 t 函数来进行翻译。

代码语言:javascript
复制
import { useTranslation } from 'react-i18next';

const MyComponent = () => {
  const { t } = useTranslation();

  return (
    <div>
      {t('welcome')}
      {t('hello', { name: 'Leonardo' })}
    </div>
  );
};

t 函数将返回给定键的值,如果将对象作为第二个参数传递,它将用传递的值替换占位符。

痛点

处理多语言的方式是最快速、最简单的,但它也存在一些缺点。

以下是我个人经历的一些痛点以及我尝试解决它们的方法。

难以找到准确的词汇

在小团队中,这还是可以管理的,通常是前端开发人员处理翻译,当有变化时更新键和值也不是什么大问题。

但在大型项目中或者有专门负责翻译的人员时情况可能不同,特别是当谈论的不是开发人员或者一般无法阅读代码的人。

你可以发送 JSON 文件并要求进行翻译,但另一个人可能会缺乏上下文,不容易理解文本的使用场景。

如果能够直接在网站上编辑翻译,而无需处理代码,这该有多好呢?

你是否见过这个?这是一个很酷的功能,允许你直接在浏览器中编辑页面的内容,而无需打开代码编辑器。

但是,显然这只是在你的浏览器中进行的。

有些工具可以帮助你在本地化的文本上做类似的事情,比如我最近发现的 Tolgee(而且还是开源的,额外加分!)

如果你使用它来处理本地化,它提供了一个功能,通过按住 Alt 键并单击要编辑的文本,可以直接在网站上编辑翻译文本。它会打开一个模态框,你可以编辑文本并保存。

我真希望我早点知道这个!

存储翻译

将所有翻译存储在 JSON 文件中易于管理,但如果你希望对翻译有更好的概览呢?

我的方法是确保 JSON 文件的结构始终相同,这样我就可以通过查看行号轻松找到缺失的键,但这听起来并不是一个十全十美的解决方案!

前端还是后端?

你可能会发现有一些文本在前端翻译,有一些在后端翻译。

这在你是唯一负责项目的情况下是可以工作的,但如果有一个团队,你可能希望有一个地方来统一管理所有翻译。

几种可能的方法:

A)全部在前端:静态文本在你的代码中,每次后端显示文本时,可以传递一个键,这样前端将负责翻译。

B)全部在后端:前端有键但不知道如何翻译。匹配键和值的定义文件都存储在后端,需要时发送给前端,可以在应用程序启动时或按需发送。

C)全部在外部服务:类似于前一种方法,但不是在你自己的后端应用中处理翻译,而是使用外部服务来处理所有事务。优势在于可以遵循专门设计的翻译工作流程。

每种方法都有适用的场景,具体要根据项目需求和团队情况来决定最合适的方式。

我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 常见解决方案
  • 定义键和值
  • 使用键
  • 痛点
  • 难以找到准确的词汇
  • 存储翻译
  • 前端还是后端?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档