AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁(yè) > 科技  > 軟件

多語(yǔ)言設(shè)計(jì),你學(xué)會(huì)了嗎?

來(lái)源: 責(zé)編: 時(shí)間:2024-05-09 17:59:35 190觀看
導(dǎo)讀多語(yǔ)言設(shè)計(jì)是國(guó)際化系統(tǒng)設(shè)計(jì)的第一步,也是最基本的內(nèi)容。很多時(shí)候,我們會(huì)認(rèn)為多語(yǔ)言設(shè)計(jì)非常簡(jiǎn)單。對(duì)于靜態(tài)資源來(lái)說(shuō)確實(shí)如此,通過(guò)加載一個(gè)語(yǔ)言包即可,但是對(duì)于一些動(dòng)態(tài)內(nèi)容而言卻不太一樣。這些動(dòng)態(tài)內(nèi)容可能是消息通知、

多語(yǔ)言設(shè)計(jì)是國(guó)際化系統(tǒng)設(shè)計(jì)的第一步,也是最基本的內(nèi)容。很多時(shí)候,我們會(huì)認(rèn)為多語(yǔ)言設(shè)計(jì)非常簡(jiǎn)單。對(duì)于靜態(tài)資源來(lái)說(shuō)確實(shí)如此,通過(guò)加載一個(gè)語(yǔ)言包即可,但是對(duì)于一些動(dòng)態(tài)內(nèi)容而言卻不太一樣。nVX28資訊網(wǎng)——每日最新資訊28at.com

這些動(dòng)態(tài)內(nèi)容可能是消息通知、服務(wù)器生成的導(dǎo)出內(nèi)容等。這里我整理了一個(gè)完整的清單,用來(lái)指導(dǎo)多語(yǔ)言的方案設(shè)計(jì):nVX28資訊網(wǎng)——每日最新資訊28at.com

  • 前端文案。例如菜單、表單提示信息等。
  • 錯(cuò)誤信息。表單驗(yàn)證或者服務(wù)器報(bào)錯(cuò)信息的提示。
  • 導(dǎo)出文件。導(dǎo)出 Excel 或者 PDF 文件,往往為后端生成。
  • 郵件和消息通知。為用戶發(fā)送通知時(shí),也需要使用對(duì)應(yīng)語(yǔ)言的模板文件。
  • 主數(shù)據(jù)。例如在電商系統(tǒng)中,管理員需要為支持的語(yǔ)言都添加一份商品數(shù)據(jù)、商品分類等。
  • 業(yè)務(wù)增量數(shù)據(jù)。在業(yè)務(wù)增量數(shù)據(jù)中,為了搜索和存檔的目的,有時(shí)候需要將一些主數(shù)據(jù)持久化下來(lái)用于搜索或者查看,例如訂單中,需要持久化對(duì)應(yīng)的商品數(shù)據(jù)。

下面我們逐個(gè)討論。nVX28資訊網(wǎng)——每日最新資訊28at.com

多語(yǔ)言的基本概念

在開(kāi)始進(jìn)入詳細(xì)的內(nèi)容之前,先了解幾個(gè)基本的概念。nVX28資訊網(wǎng)——每日最新資訊28at.com

語(yǔ)言編碼

在國(guó)際標(biāo)準(zhǔn)化組織 ISO 的 639-1 標(biāo)準(zhǔn)中,每個(gè)語(yǔ)言都被分配了一個(gè)特定的編碼。例如中文的編碼為“zh”,英文的編碼為“en”。除了基本的語(yǔ)言標(biāo)準(zhǔn)外,不同地區(qū)使用的語(yǔ)言還需要細(xì)分,因此拓展了使用地區(qū)的編碼,最終的編碼由兩部分組成,由中橫線連接。nVX28資訊網(wǎng)——每日最新資訊28at.com

如果需要表達(dá)中國(guó)大陸使用的語(yǔ)言,可以使用 “zh-cn”編碼,如果需要表達(dá)中國(guó)臺(tái)灣的語(yǔ)言,可以使用 “zh-tw”。通常來(lái)說(shuō),中國(guó)大陸和新加坡使用簡(jiǎn)體中文,中國(guó)香港、中國(guó)臺(tái)灣使用繁體中文。nVX28資訊網(wǎng)——每日最新資訊28at.com

對(duì)于英文來(lái)說(shuō),英國(guó)、美國(guó)等地區(qū)的英文使用習(xí)慣不同,在必要時(shí)也可以提供不同的語(yǔ)言包。nVX28資訊網(wǎng)——每日最新資訊28at.com

