項(xiàng)目: Smart PDF
技術(shù)棧: Android, Kotlin, Jetpack Compose
一、 字符串資源解耦 (String Externalization)
1. 現(xiàn)狀: 代碼中存在硬編碼(Hard-coded)字符串插值,如 "${pdf.pages}P"。
2. 問題: * 無法支持多語言翻譯。
- UI 內(nèi)容與業(yè)務(wù)邏輯耦合。
- 無法處理不同語言的后綴邏輯。
3. 解決方案: 將靜態(tài)文本與動(dòng)態(tài)參數(shù)剝離,存入 strings.xml 資源文件。
-
中文 (
values/strings.xml):<string name="page_count">%1$dP</string> -
英文 (
values-en/strings.xml):<string name="page_count">%1$d Pages</string>
二、 動(dòng)態(tài)內(nèi)容占位符與語序邏輯 (String Formatting)
1. 現(xiàn)狀: 使用字符串拼接處理動(dòng)態(tài)標(biāo)簽,如 "修改時(shí)間:" + date。
2. 問題: 不同語言的語法結(jié)構(gòu)(Syntax)差異導(dǎo)致拼接順序固定,不符合非中文語境的表達(dá)習(xí)慣。
3. 解決方案: 使用帶索引的占位符(Argument Specifiers),允許翻譯文件控制參數(shù)位置。
-
實(shí)現(xiàn):
context.getString(R.string.modified_date, dateString) -
配置: * 中文:
修改時(shí)間:%1$s- 英文:
Modified on %1$s
- 英文:
三、 區(qū)域感知日期格式化 (Locale-aware Date Formatting)
1. 現(xiàn)狀: 采用固定模式 YYYY-MM-DD。
2. 問題: * 美國(guó) (US): 習(xí)慣 MM/DD/YYYY。
-
英/澳/新 (UK/AU/NZ): 習(xí)慣
DD/MM/YYYY。 - 固定格式在 UI 層會(huì)產(chǎn)生識(shí)別歧義(Ambiguity)。
3. 解決方案: 放棄手動(dòng)硬編碼模式(Pattern),調(diào)用系統(tǒng) Locale 感知格式化工具。
- 核心代碼:
// 使用系統(tǒng)預(yù)設(shè)的中等長(zhǎng)度格式
val formatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM)
val label = date.format(formatter)
四、 語法一致性處理 (Plurals/Quantity Strings)
1. 現(xiàn)狀: 數(shù)字與單位直接組合,如 1 Pages。
2. 問題: 不符合英語及其他西方語言的單復(fù)數(shù)(Singular/Plural)語法規(guī)則。
3. 解決方案: 使用 Android plurals 資源處理數(shù)量級(jí)映射。
- 配置示例:
<plurals name="pdf_pages">
<item quantity="one">%d Page</item>
<item quantity="other">%d Pages</item>
</plurals>
-
調(diào)用:
pluralStringResource(R.plurals.pdf_pages, count, count)
五、 結(jié)論與工程價(jià)值
- 架構(gòu)解耦: UI 文案成為可配置項(xiàng),邏輯代碼不再感知具體語言內(nèi)容。
- 消除歧義: 通過系統(tǒng)級(jí) API 解決日期格式在不同國(guó)家/地區(qū)的認(rèn)知沖突。
- 語法合規(guī): 確保全球化環(huán)境下 UI 文本的語法正確性。
- 求職導(dǎo)向: 該實(shí)踐符合北美及全球化 IT 企業(yè)的通用工程規(guī)范(Engineering Best Practices)。