इस समस्या का एक और अधिक शक्तिशाली समाधान है। TranslationExchange.com
से
https://github.com/tr8n/tr8n_objc_clientsdk
Tr8n पुस्तकालय पर एक नजर डालें पुस्तकालय TranslationExchange के टीएमएल (अनुवाद मार्कअप लैंग्वेज), जो अंतर्राष्ट्रीयकरण प्रक्रिया बहुत आसान बना देता है का उपयोग करता है। सबसे पहले, आपको स्ट्रिंग्स एक्सएमएल फाइलों से कभी भी निपटने की ज़रूरत नहीं है, वास्तव में ... - Tr8n एसडीके फ्लाई पर आपके स्ट्रिंग फाइलों को बनाए और प्रबंधित करेगा - आप उन्हें फिर कभी नहीं देख पाएंगे।
आपका विशिष्ट उदाहरण बस होगा:
Tr8nLocalizedStringWithTokens(@"{count || object}", @{@"count": objectList.count})
Tr8n पुस्तकालय स्वचालित रूप से किसी भी भाषा में आप के लिए सही बहुवचन रूप ले जाएगा। हा? हाँ, यह जादुई है। ऊपर टोकन उदाहरण का पूर्ण रूप वास्तव में है:
{count:number || one: object, other: objects}
इसका मतलब है कि "गिनती" टोकन एक अंकीय प्रकार है कि कीवर्ड "एक" और "अन्य" का उपयोग कर अंग्रेजी बहुवचन को मैप किया है की है .... लेकिन Tr8n इतना स्मार्ट है कि आप इसे टाइप न करें। यह उचित नियम मानों के पैरामीटर के अनुक्रम को मैप करने के लिए पर्याप्त स्मार्ट भी है। और, ज़ाहिर है, यह जानता है कि "गिनती" नामांकन सम्मेलन के माध्यम से संख्यात्मक नियमों से जुड़ा हुआ है।तो यह बस हो जाता है:
{count || object}
Btw, जब से तुम रूस उल्लेख किया है, इसके बाद के संस्करण के लिए रूसी अनुवाद बस होगा:
"{count || object}" = "{count || объект, объекта, объектов}"
यह उदाहरण भी आसान था, चलो एक पर एक नज़र डालें और अधिक दिलचस्प एक:
Tr8nLocalizedStringWithTokens(
@"{user} uploaded {count || photo} to {user | his, her} photo album.",
@{@"user": user, @"count": 5}
)
सबसे पहले, अच्छी किस्मत इस वाक्य मानक आईओएस i18n पुस्तकालय (या उस बात के लिए किसी भी अन्य पुस्तकालय) का उपयोग के अनुवाद ... यह एक मजाक है - लेकिन वास्तव में, वहाँ कोई रास्ता नहीं है इसे किसी भी चीज का उपयोग करते हैं, लेकिन Tr8n।
टीएमएल ऊपर का अनुवाद रूसी बस होगा:
@"{user || загрузил, загрузила} {count || фотографию, фотографии, фотографий} в свой фотоальбом."
यहाँ हम लिंग के साथ सौदा उसी तरह हम संख्यात्मक नियमों से निपटने के नियम। लेकिन "एक", "कुछ", "अन्य" के बजाय, हमारे पास "पुरुष", "मादा", "अज्ञात" है - ठीक है, प्रत्येक भाषा में अलग-अलग लिंग और संख्यात्मक नियम हो सकते हैं। Tr8n इसके साथ सौदा करेगा, तो आपको करने की ज़रूरत नहीं है।
ठीक है, चलो इसे अगले स्तर पर ले जाएं। आपने तय किया है कि आपके पास बोल्ड होने के लिए फ़ोटो की संख्या होनी चाहिए। केक का टुकड़ा।
Tr8nLocalizedAttributedStringWithTokens(
@"{user} uploaded [bold: {count || photo}] to {user | his, her} photo album.",
@{
@"user": user,
@"count": 5,
@"bold": @{@"font":@{@"name": @"system", @"size": @12, @"type": @"bold"}}
}
)
[बोल्ड: ...] एक सजावट टोकन है। क्या आपने देखा है कि हमने मैक्रो को एट्रिब्यूटेड स्ट्रिंग संस्करण में बदल दिया है? यह मैक्रो वास्तव में आईओएस की मूल सजावट तंत्र का उपयोग कर एनएसएट्रिब्रिटेड स्ट्रिंग का उत्पादन करेगा। क्या आप अनुमान लगा सकते हैं कि रूसी में अनुवाद क्या होगा?
@"{user || загрузил, загрузила} [bold: {count || фотографию, фотографии, фотографий}] в свой фотоальбом."
Btw, आप अपने सभी सजावट टोकन कहीं परिभाषित कर लेते हैं कर सकते हैं, ताकि आप उन्हें हर बार परिभाषित करने को रखने के लिए नहीं है।
Tr8nLocalizedAttributedStringWithTokens(
@"{actor} sent {target} [bold: {count || gift}].",
@{
@"actor": user1,
@"target": user2,
@"count": 5
}
)
यह अंग्रेजी में दिलचस्प नहीं लगती है:
की बस एक और अंतिम उदाहरण करते हैं ... कहते हैं, तो आपको निम्न रूप में एक न्यूज़फ़ीड कहानी है। लेकिन यह रूसी या किसी अन्य भाषा में करता है जो भाषा के मामलों का समर्थन करता है। {Target} का नाम, यदि यह रूसी में होता है, तो वास्तव में रूसी मूल भाषा केस का उपयोग करने की आवश्यकता होगी।
http://en.wikipedia.org/wiki/Dative_case
आप रूस में बात नहीं करते, तो आप शायद इसके बारे में पता करने की जरूरत नहीं है। लेकिन आपके रूसी अनुवादकों को चाहिए। चलो तो रूसी अनुवाद देखें:
@"{actor || подарил, подарила} {target::dat} [bold: {count || подарок, подарка, подарков}].",
Tr8n बहुत चालाक अपने शक्तिशाली भाषा नियम इंजन का उपयोग और रूसी {target} टोकन के माध्यम से पारित करने के लिए नाम संप्रदान कारक भाषा मामले लागू करने के लिए है ...
कि एक साधारण संख्यात्मक प्रश्न के लिए एक लंबा जवाब था। इसे अब तक पढ़ने के लिए धन्यवाद। आशा करता हूँ की ये काम करेगा।
अस्वीकरण: मैं Tr8n ढांचे और टीएमएल भाषा का निर्माता हूं। यदि आपके कोई प्रश्न हैं, तो कृपया मुझे पिंग करें और मुझे आपके सभी अनुवाद प्रश्नों के साथ आपकी मदद करने में खुशी होगी।
यह एक रूसी विशेष समस्या नहीं है - अन्य भाषाओं जिसके लिए आप सिर्फ एक बहुवचन की तुलना में अधिक की आवश्यकता होगी रहे हैं। –
समस्या के बारे में अधिक विस्तृत स्पष्टीकरण के लिए http://www.gnu.org/software/hello/manual/gettext/Plural-forms.html देखें (साथ ही अनियमितताओं वाली भाषाओं की काफी लंबी सूची)। –
धन्यवाद पावेल, मैंने तदनुसार – zvolkov