8

請注意localizedStringWithFormat如何工作?

我不是問NSLocalizedString()宏。我在詢問NSString職能功能+ (instancetype)localizedStringWithFormat:(NSString *)format, ...

這是兩件獨立的事情。

問題

我試圖使用NSString類方法localizedStringWithFormat但我不能工作了,我應該如何使用它。

無論我嘗試使用Xcode 6 export for localization,我似乎沒有看到在翻譯文件中出現的單詞。我已經嘗試了這裏的前兩個變化,但沒有。

的例子在文檔顯示...

NSString *myString = [NSString localizedStringWithFormat:@"%@: %f", @"Cost", 1234.56]; 

這是否意味着我必須獨立於數字翻譯詞?即我可以不只是使用...

NSString *myString = [NSString localizedStringWithFormat:@"Cost: %f", 1234.56]; 

如果我可以使用這個,那麼翻譯的詞組是什麼,翻譯是什麼?

如果沒有,那麼爲什麼要使用它呢?爲什麼不只是使用...

NSString *myString = [NSString stringWithFormat:@"%@: %f", NSLocalizedString(@"Cost"), 1234.56]; 

這最後一個有什麼不同?

無論哪種方式,有人可以告訴我如何獲得在此翻譯的實際單詞。

更新

OK,現在我使用的是一個愚蠢的解決辦法,只是似乎被濫用的一切笑。

如果我做...

NSString *myString = [NSString stringWithFormat:@"%@: %f", NSLocalizedString(@"Cost"), 1234.56]; 

然後翻譯的單詞「成本」,但沒有使用正確的區域設置的數字。

如果我使用...

NSString *myString = [NSString localizedStringWithFormat:@"%@: %f", @"Cost", 1234.56]; 
// or 
NSString *myString = [NSString localizedStringWithFormat:@"Cost: %f", 1234.56]; 

然後Xcode的「導出本地化」會忽略它完全和任何關於「成本」被添加到轉換文件都因此沒有被翻譯。

所以,我採取使用...

[NSString localizedStringWithFormat:@"%@: %f", NSLocalizedString(@"Cost", @"Cost context stuff..."), 1234.56]; 

這增加了「成本」的翻譯文件,並轉換成正確的區域設置的數量,但好像我用了很多冗餘的這裏的東西。

+0

@matt是的,我已經看到了。我無法獲得翻譯的文字。我試過了我能想到的所有東西,但是這些詞似乎並沒有出現在翻譯文件中。我得到翻譯的數字格式,然後是英文文本。 – Fogmeister 2014-10-07 13:52:07

+0

@matt是的,我們已經翻譯成15種語言,每種語言約有50個字。這是唯一不起作用的位。我現在更新了這個問題。 – Fogmeister 2014-10-07 13:56:09

+0

@matt我不確定這些最後兩條評論的含義是什麼?我知道翻譯取決於我。我知道語言環境與語言不同。這些事實都不能幫助我獲得翻譯的文本。 – Fogmeister 2014-10-07 13:57:04

回答

5

當你想到NSLocalizedStrings - 認爲鍵/值。你可以玩一些花樣配鑰匙,就像你的第二個例子:

@"Cost: %f" 

這是一個關鍵 - 的價值可能會是一些看起來像@「SomeOtherWord:%F」 - %F仍在使用之後是格式字符串的一部分。

的最後一個例子,你給:

NSString *myString = [NSString stringWithFormat:@"%@: %f", NSLocalizedString(@"Cost"), 1234.56]; 

允許你分開了「成本」這個詞與串的復位,這可能是罰款的翻譯 - 但可能不足以有效地傳達你的意思在所有語言中。也許有一種語言,你不會標籤:價值,然後只是翻譯「成本」並沒有讓你良好的本地化。

NSLocalizedString可以幫助解決大多數情況,但是本地化很困難並且存在特殊情況,所以您的代碼也可能有特殊情況 - 只是盡力保持與邏輯的其餘部分隔離。

編輯:解決實際問題,因爲它演變:

localizedStringWithFormat: 

會改變格式說明如何更換。

從蘋果公司的NSString的文檔:

討論

這種方法相當於使用initWithFormat:區域:並通過當前的語言環境,語言環境參數。

+0

這就是我首先想到的(文本是關鍵)。但是,當我使用它時,沒有任何內容被添加到翻譯文件中以實際翻譯它。 Xcode的本地化功能出口可能是一個錯誤嗎? – Fogmeister 2014-10-07 15:28:46

+0

如果你分兩步做,會發生什麼?首先得到NSLocalizedString(key),然後做一個stringWithFormat :. XCode是否正確填充事物? – KirkSpaziani 2014-10-07 16:13:55

+0

嘗試命令行版本:「xcodebuild -exportLocalizations」可能有一些有用的輸出。或者可能,它是localizedStringWithFormat上的一個缺陷/缺失功能: – KirkSpaziani 2014-10-07 16:20:21