自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

iOS項目國際化對【名詞復(fù)數(shù)】的處理方法

移動開發(fā)
iOS項目國際化過程中對【名詞復(fù)數(shù)】的處理方法和對其他文字的處理方法有些不同之處,這篇文章將從下面幾個方面講解一下項目中怎么處理名詞復(fù)數(shù)。

iOS項目國際化過程中對【名詞復(fù)數(shù)】的處理方法和對其他文字的處理方法有些不同之處,這篇文章將從下面幾個方面講解一下項目中怎么處理名詞復(fù)數(shù)。

  1. .stringsdict 

 

[[399814]]

到公眾號【iOS開發(fā)棧】學(xué)習(xí)更多SwiftUI、iOS開發(fā)相關(guān)內(nèi)容。

錯誤的名詞復(fù)數(shù)處理方式

iOS項目國際化主要是對項目中用到的文字進行本地化語言處理,這個方面的知識在前面幾篇文章都有涉及,比如 蘋果官方的iOS App國際化工作流 、 使用Xib使App完成國際化功能 。

普通文本可以大致看作1對1的翻譯,比如說“iOS開發(fā)棧”->“iOS developers stack”,這種一對一的翻譯通過 .strings 文件可以處理。

名詞復(fù)數(shù)的多語言處理是更加復(fù)雜的翻譯,因為不同的語言對不同數(shù)量的表達方式都不一樣。分別以英文、中文表達【iOS開發(fā)?!抗娞栍袔讉€粉絲為例:

 

不同語言對不同數(shù)量的表達可以參考 Language Plural Rules

如果要用 .strings 文件來處理名詞復(fù)數(shù)的話,大概會寫出這樣的代碼:

 

  1. /* 偽代碼 */ 
  2. let fans = ... 
  3. if fans == 0 { 
  4.     NSLocalizedString("zero fans number of my offical account", comment: "The Fans Number of 【ios開發(fā)?!縤s zero"
  5. else if fans == 1 { 
  6.     NSLocalizedString("one fans number of my offical account", comment: "The Fans Number of 【ios開發(fā)棧】is one"
  7. else { 
  8.     NSLocalizedString("other fans number of my offical account", comment: "The Fans Number of 【ios開發(fā)?!縤s other"

如果每個用到名詞復(fù)數(shù)的地方都這樣寫的話,項目中就會充斥著這種膠水代碼,非常不利于維護。為了避免這種做法,我們可以利用Xcode自帶的 .stringsdict 文件。

stringsdict

.stringsdict 文件就是專門用來處理名詞復(fù)數(shù)的plist文件。

創(chuàng)建 .stringsdict 文件

 

 

 

  1. Localizable.stringsdict 

stringsdict 文件解析

 

左邊是一個空的stringsdict文件,右邊是用公眾號粉絲數(shù)為例的stringsdict文件。

  1. Localized String Key 是一個文字常量,用在 NSLocalizedString 宏里面用來匹配多語言翻譯,如 NSLocalizedString("fans number of my official account", comment: "The Fans Number of 【ios開發(fā)?!?quot;) 。項目中有多少個需要翻譯的名詞復(fù)數(shù)就要有多少個Localized String Key。
  2. Localized Format Key 對應(yīng)的是包含名詞復(fù)數(shù)的句子,其中的數(shù)字和名詞在 %#@ 和 @ 中間。
  3. VARIABLE 用 %#@ 和 @ 之間的代替。這是一個鍵值對,內(nèi)容就是VARIABLE在不同數(shù)量下的表示規(guī)則。
  • NSStringFormatSpecTypeKey 指定復(fù)數(shù)規(guī)則的類型,固定為 NSStringPluralRuleType 表示復(fù)數(shù)規(guī)則類型。
  • NSStringFormatValueTypeKey 用來表示不同的數(shù)字類型,比方說整型是%d,無符號整型%u,具體可以查看 String Format Specifiers
  • zero / one / two / few,many / other 不同數(shù)量下名詞復(fù)數(shù)的表現(xiàn)方式,有些語言只有其中幾個比如漢語基本所有數(shù)量都可以用一種方式來表達(1個、2個、100個),英語有兩種(one fan/many fans),更多的語言可以查看 Language Plural Rules 。

實戰(zhàn)經(jīng)驗

  1. Localized Format Key 是一個語句,其中可以包含1個或1個以上的復(fù)數(shù),每個都用 %#@ 和 @ 包圍。
  2. 每增加一個需要翻譯的名詞復(fù)數(shù)就要增加一個 Localized String Key 。
  3. 設(shè)置 .stringsdict 文件的多語言

 

  1. Localizable.stringsdict 
  2. the File inspector 

 

上面是在中英文下對 iOS開發(fā)棧有n個粉絲 和 iOS開發(fā)棧有n篇文章和m次分享 的翻譯。對這兩個翻譯的使用方法如下:

 

  1. let fansNumLocalizableString = NSLocalizedString("fans num in my offical account", comment: "The Fans Number of 【ios開發(fā)棧】"
  2. let fanNumStr = String.localizedStringWithFormat(fansNumLocalizableString, 3) 
  3.  
  4. let offcialAccountInfo = NSLocalizedString("official account info", comment: ""
  5. let accountInfoStr = String.localizedStringWithFormat(offcialAccountInfo, 10, 5) 

到公眾號【iOS開發(fā)?!繉W(xué)習(xí)更多SwiftUI、iOS開發(fā)相關(guān)內(nèi)容。

總結(jié)

通過這篇文章我們了解了為什么要對名詞復(fù)數(shù)的國際化進行單獨處理,和stringsdict文件的用法,相信你已經(jīng)對名詞復(fù)數(shù)的國際化有所了解,現(xiàn)在就去動手試試吧~

責任編輯:未麗燕 來源: 施治昂
相關(guān)推薦

2017-01-09 16:24:07

滴滴Android 端 App

2011-05-17 09:39:38

JavaSE

2011-07-08 11:13:42

Cocoa Touch XCode

2011-08-29 09:48:30

springMVC

2024-01-17 10:16:22

前端國際化消息鍵

2010-03-02 16:44:59

CentOS Mono

2010-07-28 14:52:29

Flex國際化

2024-05-17 08:25:06

數(shù)據(jù)驅(qū)動React語言包

2023-01-31 10:29:26

JavaScript國際化國際化庫

2010-01-04 13:09:51

Silverlight

2011-08-19 13:13:14

struts2Java

2018-05-24 15:19:19

AWS創(chuàng)業(yè)云服務(wù)

2023-04-07 15:12:46

ReactReact-Intl

2009-06-25 16:04:30

2009-06-03 08:30:30

禚佳春法航華為

2024-01-04 08:16:34

Spring國際化標準

2009-01-19 09:06:31

gettextPHP國際化編程

2022-07-27 10:39:14

Spring代碼IDEA

2009-12-29 15:05:29

WPF支持國際化

2009-02-04 15:04:13

點贊
收藏

51CTO技術(shù)棧公眾號