iOS Facebook SDK 本地化
Posted
技术标签:
【中文标题】iOS Facebook SDK 本地化【英文标题】:iOS Facebook SDK localization 【发布时间】:2014-03-18 10:38:04 【问题描述】:我正在尝试更改 FBLoginView
按钮中的文本,但到目前为止我还没有运气。我尝试从 FacebookSDK
阅读 README 并查看互联网。我在项目本地化部分添加了 2 种语言,它在每种语言的支持文件中创建了 2 个文件,但我尝试用 README 的示例内容更改其中的字符串(更改字符串值),但即使我更改了英语文件我总是得到默认的登录字符串。
然后我尝试添加一些 Bundle 设置并更改其中的一些文件,但也没有运气。有人可以告诉我如何逐步实现更改 facebook 字符串吗?谢谢
【问题讨论】:
【参考方案1】:更新:
此处描述的方法不再适用于最新的 Facebook SDK。所以请参考@Erik van der Neut 或@Ted 给出的答案,并使用SDK 附带的捆绑包FacebookSDKStrings.bundle 进行字符串覆盖。
到目前为止,我发现本地化/更改 Facebook 字符串的唯一方法在他们的常见问题解答中描述:https://developers.facebook.com/docs/ios/troubleshooting/
我所做的是从 Facebook SDK 附带的 Scrumptious 示例项目中复制文件 FacebookSDKOverrides.bundle
。这基本上只是一个包含(可以包含)不同本地化文件夹的包。如果要添加德语字符串,请在包中创建一个文件夹 de.lproj
。此文件夹应包含一个文件Localizable.strings
。
您可以在文件FacebookSDKResources.bundle.README
中找到所有可覆盖字符串的列表。您可以在 FacebookSDK 文件夹中找到它:
FacebookSDK.framework/Resources/
或在这里:https://github.com/facebook/facebook-ios-sdk/blob/master/src/FacebookSDKResources.bundle.README
要添加登录按钮文本的德语翻译,例如,您必须将以下内容添加到 de.lproj 中的文件 Localizable.strings 中:
"FBLV:LogInButton" = "Einloggen";
作为最后一步,您必须确保 Facebook 知道该捆绑包。因此,您可以将以下内容添加到您的 Info.plist:
<key>FacebookBundleName</key>
<string>FacebookSDKOverrides</string>
或者,如果您愿意,也可以在代码中指定:
[FBSettings setResourceBundleName:@"FacebookSDKOverrides"];
这对我有用,尽管我想使用我的主包进行覆盖,并在我的正常应用程序翻译中指定它们。这对于连接到翻译工具会更方便,因为您不需要为每种语言翻译多个文件。
【讨论】:
对于最新的 Fb SDK,Fb 消息密钥完全不同。有关详细信息,请参阅我刚刚发布的另一个答案。【参考方案2】:Facebook SDK 4.9
如果您已下载Facebook SDK,则有一个名为“FacebookSDKStrings.bundle”的包
-
将FacebookSDKStrings.bundle 添加到您的项目中
确保您按照 Apple 文档中的说明enable Base Internalization。
【讨论】:
确保您使用的是最新版本的 SDK。我遇到了“继续使用 Facebook”按钮的本地化问题。如您在此处看到的,此问题已在 4.24.0 上修复:developers.facebook.com/docs/ios/change-log-4x#4_24_0【参考方案3】:作为对来自 Flo 的已接受答案的更新:
对于最新的 Facebook SDK,Facebook 消息集(及其识别密钥)已完全改变。例如,“FBLV:LogInButton”键在最新的 Fb SDK 中不再有效。
因此,我的 Facebook 字符串不再本地化,直到我意识到这一点并将我所有的 Facebook 消息替换为来自 https://github.com/facebook/facebook-ios-sdk 的最新 FacebookSDKStrings.bundle
(v4.2) - 我只是删除了我原来的 FacebookSDKOverrides.bundle
并将整个捆绑包 FacebookSDKStrings.bundle
原样包含在我的项目中(包括其中的 Resources 子文件夹),更新了我的项目 .plist 文件以指向它,并且所有 Facebook 字符串都再次本地化。
例如,默认登录按钮标签的消息现在如下所示:
/* The long label for the FBSDKLoginButton when the user is currently logged out */
"LoginButton.LogInLong" = "Log in with Facebook";
幸运的是,Facebook 的 GitHub 页面现在已经包含了许多语言的这些消息的翻译(在我的情况下,这意味着我不再需要通过我的翻译运行这些消息)。
【讨论】:
updated my project .plist files to point to it
是什么意思?【参考方案4】:
我刚刚将“FacebookSDK.strings”中的所有字符串从您想要的语言文件夹(如 fr.lproj)复制到我的项目 Localizable.strings(法语)...这种方式对我有用...
【讨论】:
以上是关于iOS Facebook SDK 本地化的主要内容,如果未能解决你的问题,请参考以下文章
Facebook iOS-sdk 并发布本地 (UI)Image
Facebook SDK FBGraphUser 无法存储本地副本