如何在不使用 Xcode 的情况下向 iOS flutter 应用程序添加语言环境

问题描述 投票:0回答:1

Flutter i18n 指南指出,iOS 应用程序应在 Info.plist

 文件中定义支持的语言环境。然后,该指南继续给出据我所知适用于 Xcode GUI 的说明。然而,我没有 Xcode,甚至没有 Mac,我计划使用 GitHub actions 来生成 iOS 版本。我如何手动执行记录的操作?

通常,iOS 应用程序在内置于应用程序包中的 Info.plist 文件中定义关键应用程序元数据,包括支持的区域设置。要配置您的应用程序支持的区域设置,请使用以下说明:

    打开项目的 ios/Runner.xcworkspace Xcode 文件。
  1. 在项目导航器中,打开 Runner 项目的 Runner 文件夹下的 Info.plist 文件。
  2. 选择信息属性列表项。然后从编辑器菜单中选择添加项目,然后从弹出菜单中选择本地化。
  3. 选择并展开新创建的本地化项。对于您的应用程序支持的每个区域设置,添加一个新项目并从“值”字段的弹出菜单中选择要添加的区域设置。此列表应与supportedLocales参数中列出的语言一致。
  4. 添加所有支持的区域设置后,保存文件。
ios flutter xcode localization internationalization
1个回答
0
投票
我设法在不使用 Xcode 的情况下添加本地化。我就是这样做的。

    我向我的
  1. Info.plist
     添加了区域设置列表(在 
    <dict>
     内):
<key>CFBundleLocalizations</key> <array> <string>en</string> <string>it</string> </array>

  1. 我在

    InfoPlist.strings

     文件夹中创建了一个名为 
    Runner
     的空文件。您可以在此处放置默认字符串;我没有。

  2. 我创建了文件夹

    Runner/en.lproj

    Runner/it.lproj
    。在每个文件夹中,我创建了另一个 
    InfoPlist.strings
     文件。

  3. 我用本地化字符串填充了这些

    InfoPlist.strings

    ,例如:

CFBundleDisplayName="Guidi Tu"; NSMotionUsageDescription="Due minigiochi usano l'accelerometro.";

    我找到了名为
  1. project.pbxproj
     的文件。棘手的部分现在开始。选择随机 ID:两个用于 
    Runner/InfoPlist.strings
    ,一个用于每个本地化 
    Runner/*.jproj/InfoPlist.strings
     文件。
我选择:

  • 899999999999999999900000
    999999999999999999900000
     用于通用文件;
  • 999999999999999999900001
     用于英语本地化;
  • 999999999999999999900002
     用于意大利语本地化。
通用文件需要两个 ID,因为它在

project.pbxproj

 的不同部分中既作为“构建文件”又作为“文件引用”链接。
ID 的长度为 24 个字节,您可以对 24 个数字中的每一个使用 [0-9A-F],只要它们是新的且唯一的就可以了。

    我在
  1. PXBuildFile
    project.pbxproj
    部分声明了通用文件:
899999999999999999900000 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 999999999999999999900000 /* InfoPlist.strings */; };

    我在
  1. PBXFileReference
    部分声明了本地化文件:
999999999999999999900001 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; }; 999999999999999999900002 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = "<group>"; };

    我在
  1. fileRef
     组中的 
    PBXGroup
     部分中添加了对通用文件的引用(使用 
    Runner
    !):
97C146F01CF9000F007C117D /* Runner */ = { isa = PBXGroup; children = ( 97C146FA1CF9000F007C117D /* Main.storyboard */, 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 97C147021CF9000F007C117D /* Info.plist */, 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, 999999999999999999900000 /* InfoPlist.strings */, ); path = Runner; sourceTree = "<group>"; };

    我在
  1. PBXResourcesBuildPhase
     构建阶段中的 
    Resources
     部分中添加了对通用文件的引用(使用另一个 ID!):
97C146EC1CF9000F007C117D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 899999999999999999900000 /* InfoPlist.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; };

    我在
  1. fileRef
     部分中为通用文件创建了一个新的变体组(使用 
    PBXResourcesBuildPhase
    ),将所有本地化文件设置为变体:
999999999999999999900000 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( 999999999999999999900001 /* en */, 999999999999999999900002 /* it */, ); name = InfoPlist.strings; sourceTree = "<group>"; };
就是这样。现在可以用了。

如果您想重现该过程,请仔细检查每个步骤。

© www.soinside.com 2019 - 2024. All rights reserved.