0

我一直在使用图像本地化,我想使用按需资源的概念。我想实现这一点,如果用户选择英语,应用程序将显示与英语相关的图像,此时我只想下载英文图像,而不是使用按需资源下载其他语言图像。这是我尝试过的:

    NSSet *tags = [[NSSet alloc] initWithObjects:@"english", @"france", @"italy", nil];
    NSLog(@"tags:%@", tags);

    NSBundleResourceRequest *request = [[NSBundleResourceRequest alloc] initWithTags:tags];

    [request conditionallyBeginAccessingResourcesWithCompletionHandler:^(BOOL resourcesAvailable) {
        if (resourcesAvailable) {

            [self.img setImage:[UIImage imageNamed:NSLocalizedString(@"imageName", nil)]];
        }
        else {

            [request beginAccessingResourcesWithCompletionHandler:^(NSError * _Nullable error) {

                [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                    if(error == nil) {


                        [self.img setImage:[UIImage imageNamed:NSLocalizedString(@"imageName", nil)]];

                    }
                    else {

                        NSLog(@"the error is: %@", error);
                    }

                }];


            }];
        }

    }];
    [request endAccessingResources];

当我使用它时,所有资源都会在使用英语作为我的语言时下载。如果有人可以帮助我,那将是很大的帮助。

4

2 回答 2

0

您应该检查用户的当前语言:

NSString* language = [[NSLocale preferredLanguages] objectAtIndex:0];

然后选择你要下载的标签:(现在默认是英文)

NSString *tagString = @"english";

if( [language isEqualToString:@"fr"] ){
    tagString = @"france";
} else if( [language isEqualToString:@"it"] ){
    tagString = @"italy";
}

NSSet *tags = [[NSSet alloc] initWithObjects:tagString, nil];
于 2015-07-31T12:20:59.900 回答
0

您正在请求标签englishfranceitaly,因此您将获得所有标记english的资源、标记的所有资源france和标记的所有资源italy

如果您只想为一个标签请求资源,请在您的NSBundleResourceRequest.

于 2015-07-30T18:17:30.830 回答