本位語(yǔ)言

在多幣種設(shè)計(jì)中會(huì)介紹一個(gè)本位貨幣的概念,在多語(yǔ)言中也會(huì)有一個(gè)本位語(yǔ)言的概念。nVX28資訊網(wǎng)——每日最新資訊28at.com

本位語(yǔ)言是指在系統(tǒng)設(shè)計(jì)中的通用語(yǔ)言,通常都會(huì)使用英語(yǔ)作為本位語(yǔ)言。本位語(yǔ)言作為其它語(yǔ)言包缺失的情況下的默認(rèn)語(yǔ)言,也可以作為其它語(yǔ)言包的 key。nVX28資訊網(wǎng)——每日最新資訊28at.com

在動(dòng)態(tài)數(shù)據(jù)處理中,默認(rèn)情況下使用本位語(yǔ)言,在需要翻譯的場(chǎng)景使用翻譯拓展表。這樣就避免了到處使用 name_en,name_zh 等和語(yǔ)言相關(guān)的字段。nVX28資訊網(wǎng)——每日最新資訊28at.com

I18N 框架

I18N是“Internationalization(國(guó)際化)”的縮寫,其中數(shù)字18代表首字母I和末字母N之間的字母數(shù)。多語(yǔ)言是國(guó)際化中最重要的一部分之一,在很多時(shí)候,I18N 框架往往就被當(dāng)做多語(yǔ)言框架。nVX28資訊網(wǎng)——每日最新資訊28at.com

I18N 能力在主流的編程框架中都有提供。在 JavaScript 項(xiàng)目中,i18next 框架提供了一整套 I18N 特性,包括多語(yǔ)言翻譯、數(shù)據(jù)格式化等內(nèi)容,對(duì)于 Node.js 項(xiàng)目 i18next 也可以在服務(wù)端發(fā)生作用。nVX28資訊網(wǎng)——每日最新資訊28at.com

而對(duì)于服務(wù)器端由于前后端分離的發(fā)展,相對(duì)來(lái)說(shuō)就弱的多。Spring Boot 提供了一個(gè) MessageSource 功能,配合 Java 的 Locale 對(duì)象,可以實(shí)現(xiàn)翻譯用戶消息的能力。nVX28資訊網(wǎng)——每日最新資訊28at.com

識(shí)別和傳遞用戶語(yǔ)言標(biāo)識(shí)

通常來(lái)說(shuō),多語(yǔ)言的系統(tǒng)會(huì)根據(jù)優(yōu)先級(jí)識(shí)別語(yǔ)言:nVX28資訊網(wǎng)——每日最新資訊28at.com

  • 用戶賬戶的用戶設(shè)置。
  • 用戶登錄后會(huì)話中的語(yǔ)言信息。
  • 用戶瀏覽器或者 App 的語(yǔ)言設(shè)置。
  • 操作系統(tǒng)語(yǔ)言設(shè)置。

當(dāng)用戶安裝瀏覽器時(shí),瀏覽器安裝程序通常會(huì)自動(dòng)選擇與操作系統(tǒng)相同的語(yǔ)言作為默認(rèn)語(yǔ)言。我們可以通過(guò) JavaScript 的 navigator.language 屬性拿到當(dāng)前用戶的語(yǔ)言。如果是應(yīng)用系統(tǒng)本身的語(yǔ)言,可以在登錄后調(diào)用 API 獲取用戶的語(yǔ)言設(shè)置。nVX28資訊網(wǎng)——每日最新資訊28at.com

識(shí)別到語(yǔ)言信息后,需要在前后端傳遞語(yǔ)言信息,通常的做法有:nVX28資訊網(wǎng)——每日最新資訊28at.com

  • 使用 Header 傳遞,通過(guò)寫入 HTTP Header 的 Accept-Language 字段。
  • 使用 Query 傳遞,在 URL 參數(shù)上增加語(yǔ)言標(biāo)識(shí)。

在實(shí)踐中,可以將識(shí)別到的用戶語(yǔ)言信息放到瀏覽器 localStorage 或者 App 的本地配置中,然后通過(guò) Header 或者 Query 傳遞。另外也可以將語(yǔ)言信息放入用戶 Session 或 Token 中,不過(guò)用戶在修改語(yǔ)言配置后需要刷新 Session 或者重新頒發(fā) Token。nVX28資訊網(wǎng)——每日最新資訊28at.com

