Cet article explique deux points fonctionnels :
① Laissez l'APP afficher des textes différents selon la langue système du téléphone.
② Changer la langue dans l'APP n'a rien à voir avec la langue du système du téléphone.
Localisation de la langue NSLocalizedString
Tout d'abord, nous devons faire en sorte que notre application prenne en charge plusieurs langues. Je vais expliquer le processus en détail sous forme d'images et de textes.
-
Créer
Localizable.strings
des fichiers, des touches de raccourcicommand + N
-
Sélectionnez les langues que vous souhaitez prendre en charge (cliquez sur
Localizable.strings
Fichier, dans le panneau de droite de Xcode) -
Configurer le texte multilingue
-
Prend en charge plus de langues
-
Utilisez une langue localisée et remplacez tout le texte là où du texte est nécessaire par une écriture dans la langue locale
.NSString *str = @"你好";
Configurer la méthode d'écriture localisée
NSString *str = NSLocalizedString(@"你好", nil)
Changer de langue dans l'application
Je suis à Pékin, en Chine, et la langue de mon téléphone mobile est le chinois simplifié. Alors, comment l'application affiche-t-elle la configuration anglaise ?
- Créer
NSBundle
une catégorie#import <Foundation/Foundation.h> @interface NSBundle (Language) + (void)setLanguage:(NSString *)language; @end
#import "NSBundle+Language.h" #import <objc/runtime.h> static const char _bundle = 0; @interface BundleEx : NSBundle @end @implementation BundleEx - (NSString *)localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)tableName { NSBundle *bundle = objc_getAssociatedObject(self, &_bundle); return bundle ? [bundle localizedStringForKey:key value:value table:tableName] : [super localizedStringForKey:key value:value table:tableName]; } @end @implementation NSBundle (Language) + (void)setLanguage:(NSString *)language { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ object_setClass([NSBundle mainBundle], [BundleEx class]); }); objc_setAssociatedObject([NSBundle mainBundle], &_bundle, language ? [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:language ofType:@"lproj"]] : nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } @end
- Forcer l'application à afficher la langue spécifiée (appelée lorsque votre entreprise doit changer de langue)
//简体中文 [NSBundle setLanguage:@"zh-Hans"];
- Obtenez la langue du système (cela n'a rien à voir avec le choix de l'utilisateur. Vous devez sauvegarder vous-même la mémoire pour le choix de l'utilisateur)
(cette fonction peut ne pas être utilisée en fonction de votre logique métier, elle est à titre de référence uniquement)NSArray *appleLanguages = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"]; if (appleLanguages.count > 0) { NSString *currentLanguage = appleLanguages[0]; // 在这里判断 currentLanguage 是哪国的语言,来处理你的逻辑 }
Répertoriez plusieurs identifiants de langue pouvant être utilisés dans le développement iOS
Langue régionale | logo |
---|---|
arabe | ar |
Chinois simplifié | zh-Hans |
chinois traditionnel | zh-Hant |
Chinois traditionnel (Hong Kong) | zh-Hant-HK |
Chinois traditionnel (Taïwan) | zh-Hant-TW |
Anglais Royaume-Uni) | dans |
Anglais (Australie) | en-AU |
Anglais (Inde) | et en |
Français | fr |
Indonésie | identifiant |
Italie | il |
Japon | et |
Corée du Sud | est |
malais | MS |
Portugais (Portugal) | pt-pt |
Russie | ru |
Espagnol | es |
Suède | sv |
Thaïlande | ème |
Ukraine | Royaume-Uni |
Viêt Nam | vi |
Suivez, aimez et partagez plus d'histoires de développement...