اي فون الترجمة: هل من الممكن لترجمة ملفات بنك الاستثمار القومي بسهولة دون الحاجة إلى نسخ وبنك الاستثمار القومي لكل لغة؟

StackOverflow https://stackoverflow.com/questions/619867

سؤال

وأنا أحاول إيجاد طريقة يمكن التحكم فيها لترجمة كل سلسلة مرئية في تطبيق اي فون. وتقول الوثائق الرسمية التفاح لاستخدام .strings الملفات سلاسل البرنامجية، في حين باستخدام المدمج في "إضافة المترجمة ملف" الخيار في كسكودي لحصر الملفات بنك الاستثمار القومي.

والمشكلة أرى مع ذلك هو أنه إذا كان UI يحتاج إلى تغيير بعد يحدث توطين، فإننا سوف تحتاج إلى تحديث المناقير لكل لغة على حدة وهو أقل من المستوى الأمثل. هل هناك طريقة أبسط لربما ربط السلاسل المعروضة في ملفات بنك الاستثمار القومي إلى القيم ذات الصلة في ملف .strings؟ أو أود أن يكون لديك برمجيا لوضع تلك السلاسل لكل عنصر واجهة المستخدم (والذي هو أفضل قليلا ولكن لا يزال مزعج)؟

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

المحلول

وأفضل ما يمكن القيام به هو متكرر حلقة خلال كل عرض ثم قم بتعيين نص عليها:

static void translateView(NSBundle *bundle, UIView *view)
{
    id idView = view;
    if ([idView respondsToSelector:@selector(text)] && [view respondsToSelector:@selector(setText:)])
        [idView setText:[bundle localizedStringForKey:[idView text] value:nil table:nil]];
    if ([idView respondsToSelector:@selector(title)] && [view respondsToSelector:@selector(setTitle:)])
        [idView setTitle:[bundle localizedStringForKey:[idView title] value:nil table:nil]];
    if ([idView respondsToSelector:@selector(placeholder)] && [view respondsToSelector:@selector(setPlaceholder:)])
        [idView setPlaceholder:[bundle localizedStringForKey:[idView placeholder] value:nil table:nil]];
    if ([idView respondsToSelector:@selector(prompt)] && [view respondsToSelector:@selector(setPrompt:)])
        [idView setPrompt:[bundle localizedStringForKey:[idView prompt] value:nil table:nil]];
    if ([idView respondsToSelector:@selector(titleForState:)] && [view respondsToSelector:@selector(setTitle:forState:)])
        [idView setTitle:[bundle localizedStringForKey:[idView titleForState:UIControlStateNormal] value:nil table:nil] forState:UIControlStateNormal];
    if ([idView isKindOfClass:[UITabBar class]] || [idView isKindOfClass:[UIToolbar class]])
        for (UIBarItem *item in [idView items])
            [item setTitle:[bundle localizedStringForKey:[item title] value:nil table:nil]];
    for (UIView *subview in [view subviews])
        translateView(bundle, subview);
}

تحذير: قد لديك للتحقق من مجموعات أخرى من محددات للقبض على كل شيء. هذه ليست أفضل الممارسات، ولكن يبدو أن أقل بكثير العمل

نصائح أخرى

وأبل المدمج في ibtool برنامج سطر الأوامر يتيح لك القيام بذلك. يمكنك التخلص من سلاسل من XIB، حصر لهم، ثم إنشاء XIB جديد يستند إلى XIB الحالية ولكن باستخدام السلاسل المترجمة. لذلك يمكن أن يكون دائما مجموعة أساسية من XIBs وإعادة كل منهم عند حدوث تغيير السلاسل المترجمة. مزيد من المعلومات هنا: http://www.bdunagan.com/ 2009/03/15 / ibtool في توطين الصنع سهلة / .

وأعتقد أنك تريد أن تقرأ عن أداة سطر الأوامر: ibtool. يجب أن تبسيط ما كنت تبحث القيام به.

وربما يجب عليك تحديث كل سلسلة يدويا. دعونا نقول لديك مجموعة، أو ملف XML، سلاسل بلغات مختلفة، عندما يقوم المستخدم بتغيير لغة مجرد الحصول على سلسلة مترجمة من مجموعة ومن ثم تغييره إلى واجهة المستخدم.

وماركو

وأنا دوما تعيين كافة السلاسل المطلوبة في طريقة viewDidLoad () فقط مع وجود النائبة في .xib. بهذه الطريقة أستطيع أن توطين أي .xib بسهولة مع تحديث الملفات فقط .string

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