2014-01-08 67 views
1


我寫這篇文章,因爲這個問題是讓我瘋了。
我有同樣的問題,嘗試打印的UILabel使用NSLocalizedString與參數相同的文本(左像波斯右)。 我的代碼如下所示:
NSLocalizedString參數在右到左的語言(如波斯語)

label.text = [NSString stringWithFormat:NSLocalizedString(@"The trick belongs to %@",nil),user]; 

在我的字符串文件中的波斯語我嘗試使用這個

"The trick belongs to %@" = " %@ میز را ترک کرد"; 
"The trick belongs to %@" = "%@ برنده کارت ها شد"; 
"The trick belongs to %@" = "@% برنده کارت ها شد"; 
"The trick belongs to %@" = "برنده کارت ها شد @%"; 
"The trick belongs to %@" = "برنده کارت ها شد %@"; 

而這一切類型的表單總是打印:

「 Mariaبرندهکارتهاشد「但必須顯示像」برندهکار تهاشد瑪麗亞」

提前感謝

+0

就像一個點,你總是可以做這樣的事情'[的NSString stringWithFormat:@ 「%@%@」,NSLocalizedString(@ 「訣竅屬於」 無),用戶]' - 只要'用戶'將始終在字符串的末尾。 – Doc

+0

@Doc - 在Yoda中不起作用。 –

+0

您需要確保「%」和「@」字符按照NSString字符順序(由「characterAtIndex」提取)按順序出現,而不是按從右到左的文本出現的順序。而且你需要小心以確保這些值不會在你可能做的任何字符集轉換中出現亂碼。 (我懷疑你的問題的一部分可能是你沒有正確地重建字符串文件,每個上述審判編輯。) –

回答

0

你的右手邊變量應該是%1 $ @,並確保它是該密鑰的唯一入口。在你的例子中你有5個字符串,所以它似乎忽略了其他字符。

我們之所以使用%1 $ @是因爲如果我們想要,我們可以使用1,2,3變量不同的順序等

這裏更多:

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/LoadingResources/Strings/Strings.html#//apple_ref/doc/uid/10000051i-CH6

向下滾動到格式化字符串資源部分。

+0

感謝詹姆斯,但我試圖說這個例子,我使用這5種不同的格式(不是全部),我得到了同樣的結果。 – Jpicerno

+0

這就是本地化系統的侷限性所在。它只能知道每個本地化的每個鍵的一個值。您可能必須製作每個自己的密鑰,並且在您的應用程序中,您必須決定使用哪些密鑰。如果他們是不同的dialiacs,你可以把他們放在不同的本地化文件中(例如,英國美國可能不同於英國英國) –

+0

如果字符串中只有一個替換令牌,則不需要使用上述編號方案。當有多個令牌時它很有用,因爲它允許令牌與其替換值匹配,即使翻譯改變了順序。 –

4

你需要讓iOS知道這是一個RTL字符串,即使它在它的前面遇到了一個M(這表明它是一個LTR字符串)。您可以使用Unicode隱式方向標記RIGHT-TO-LEFT MARK U + 200F來執行此操作。

例如:

self.label.text = [NSString stringWithFormat:@"\u200f%@ برنده کارت ها شد", @"Maria"]; 

你可以把\u200f在Localized.strings文件;你不需要任何特殊的代碼來處理這個問題。

"The trick belongs to %@" = @"\u200f%@ برنده کارت ها شد"; 
+0

我使用了這個,它顯示「u200f FNF有關的正確的合法性是」FNF「 –

+0

任何建議嗎?完整的本地化字符串(「addFNFNumber_Str」=「\\ FFFFNFنمبرکااضافہکریں」;) –

+0

\ u200f不應該是必要的,如果不涉及'%@'。但是這裏的「FNF」是什麼? (對不起,我對這個字母表不熟悉,不是阿拉伯語或波斯語,它是什麼?)你是怎麼輸入這個字符串的?它看起來像你輸入「\ u200f FNF」然後ن。如果ن是字符串的第一個字母,它應該是您輸入的第一個字母,FNF應該是最後一個字母,但我不清楚FNF是什麼。 –

相關問題