Internationalization 使SKAction playSoundFileNamed多语言就绪

Internationalization 使SKAction playSoundFileNamed多语言就绪,internationalization,sprite-kit,xcode6,avaudioplayer,Internationalization,Sprite Kit,Xcode6,Avaudioplayer,使用精灵套件播放声音很容易: SKAction *readText = [SKAction playSoundFileNamed:@"soundfile.mp3" waitForCompletion:YES]; 但是,我如何将这个声音国际化,所以当语言更改为西班牙语时,它采用西班牙语版本,英语或其他语言 我将文件soundifle.mp3导入Xcode,并选择本地化、base、英语和西班牙语;然后将每个版本放在相应的文件夹中。不幸的是,模拟器总是运行相同的文件。我错过了什么 如果我使用: NS

使用精灵套件播放声音很容易:

SKAction *readText = [SKAction playSoundFileNamed:@"soundfile.mp3" waitForCompletion:YES];
但是,我如何将这个声音国际化,所以当语言更改为西班牙语时,它采用西班牙语版本,英语或其他语言

我将文件soundifle.mp3导入Xcode,并选择本地化、base、英语和西班牙语;然后将每个版本放在相应的文件夹中。不幸的是,模拟器总是运行相同的文件。我错过了什么

如果我使用:

NSBundle *bundle = [NSBundle mainBundle];
NSString * sndPath = [bundle pathForResource:@"soundfile" ofType:@"mp3"];
NSLog(@"Returning soundPath:%@",sndPath);
SKAction *readText = [SKAction playSoundFileNamed:sndPath waitForCompletion:YES];
当我使用该方法时,我得到: 返回声音路径:/Users/user/Library/Application Support/iPhone Simulator/7.1/Applications/3f151ad-856B-4F78-B504-784A8E3E7171/Appname.app/es.lproj/soundfile.mp3

*由于未捕获的异常“缺少资源”而终止应用程序,原因是:“在主捆绑包中找不到资源/用户/赫克托/库/应用程序支持/iPhone模拟器/7.1/Applications/3F1151AD-856B-4F78-B504-784A8E3E7171/Appname.app/ca.lproj/soundfile.mp3”
*第一次抛出调用堆栈:

我希望它能以这种方式工作,它只是从正确的语言文件夹中选择文件。假设您已经检查了内置应用程序的声音是否真的被复制到了文件夹中,并验证了您使用了正确的语言文件夹名称等,我只能帮助您解决这个问题:

根据文档,您可以将名为waitForCompletion:的文件路径传递给+PlaySoundFileName:。因此,我只需要使用常规的NSBundle pathForSoundResource:方法see NSSound.h为当前语言生成正确的文件路径,然后传入该路径,而不仅仅是一个简短的名称。您可以将这样的方法定义为SKAction上的一个类别以使其更简单,例如+SKAction*tor_PlayLocalizedSoundFileName:NSString*soundFile waitForCompletion:BOOLwait


PS-还有一些东西需要测试:你有两个声音副本吗?也就是说,一个在参考资料中,另一个在参考资料/English.lproj中,或者是其他什么?如果没有,您是否检查过如果不将声音副本放入基本本地化中会发生什么情况?

我尝试过,但似乎iOS的NSBundle没有pathForSoundResource:方法。我如何在iOS编程中做到这一点?总是有通用的pathForResource:ofType:我用额外的信息编辑了这个问题。不幸的是,parthForResource找到了该文件,但SKAction找不到它!