iOS Facebook SDK本地化

我正在尝试更改FBLoginViewbutton中的文本,但到目前为止我还没有运气。 我试着从FacebookSDK阅读README并看看互联网。 我在项目本地化添加了2种语言部分,它创build了2个文件在每种语言的支持文件,但我试图改变那里的README (改变string值)的示例内容中的string,但即使我改变了英文文件,我总是得到默认loginstring。 然后,我尝试添加一些Bundle设置,并在那里更改一些文件,但没有运气。 有人能告诉我怎样才能实现改变Facebook的string一步一步? 谢谢

更新:

这里描述的方法不再适用于最新的Facebook SDK。 所以请参考@Erik van der Neut或@Ted给出的答案,并使用SDK附带的包FacebookSDKStrings.bundle进行string覆盖。


我发现到目前为止本地化/更改Facebookstring的唯一方法是在其常见问题解答中描述: https : //developers.facebook.com/docs/ios/troubleshooting/

我所做的就是从Facebook SDK附带的Scrumptious示例项目中复制文件FacebookSDKOverrides.bundle 。 这基本上只是一个包含(可以包含)不同的本地化文件夹的包。 如果要添加德语string, de.lproj在该包内创build一个de.lproj文件夹。 这个文件夹应该包含一个文件Localizable.strings

您可以在文件FacebookSDKResources.bundle.READMEfind所有可覆盖string的列表。 你可以在FacebookSDK文件夹中find它:

 FacebookSDK.framework/Resources/ 

或者在这里: https : //github.com/facebook/facebook-ios-sdk/blob/master/src/FacebookSDKResources.bundle.README

例如,要添加loginbutton文本的德语翻译,必须将以下内容添加到de.lproj中的Localizable.strings文件中:

 "FBLV:LogInButton" = "Einloggen"; 

作为最后一步,你必须确保Facebook知道这个包。 因此,您可以将以下内容添加到Info.plist中:

 <key>FacebookBundleName</key> <string>FacebookSDKOverrides</string> 

或者,如果您想要,也可以在代码中指定:

 [FBSettings setResourceBundleName:@"FacebookSDKOverrides"]; 

这工作对我来说,虽然我想使用我的主包进行覆盖,只是在我的正常的应用程序翻译中指定它们。 这对连接到翻译工具会更方便,因为您不需要翻译每种语言的多个文件。

截至Facebook SDK 4.9

如果您已经下载了Facebook SDK ,那么名为“ FacebookSDKStrings.bundle

  1. 将FacebookSDKStrings.bundle添加到您的项目
  2. 确保您启用基本内部化 ,如苹果文档中所述。

作为Flo所接受的答案的更新:

对于最新的Facebook SDK,Facebook消息(及其识别密钥)已经完全改变。 例如,“FBLV:LogInButton”键在最新的Fb SDK中不再有效。

因此,我的Facebookstring不再被本地化,直到我意识到这一点,并用https://github.com/facebook/facebook-ios-sdk中的最&#x65B0;FacebookSDKStrings.bundle (v4.2)replace了我所有的Facebook信息 – – 我只是删除了我的原始FacebookSDKOverrides.bundle并包含了我的项目中的整个包FacebookSDKStrings.bundle (包括其中的资源子文件夹),更新了我的项目.plist文件指向它,并与所有的Facebookstring再次本地化。

例如,默认的“login”button标签的消息如下所示:

 /* The long label for the FBSDKLoginButton when the user is currently logged out */ "LoginButton.LogInLong" = "Log in with Facebook"; 

幸运的是,Facebook的GitHub页面现在已经包含了很多语言的这些消息的翻译(在我的情况下,这意味着我不再需要运行这些翻译过去了)。