除此之外,還有一些不常用的語(yǔ)言標(biāo)識(shí)設(shè)置方式:nVX28資訊網(wǎng)——每日最新資訊28at.com

  • cookie
  • sessionStorage/localStorage
  • navigator (這個(gè)對(duì)象也可以寫入)
  • htmlTag,例如 <html lang=“LANGUAGE” .>
  • URL path
  • 子域名

為了識(shí)別復(fù)雜的語(yǔ)言標(biāo)識(shí)場(chǎng)景,i18next 還提供了一個(gè) i18next-browser-languageDetector 工具,快速識(shí)別當(dāng)前用戶的語(yǔ)言標(biāo)識(shí)。nVX28資訊網(wǎng)——每日最新資訊28at.com

前端的多語(yǔ)言

在前端開(kāi)啟多語(yǔ)言有一個(gè)經(jīng)驗(yàn)需要留意。我們需要為每個(gè)語(yǔ)言定義一個(gè)語(yǔ)言包,語(yǔ)言包往往由 key value 構(gòu)成,在一些項(xiàng)目中,有些開(kāi)發(fā)者會(huì)使用一個(gè)簡(jiǎn)短的英文字符串作為 key,并給英文也設(shè)置了一個(gè)語(yǔ)言包。這種實(shí)踐會(huì)造成兩個(gè)壞處,首先是需要額外定義一個(gè)英文語(yǔ)言包,另外當(dāng)需要排錯(cuò)時(shí),搜索關(guān)鍵詞會(huì)變得有一點(diǎn)麻煩。所以,通常來(lái)說(shuō),我們會(huì)直接使用英語(yǔ)作為語(yǔ)言包的 key,這樣可以減少很多工作量。nVX28資訊網(wǎng)——每日最新資訊28at.com

這里以 react-i18next 開(kāi)啟 React 項(xiàng)目中的多語(yǔ)言設(shè)置。nVX28資訊網(wǎng)——每日最新資訊28at.com

導(dǎo)入 react-i18next i18next 兩個(gè)庫(kù)。nVX28資訊網(wǎng)——每日最新資訊28at.com

npm install react-i18next i18next –save

編寫下面初始化代碼,并確保被 React 入口文件導(dǎo)入。nVX28資訊網(wǎng)——每日最新資訊28at.com

import i18n from "i18next";import { initReactI18next } from "react-i18next";const resources = {  zh: {    translation: {      "Welcome to React": "歡迎使用 React"    }  }};i18n  .use(initReactI18next)  .init({    resources,    lng: "zh"  });export default i18n;

在組件中使用翻譯:nVX28資訊網(wǎng)——每日最新資訊28at.com

import React from 'react';import { useTranslation } from 'react-i18next';function MyComponent () {  const { t, i18n } = useTranslation();  return <h1>{t('Welcome to React')}</h1>}

react-i18next 還提供了其它形式的翻譯方式,例如組件之類的,總之來(lái)說(shuō)使用 t 函數(shù)翻譯文本是最簡(jiǎn)單的一種形式,也便于搜索和排錯(cuò)。nVX28資訊網(wǎng)——每日最新資訊28at.com

后端服務(wù)的多語(yǔ)言

除了前端的多語(yǔ)言外,后端避免不了需要使用語(yǔ)言標(biāo)識(shí)和翻譯能力, 不過(guò)應(yīng)該盡量避免在后端服務(wù)使用 I18N 相關(guān)特性。例如,對(duì)于錯(cuò)誤信息來(lái)說(shuō),盡量通過(guò)錯(cuò)誤碼將錯(cuò)誤信息放到前端,而不是由后端加工。nVX28資訊網(wǎng)——每日最新資訊28at.com

對(duì)于導(dǎo)出、上下游系統(tǒng)等場(chǎng)景后端,后端服務(wù)的多語(yǔ)言無(wú)法避免,這里以 Spring Boot 為例,演示基本的 I18N 實(shí)現(xiàn)。nVX28資訊網(wǎng)——每日最新資訊28at.com

在 Spring Boot 項(xiàng)目中可以添加下面配置。nVX28資訊網(wǎng)——每日最新資訊28at.com

