Ios 使用不同元素计数进行本地化

Ios 使用不同元素计数进行本地化,ios,nslocalizedstring,localizable.strings,Ios,Nslocalizedstring,Localizable.strings,当我的用户打开我的应用程序时,我想向他们表示热烈的欢迎。所以我想用不同的句子来随机展示它们。每种语言的邮件数量不同 解决这个问题的首选方法是什么 我的想法是: 将计数也保存在strings文件->不喜欢这个想法,因为这必须保持 “welcomeCount”=“5” “welcomeN”=“你好…” 分开消息->不喜欢这个想法,因为你必须注意这一点 “welcomeMessages”=“你好…| MessageN” 有没有人想用优雅的方式解决这个问题?为了最大限度地减少维护,您可以使用二进制搜索找

当我的用户打开我的应用程序时,我想向他们表示热烈的欢迎。所以我想用不同的句子来随机展示它们。每种语言的邮件数量不同

解决这个问题的首选方法是什么

我的想法是:

  • 将计数也保存在strings文件->不喜欢这个想法,因为这必须保持
    “welcomeCount”=“5”
    
    “welcomeN”=“你好…”

  • 分开消息->不喜欢这个想法,因为你必须注意这一点
    “welcomeMessages”=“你好…| MessageN”


  • 有没有人想用优雅的方式解决这个问题?

    为了最大限度地减少维护,您可以使用二进制搜索找出有多少变体可用。假设在
    可本地化的.strings中有以下内容:

    "Welcome_0" = "Hello";
    "Welcome_1" = "Hi";
    "Welcome_2" = "What up";
    "Welcome_3" = "Howdy";
    
    您可以使用以下方法查找计数:

    int lower = 0, upper = 10;
    while (lower < upper - 1) {
        int mid = (lower + upper) / 2;
        NSString *key = [NSString stringWithFormat:@"Welcome_%i", mid];
        BOOL isAvailable = ![key isEqualToString:NSLocalizedString(key, @"")];
        if (isAvailable) lower = mid;
        else upper = mid;
    }
    

    您可以将欢迎消息存储在本地化的属性列表中

    • 在Xcode中,转到文件->新建->文件
    • 选择资源->属性列表模板,例如“Welcome.plist”作为文件名
    • 在Xcode中选择Welcome.plist并将根对象的类型从Dictionary更改为Array
    • 选择Welcome.plist,转到文件检查器并单击“使本地化…”。然后选择Welcome.plist所需的本地化,例如英语和德语
    • 现在,每种语言都有一个Welcome.plist,可以单独编辑
    • 要添加字符串,请单击属性列表中的“+”符号
    在您的程序中,您可以使用

    NSString *path = [[NSBundle mainBundle] pathForResource:@"Welcome" ofType:@"plist"];
    NSArray *messages = [NSArray arrayWithContentsOfFile:path];
    
    这将根据用户的语言将“右”列表正确加载到数组
    消息中。你可以选择一个随机消息与

    int idx = arc4random_uniform([messages count]);
    NSString *msg = [messages objectAtIndex:idx];
    

    当然我希望有类似于
    “welcomeMessages”=[“a”、“b”、“n”]通过NSLocalizedString(随机)或NSLocalizedArray获取值。。。到目前为止,谢谢您的回答。:)非常感谢。我真的很喜欢这个解决方案!
    
    int idx = arc4random_uniform([messages count]);
    NSString *msg = [messages objectAtIndex:idx];