سؤال

لدي تطبيق أقوم بترجمته إلى مجموعة من اللغات المختلفة.تكمن المشكلة في أن التطبيق سيكون له بعض القيم المختلفة في أستراليا عما سيكون عليه في نيوزيلندا، وكلاهما دولتان ناطقتان باللغة الإنجليزية.

لقد قمت بإنشاء ملف لغة en_AU وملف لغة en_NZ، لكن كلاهما يستخدم الملف الإنجليزي القياسي.لقد قمت بحذف ملف اللغة الإنجليزية، لكن الأمر لا يزال يحدث...

أي أفكار حول كيف يمكنني الحصول على هذا العمل؟

شكرًا لك،

--د

هل كانت مفيدة؟

المحلول

locationisations iPhone (أو هل هذه الأحرفات؟) لا تأخذ أي إشعار بالمنطقة مجموعات المستخدمين (أي المملكة المتحدة، AUS، NZ). هناك ترجمة لغة واحدة فقط "اللغة الإنجليزية" متوفرة افتراضيا. ومع ذلك، يمكنك الاختراق حول الأشياء لإجبارها على استخدام إعداد ترجمة مختلفة - لقد فعلت ذلك للتو من الاختيار بين "الإنجليزية" (الولايات المتحدة) و "EN_GB" (الإنجليزية البريطانية).

في ملف Main.m الخاص بك، قم بتغيير ذلك، بحيث يبدو أنه مثل أدناه (ضع في اختباراتك الخاصة ل NZ أو AU)

giveacodicetagpre.

}

هذا ينبثق لغة المستخدمين (مثل "EN") في اللغة NSSTRING، ودوري المستخدمين (على سبيل المثال، NZ، GB، AU) في لغة Locale Nsstring. إذا كانت (في حالتي) تطابق en و GB، ثم قمت بتعيين إعدادات تفضيلات اللغة الافتراضية للمستخدمين "en_gb"، ثم "en".

بعد ذلك، في تطبيق مندوب التطبيق الخاص بك: DidFinishLaunchLingWithoptions طريقة تريد إزالة إعداد NSUserDefaults الذي قمت بتعيينه للتو مع التعليمات البرمجية

giveacodicetagpre.

من الآمن إزالة في هذه المرحلة لأنه تم إكمال جميع تهيئة الحزمة. يجب أن يكون تطبيقك الآن يستخدم ملف Toomization.Strings داخل الدليل EN_GB.LPROJ.

هو الحل قليلا من الحلول، لكنه يعمل بالنسبة لي.

نصائح أخرى

لقد توصلت إلى ما أعتقد أنه نسخة محسنة قليلاً من إجابة rickerbh المقبولة.أول شيء يجب إدراكه هو أن الإعدادات الافتراضية للمستخدم منظمة في مجالات، و @"AppleLanguages" لا يأتي المفتاح من مجال التطبيق، بل من نطاق أعلى في التسلسل الهرمي للنطاقات.وهذا يعني أنه من الآمن تمامًا إزالته من الإعدادات الافتراضية للمستخدم:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults removeObjectForKey:@"AppleLanguages"];

بعد استدعاء هذا الرمز، ستلاحظ أن الاتصال [defaults objectForKey:@"AppleLanguages"] لا يزال يُرجع قيمة.لذا، بدلاً من الحذف @"AppleLanguages" في مرحلة ما لاحقًا، وهو ما قد يكون مشكلة اعتمادًا على مدى تعقيد تطبيقك، فأنت تريد أن تفعل العكس: يمسح @"AppleLanguages" في الحال.بشكل أساسي، يؤدي هذا إلى إعادة تعيينها مرة أخرى إلى قيمتها الافتراضية والتقاط أي تغييرات أجراها النظام عليها، على سبيل المثال، إذا قام المستخدم بتغيير لغته المفضلة.

وإليك ما أفعله:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults removeObjectForKey:@"AppleLanguages"];

NSMutableArray *appleLanguages = [[defaults objectForKey:@"AppleLanguages"] mutableCopy];
NSString *region = [[NSLocale currentLocale] objectForKey:NSLocaleCountryCode];
NSArray *languages = [appleLanguages filteredArrayUsingPredicateFormat:@"not (self contains '-')"];
for (NSString *language in languages) {
    NSString *languageAndRegion = [NSString stringWithFormat:@"%@-%@", language, region];
    [appleLanguages removeObject:languageAndRegion];
}
for (NSString *language in languages) {
    NSString *languageAndRegion = [NSString stringWithFormat:@"%@-%@", language, region];
    NSInteger index = [appleLanguages indexOfObject:language];
    [appleLanguages insertObject:languageAndRegion atIndex:index];
}
[defaults setObject:appleLanguages forKey:@"AppleLanguages"];

(لاحظ أن filteredArrayUsingPredicateFormat: هي طريقة تمديد كتبت.ليس من علم الصواريخ معرفة ما يفعله أو كيف يعمل.)

يؤدي هذا إلى إنشاء ترجمات لكل لغة في القائمة بالإضافة إلى منطقة المستخدم.على سبيل المثال، إذا كانت القائمة الأصلية es en en-GB ومنطقة المستخدم هي AU، سنحصل عليها es-AU es en-AU en en-GB.لاحظ أن es-AU غير موجود، ولكن لا فرق.وبما أن التطبيق لم يعثر على أي ترجمة أو موارد مرتبطة به، فإنه يتجاهلها فقط.

p> توثيق Apple هذه ميزة iOS مفقودة هنا.

هام: في iOS، الحزمة واجهات لا تأخذ لهجة أو معلومات البرنامج النصي في الاعتبار متى تبحث عن موارد محلية؛فقط رمز مصممي اللغة هو اعتبر.لذلك إذا كان مشروعك يشمل مشروع لغة خاصة باللغة الدلائل مع كل من اللغة و منشئ المنطقة، هذه الدلائل يتم تجاهلها.واجهات حزمة في ماك OS X دعم محماس المنطقة في مشروع اللغة الخاصة الدلائل.

كان لدي نفس المشاكل مع الألمانية وأعتقد أنني وجدت الحل "الصحيح".كان الخطأ، أنه في الأصل لغتي الأساسية كانت فقط "الألمانية (DE)"، عند إضافة ترجمة "الألمانية / النمسا (DE_AT)"، تم تجاهل الملفات.عند تغيير اللغة الأساسية إلى "الألمانية / ألمانيا (DE_DE)" لم يتم تجاهل الترجمات النمساوية.

يستحق الإشارة هنا إلى أن Xcode مضلل للغاية - يمكنك الذهاب إلى المشروع (وليس الهدف)، والمعلومات، والتجسيدات، واضغط على الزر + الذي يظهر ضمن قائمة اللغات، ثم قم بالتمرير لأسفل إلى أسفل قائمة اللغاتتظهر في المنبثقة حتى تحصل على "الآخر" (مع السهم الأيمن بجانبه)، سيفتح هذا قائمة كبيرة لطيفة تتضمن المتغيرات الإقليمية للغات.ومع ذلك، لا تعمل هذه المتغيرات الإقليمية على iPhone - فلن تحصل على أي شيء (كما هو موثق بواسطة Apple وأشارت إلى إجابة أخرى تظهر هنا).من الواضح أن أحد الحلول القائمة على التعليمات البرمجية المذكورة أعلاه أمر ضروري.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top