@Configurationpublic class InternationalizationConfig {    @Bean    public MessageSource messageSource() {        // 定義多語(yǔ)言資源位置        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();        // 設(shè)置資源目錄        messageSource.setBasename("messages");        messageSource.setDefaultEncoding("UTF-8");        return messageSource;    }    @Bean    public LocaleResolver localeResolver() {        // 設(shè)置應(yīng)用如何讀取語(yǔ)言標(biāo)識(shí),這里使用了 HTTP 頭信息識(shí)別語(yǔ)言標(biāo)識(shí)        AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();        localeResolver.setDefaultLocale(Locale.ENGLISH);        return localeResolver;    }}

創(chuàng)建在 resources 目錄下默認(rèn)語(yǔ)言包: messages.propertiesnVX28資訊網(wǎng)——每日最新資訊28at.com

greeting=Hello

創(chuàng)建一個(gè)中文語(yǔ)言包(記得修改 IDE 的文件編碼格式,包括 properties 文件的編碼):nVX28資訊網(wǎng)——每日最新資訊28at.com

greeting=你好

這樣就可以在后端拿到 Locale 對(duì)象并進(jìn)行翻譯了:nVX28資訊網(wǎng)——每日最新資訊28at.com

@GetMapping("/greeting")public String getGreeting(Locale locale) {    return messageSource.getMessage("greeting", null, locale);}

通過(guò)傳入合適的語(yǔ)言標(biāo)識(shí)就能獲得相應(yīng)的翻譯信息了。nVX28資訊網(wǎng)——每日最新資訊28at.com

curl -H "Accept-Language: zh" http://localhost:8080/greeting

拿到合適的 Locale 對(duì)象,在后端處理錯(cuò)誤提示、通知、郵件、導(dǎo)出都可以完成。為 HTTP Client 編寫一個(gè) Interceptor 自動(dòng)附加 Header 信息,可以把當(dāng)前請(qǐng)求的語(yǔ)言標(biāo)識(shí)傳遞到下游服務(wù)中,解決上下文傳遞的問(wèn)題。nVX28資訊網(wǎng)——每日最新資訊28at.com

動(dòng)態(tài)數(shù)據(jù)的多語(yǔ)言設(shè)計(jì)

動(dòng)態(tài)的數(shù)據(jù)也需要翻譯,這里分兩種情況:nVX28資訊網(wǎng)——每日最新資訊28at.com

  • 主數(shù)據(jù)或者基本數(shù)據(jù),例如商品、品牌、品類等。
  • 業(yè)務(wù)增量數(shù)據(jù),或者快照數(shù)據(jù),例如訂單、預(yù)約、工單等。

這兩類數(shù)據(jù)在國(guó)際化的項(xiàng)目中需要分開(kāi)處理。nVX28資訊網(wǎng)——每日最新資訊28at.com

對(duì)于主數(shù)據(jù)來(lái)說(shuō),需要在不同的語(yǔ)言區(qū)域保持一致,因此需要為每條數(shù)據(jù)創(chuàng)建翻譯拓展表,以冗余表的方式處理。例如,對(duì)于 brand 表中有 name 字段,brand 表本身使用前面介紹的本位語(yǔ),name 字段使用英語(yǔ)。然后拓展一張 brand_locale 表,表中放置需要翻譯的字段,并增加一個(gè) lang 字段。nVX28資訊網(wǎng)——每日最新資訊28at.com

對(duì)于業(yè)務(wù)增量數(shù)據(jù)來(lái)說(shuō),如果按照主數(shù)據(jù)的處理方式,會(huì)導(dǎo)致數(shù)據(jù)量非常大,通常來(lái)說(shuō)我們通過(guò)冗余字段,或不冗余的方式處理。例如,訂單表中產(chǎn)品名稱可以增加一個(gè)字段,其中一個(gè)字段存儲(chǔ)用戶下單時(shí)所用的語(yǔ)言(本地語(yǔ)言),另外一個(gè)字段存儲(chǔ)本位語(yǔ)言。這樣的好處是滿足本地用戶查詢、總部人員管理相關(guān)數(shù)據(jù),并提供足夠好的搜索性能。nVX28資訊網(wǎng)——每日最新資訊28at.com

參考資料

