gpt4 book ai didi

iphone - 将 iOS 应用程序翻译成不受支持/非标准的语言

转载 作者:技术小花猫 更新时间:2023-10-29 10:37:14 27 4
gpt4 key购买 nike

我正在扩展现有的 iPhone 应用程序(4.x 及更高版本)以支持更多语言:爱沙尼亚语、拉脱维亚语和立陶宛语。

在我的 iPhone 和模拟器中,不支持这些语言,而且我很确定不存在适用于这些语言的特殊固件。

我怎样才能最好地制作支持它们的应用程序?

我提出了两个我不太喜欢的解决方案。它们都不允许我在应用程序中使用一种以上的语言,因为用户无法从 Settings.app 列表中选择捆绑的语言。这意味着必须为每种语言提交一个版本。

方案一:滥用en.lproj目录

对于每种目标语言(lt、lv、et),我将该语言的字符串文件放入 en.lproj 目录中。

优点:使用众所周知的机制。该应用程序只是认为它正在运行英语。

缺点:对我的本地化工具造成严重破坏。它会让 future 的维护者感到困惑,因此容易出错。需要一个奇怪的build设置。

选项 2:滥用 NSUserDefaults[AppleLanguages]

NSUserDefaults 中的 AppleLanguages 对象包含应用程序要使用的语言列表。通过这样设置,我可以让应用程序从 lt.lproj 目录加载例如立陶宛语:

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"lt", nil] forKey:@"AppleLanguages"];

(由于历史原因,我已经做了一个稍微复杂的版本,以删除某些版本的应用程序中已弃用的翻译。否则,即使我不再将它与应用程序捆绑在一起,较旧的安装也会选择 lproj 目录。 )

优点:使用正确命名的 lproj 目录。与本地化工具很好地集成。简单的设置。只需要main.m中的一行即可实现。

缺点:尽管很多人都在使用 AppleLanguages 键,但此解决方案使用它来加载其他不受支持的语言,所以我担心我可能会滑冰薄冰。

问题

  • 其他应用通常如何支持这些“不受支持”的语言?
  • 有没有一种方法可以同时支持它们和通常支持的语言?
  • 您如何看待 AppleLanguages 黑客攻击?

最佳答案

为什么不在您的应用程序中添加语言设置然后使用此代码(我在一个项目中使用它,用户可以在我的客户提出要求后在应用程序中切换语言)。

它基本上覆盖了 NSLocalizedString 并使用相同的文件结构(en.lproj 等)来保存您使用“apple-way”时使用的相同语言文件。

试试吧!

.h文件

#import <Foundation/Foundation.h>

//#undef NSLocalizedString

#define ___(key) \
[[I7I18N sharedInstance] localizedStringForKey:(key)]

#undef NSLocalizedString
#define NSLocalizedString(key,value) \
[[I7I18N sharedInstance] localizedStringForKey:(key)]

@interface I7I18N : NSObject

@property (nonatomic, retain) NSMutableDictionary *i18nTable;
+ (I7I18N *)sharedInstance;
- (NSString *)localizedStringForKey:(NSString *)key;
- (void)setLocale:(NSString *)lProjFile;

@end

.m文件

#import "I7I18N.h"

static I7I18N *sharedInstance;

@implementation I7I18N
@synthesize i18nTable=_i18nTable;

+ (I7I18N *)sharedInstance {
if(!sharedInstance) {
sharedInstance = [[I7I18N alloc] init];
}

return sharedInstance;
}

- (id)init
{
self = [super init];
if (self) {
self.i18nTable = [NSMutableDictionary dictionary];

NSArray *validLocalizations = [[NSBundle mainBundle] localizations];
[self setLocale:[validLocalizations objectAtIndex:0]];
}
return self;
}

- (void)setLocale:(NSString *)lProjFile {
NSString *path = [[NSBundle mainBundle] pathForResource:@"Localizable.strings" ofType:@"" inDirectory:[NSString stringWithFormat:@"%@.lproj",lProjFile]];
self.i18nTable = [NSDictionary dictionaryWithContentsOfFile:path];
}

- (NSString *)localizedStringForKey:(NSString *)key {
NSString *possibleI18NString = [self.i18nTable objectForKey:key];
if(!possibleI18NString) {
return key;
}
return possibleI18NString;

}

@end

更新 1:当使用 [[I7I18N sharedInstance] setLocale:@"yourlang.lproj"] 切换语言时,不要忘记构建所有 View (所有 NSLocalizedString 依赖项)。

关于iphone - 将 iOS 应用程序翻译成不受支持/非标准的语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10259695/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com