Question

J'ai une application de bar à onglets qui doit s'afficher dans différentes langues en fonction de la préférence d'un utilisateur, mais je ne trouve pas beaucoup d'informations sur la façon de modifier les noms des onglets au moment de l'exécution. J'ai besoin des onglets pour afficher les noms corrects au démarrage, pas lorsque les onglets sont accessibles.

Les meilleures informations que je pouvais trouver était de courir

self.tabBarController.selectedIndex = 1;
tabBarController.selectedViewController.tabBarItem.title = @"Tab Name";

Dans le délégué de l'application, mais cela rend l'onglet actif et définit ensuite le nom.

N'y a-t-il pas une meilleure façon de définir les noms d'onglet au moment de l'exécution? Idéalement, j'aimerais les mettre tous en une seule fois.

Était-ce utile?

La solution 2

Les 2 réponses n'ont pas fonctionné pour moi, je l'ai finalement fait comme ceci:

// Create temp strings to hold tab names
NSString *tab0Name;
NSString *tab1Name;
NSString *tab2Name;
NSString *tab3Name;
NSString *tab4Name;

// Set strings according to language
if ([UIAppDelegate.iStegAppLanguage isEqualToString:@"FR"])
{
    tab0Name = @"Accueil";
    tab1Name = @"Produits";
    tab2Name = @"Caisse";
    tab3Name = @"Branches";
    tab4Name = @"Plus";
}
else if ([UIAppDelegate.iStegAppLanguage isEqualToString:@"IT"])
{
    tab0Name = @"Home";
    tab1Name = @"Prodotti";
    tab2Name = @"Checkout";
    tab3Name = @"Filiali";
    tab4Name = @"More";
}
else if ([UIAppDelegate.iStegAppLanguage isEqualToString:@"EN"])
{
    tab0Name = @"Home";
    tab1Name = @"Products";
    tab2Name = @"Checkout";
    tab3Name = @"Branches";
    tab4Name = @"More";
}
else    // Default to german unless specifically set to another language
{
    tab0Name = @"Home";
    tab1Name = @"Produkte";
    tab2Name = @"Checkout";
    tab3Name = @"Filialen";
    tab4Name = @"Mehr";
}

// Set tab name
self.tabBarController.selectedIndex = 1;
tabBarController.selectedViewController.tabBarItem.title = tab1Name;
self.tabBarController.selectedIndex = 2;
tabBarController.selectedViewController.tabBarItem.title = tab2Name;
self.tabBarController.selectedIndex = 3;
tabBarController.selectedViewController.tabBarItem.title = tab3Name;
self.tabBarController.selectedIndex = 4;
tabBarController.selectedViewController.tabBarItem.title = tab4Name;
self.tabBarController.selectedIndex = 0;
tabBarController.selectedViewController.tabBarItem.title = tab0Name;    // Home last so it's shown first

Autres conseils

Si vous avez une référence à l'Uitabbar, vous pouvez utiliser quelque chose comme:

for (UITabBarItem *tabBarItem in tabBar)
{
  tabBarItem.title = NSLocalizedString(...);
}

Je vous suggère de localiser votre fichier XIB:

  • Faites un clic droit sur votre fichier XIB
  • "Obtenez des informations"
  • Onglet "Général" en haut
  • "Rendre le fichier localisable" bouton en bas
  • Retour à l'onglet "Général" en haut
  • Le bouton "Ajouter la localisation" dans le bas + Entrez le paramètre que vous voulez (par exemple "en", "fr", "il", "ru" etc.)

Répétez la dernière étape jusqu'à ce que vous ayez toutes les langues demandées.
Je préfère utiliser "en" au lieu de "l'anglais" par défaut qui est créé automatiquement - si vous préférez "en" aussi, supprimez "l'anglais" à la fin ...

Maintenant, vous pouvez entrer différents titres aux onglets pour chaque paramètre locale ...

La façon dont je l'ai fait est en définissant des points de vente dans le délégué de l'application:

IBOutlet UITabBarItem *tabBarItem1;
IBOutlet UITabBarItem *tabBarItem2;
IBOutlet UITabBarItem *tabBarItem3;
IBOutlet UITabBarItem *tabBarItem4;

Et puis, après avoir connecté les points de vente à IB, mettant cela - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions :

[tabBarItem1 setTitle:NSLocalizedString(@"tab1", @"")];
[tabBarItem2 setTitle:NSLocalizedString(@"tab2", @"")];
[tabBarItem3 setTitle:NSLocalizedString(@"tab3", @"")];
[tabBarItem4 setTitle:NSLocalizedString(@"tab4", @"")];

Cela fonctionne mais je ne suis pas satisfait de cela non plus - pour une raison quelconque, je ne peux pas faire fonctionner correctement un localwindow.xib.

J'utilise:

NSArray *itemsTabBar = [[NSArray alloc] initWithArray:[self.tabBarController.tabBar items]];

    [[itemsTabBar objectAtIndex:0] setTitle:@"Contacts"];
    [[itemsTabBar objectAtIndex:1] setTitle:@"Settings"];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top