質問
ユーザーの好みに応じて異なる言語で表示する必要があるタブバーアプリがありますが、実行時にタブ名を変更する方法に関する情報はあまり見つかりません。タブにアクセスされるときではなく、起動時に正しい名前を表示するためにタブが必要です。
私が見つけることができる最高の情報は実行されていました
self.tabBarController.selectedIndex = 1;
tabBarController.selectedViewController.tabBarItem.title = @"Tab Name";
アプリ代表からは、最初にタブがアクティブになり、次に名前を設定します。
実行時にタブ名を設定するより良い方法はありませんか?理想的には、すべてを一度に設定したいと思います。
解決 2
2つの応答は私にとってはうまくいきませんでした、私は最終的にこのようにそれをしました:
// 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
他のヒント
Uitabbarへの参照がある場合は、次のようなものを使用できます。
for (UITabBarItem *tabBarItem in tabBar)
{
tabBarItem.title = NSLocalizedString(...);
}
XIBファイルをローカライズすることをお勧めします。
- XIBファイルを右クリックします
- "情報を取得"
- 上部の「一般」タブ
- 下部に「ファイルのローカライズ可能」ボタンを作成します
- 上部の「一般」タブに戻ります
- 下部に「ローカリゼーションを追加」ボタン +必要なロケール(例:「en」、「fr」、「he」、 "ru"など)を入力します。
要求されたすべての言語が得られるまで、最後のステップを繰り返します。
私は自動的に作成されるデフォルトの「英語」の代わりに「en」を使用することを好みます - あなたも「en」を好む場合は、最後に「英語」を削除します...
これで、各ロケールのタブに異なるタイトルを入力できます...
私がそれをした方法は、アプリデリゲートでアウトレットを定義することです。
IBOutlet UITabBarItem *tabBarItem1;
IBOutlet UITabBarItem *tabBarItem2;
IBOutlet UITabBarItem *tabBarItem3;
IBOutlet UITabBarItem *tabBarItem4;
そして、IBでアウトレットを接続した後、これを - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
:
[tabBarItem1 setTitle:NSLocalizedString(@"tab1", @"")];
[tabBarItem2 setTitle:NSLocalizedString(@"tab2", @"")];
[tabBarItem3 setTitle:NSLocalizedString(@"tab3", @"")];
[tabBarItem4 setTitle:NSLocalizedString(@"tab4", @"")];
それは機能しますが、私もそれに満足していません - 何らかの理由で、私はローカライズ可能なmainwindow.xibを適切に動作させることができません。
私が使用しています:
NSArray *itemsTabBar = [[NSArray alloc] initWithArray:[self.tabBarController.tabBar items]];
[[itemsTabBar objectAtIndex:0] setTitle:@"Contacts"];
[[itemsTabBar objectAtIndex:1] setTitle:@"Settings"];