  • 多語(yǔ)言系統(tǒng)搭建 https://zhuanlan.zhihu.com/p/548263662
  • 多語(yǔ)言系統(tǒng)的數(shù)據(jù)庫(kù)設(shè)計(jì) https://developer.aliyun.com/article/39819
  • 網(wǎng)址多語(yǔ)言設(shè)計(jì) https://learnku.com/articles/58725
  • https://howtodoinjava.com/spring-boot/rest-i18n-example/
  • https://react.i18next.com/
  • https://github.com/i18next/i18next-browser-languageDetector

本文鏈接:http://www.tebozhan.com/showinfo-26-87683-0.html多語(yǔ)言設(shè)計(jì),你學(xué)會(huì)了嗎?

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: Next.js 14:全棧開(kāi)發(fā)的新寵?

下一篇: AI 體驗(yàn)一應(yīng)俱全 三星 Galaxy S24 詮釋 AI 時(shí)代輕薄旗艦

標(biāo)簽:
  • 熱門焦點(diǎn)
  • Raft算法:保障分布式系統(tǒng)共識(shí)的穩(wěn)健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可復(fù)制、可冗余、可容錯(cuò)”)的首字母縮寫。Raft算法是一種用于在分布式系統(tǒng)
  • 三言兩語(yǔ)說(shuō)透設(shè)計(jì)模式的藝術(shù)-簡(jiǎn)單工廠模式

    一、寫在前面工廠模式是最常見(jiàn)的一種創(chuàng)建型設(shè)計(jì)模式,通常說(shuō)的工廠模式指的是工廠方法模式,是使用頻率最高的工廠模式。簡(jiǎn)單工廠模式又稱為靜態(tài)工廠方法模式,不屬于GoF 23種設(shè)計(jì)
  • 梁柱接棒兩年,騰訊音樂(lè)闖出新路子

    文丨田靜 出品丨牛刀財(cái)經(jīng)(niudaocaijing)7月5日,企鵝FM發(fā)布官方公告稱由于業(yè)務(wù)調(diào)整,將于9月6日正式停止運(yùn)營(yíng),這意味著騰訊音樂(lè)長(zhǎng)音頻業(yè)務(wù)走向消亡。騰訊在長(zhǎng)音頻領(lǐng)域還在摸索。為
  • 騰訊VS網(wǎng)易,最卷游戲暑期檔,誰(shuí)能笑到最后?

    作者:無(wú)銹缽來(lái)源:財(cái)經(jīng)無(wú)忌7月16日晚,上海1862時(shí)尚藝術(shù)中心。伴隨著幻象的精準(zhǔn)命中,碩大的熒幕之上,比分被定格在了14:12,被寄予厚望的EDG戰(zhàn)隊(duì)以絕對(duì)的優(yōu)勢(shì)戰(zhàn)勝了BLG戰(zhàn)隊(duì),拿下了總決
  • 消費(fèi)結(jié)構(gòu)調(diào)整丨巨頭低價(jià)博弈,拼多多還卷得動(dòng)嗎?

    來(lái)源:征探財(cái)經(jīng)作者:陳香羽隨著流量紅利的退潮,電商的存量博弈越來(lái)越明顯。曾經(jīng)主攻中高端與品質(zhì)的淘寶天貓、京東重拾&ldquo;低價(jià)&rdquo;口號(hào)。而過(guò)去與他們錯(cuò)位競(jìng)爭(zhēng)的拼多多,靠
  • 阿里大調(diào)整

    來(lái)源:產(chǎn)品劉有媒體報(bào)道稱,近期淘寶天貓集團(tuán)啟動(dòng)了近年來(lái)最大的人力制度改革,涉及員工績(jī)效、層級(jí)體系等多個(gè)核心事項(xiàng),目前已形成一個(gè)初步的&ldquo;征求意見(jiàn)版&rdquo;:1、取消P序列
  • 2299元起!iQOO Pad明晚首銷:性能最強(qiáng)天璣平板

    5月23日,iQOO如期舉行了新品發(fā)布會(huì),除了首發(fā)安卓最強(qiáng)旗艦處理器的iQOO Neo8系列新機(jī)外,還在發(fā)布會(huì)上推出了旗下首款平板電腦——iQOO Pad,其最大的賣點(diǎn)
  • 英特爾Xe-HP項(xiàng)目終止,將專注Xe-HPC/HPG系列顯卡

    據(jù)10 月 31 日消息報(bào)道,英特爾高級(jí)副總裁兼加速計(jì)算系統(tǒng)和圖形事業(yè)部總經(jīng)理 表示,Xe-HP“ Arctic Sound” 系列服務(wù)器 GPU 已經(jīng)應(yīng)用于 oneAPI devcloud 云服
  • 蘋果MacBook Pro 2021測(cè)試:仍不支持平滑滾動(dòng)

    據(jù)10月30日9to5 Mac 消息報(bào)道,蘋果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后獲得了不錯(cuò)的評(píng)價(jià),亮點(diǎn)包括行業(yè)領(lǐng)先的性能,令人印象深刻的電池續(xù)航,精美豐
Top