English 中文(简体)
如何形成一种形式化的当地特征?
原标题:How to create a formatted localized string?

我有一个地方化体,需要吸收几个变量。 然而,在本地化过程中,变量的顺序必须从语言到语言。

因此,这不是一个好的想法:

NSString *text = NSLocalizedString(@"My birthday is at %@ %@ in %@", nil);

在某些语言中,有些话出现在其他人面前,而在另一些语言中,则相反。 我目前缺乏一个很好的例子。

我将如何以格式说明的方式提供非专用变量? 如果没有一些重力自制的自我扼制替代物,它是否有任何办法? 甚至诸如{%@1}、{%@2}等一些编号变量,就足以...... 是否有解决办法?

最佳回答

因此,<代码> 本地化编码有两个参数。 利用第二个参数添加一个评述,说明变量的母语含义。 然后,笔译员可使用<代码> + 编号建筑重新排序。 见Ampain s

然而,你不能用一种语言熟练掌握参数。 例如,如果你有3个英文参数,4个法文参数,你不需要第3个英文参数,那么你不能像<代码>%1 @ %2 @%2 和%4$@一样。 你们只能ski。

问题回答

当地化示例:

NSString *today = [MyHandWatch today];
NSString *msg = [NSString stringWithFormat:NSLocalizedString(@"Today is %@", @""), today];

基因组将产生这一条线,符合你们的当地特征。 档案:

"Today is %@" = "Today is %@";

我在几周后的一个项目中解决这一问题,建立了我自己的简单模板系统,其编号为。 该方法使用一个模板系统,该模板将各种变量与辛塔克斯(${ >>>>>。 可通过<代码>NSDictionary向该方法提供变数。

- (NSString *)localizedStringFromTemplateString:(NSString *)string variables:(NSDictionary *)variables {
    NSMutableString *result = [NSMutableString string];
    // Create scanner with the localized string
    NSScanner *scanner = [[NSScanner alloc] initWithString:NSLocalizedString(string, nil)];
    [scanner setCharactersToBeSkipped:nil];

    NSString *output;

    while (![scanner isAtEnd]) {
        output = NULL;
        // Find ${variable} templates
        if ([scanner scanUpToString:@"${" intoString:&output]) {
            [result appendString:output];

            // Skip syntax
            [scanner scanString:@"${" intoString:NULL];

            output = NULL;

            if ([scanner scanUpToString:@"}" intoString:&output]) {
                id variable = nil;
                // Check for the variable
                if ((variable = [variables objectForKey:output])) {
                    if ([variable isKindOfClass:[NSString class]]) {
                        // NSString, append
                        [result appendString:variable];
                    } else if ([variable respondsToSelector:@selector(description)]) {
                        // Not a NSString, but can handle description, append
                        [result appendString:[variable description]];
                    }
                } else {
                    // Not found, localize the template key and append
                    [result appendString:NSLocalizedString(output, nil)];
                }
                // Skip syntax
                [scanner scanString:@"}" intoString:NULL];
            }
        }
    }

    [scanner release];

    return result;
}

拥有地方档案。

"born message"  = "I was born in ${birthYear} on a ${birthWeekDay}. ${byebye}";
"byebye"        = "Cheers!";

我们能够取得以下成果......

NSDictionary *variables = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:1986], @"birthYear", @"monday", @"birthWeekDay", nil];
NSString *finalString [self localizedStringFromTemplateString:@"born message" variables:variables];
NSLog(@"%@", finalString); // "I was born in 1986 on a monday. Cheers!"

如你所知,我也增加了一些额外功能。 首先,任何已发现的变量(${byebye},以我为例)都将被本地化,并附在结果之后。 我之所以这样做,是因为我在申请书中装上了超文本文件,并且通过地方化方法操作(在这样做的时候,我在创建扫描仪时不会把所显示的投入本地化)。 此外,我还补充了在除<代码>NSString外的其他情况下发送物体的能力,以便具有某种额外的灵活性。

该法典可能只字不提最佳表现或预言,但它在工作上没有任何明显的业绩影响。





相关问题
Code sign Error

I have created a new iPhone application.I have two mach machines. I have created the certificate for running application in iPhone in one mac. Can I use the other mac for running the application in ...

ABPersonViewController Usage for displaying contact

Created a View based Project and added a contact to the AddressBook using ABAddressBookRef,ABRecordRef now i wanted to display the added contact ABPersonViewController is the method but how to use in ...

将音频Clips从Peter改为服务器

我不禁要问,那里是否有任何实例表明从Peit向服务器发送音响。 I m不关心电话或SIP风格的解决办法,只是一个简单的袖珍流程......

• 如何将搜查线重新定位?

我正试图把图像放在搜索条左边。 但是,问题始于这里,搜索条线不能重新布署。

热门标签