1 line
6.1 KiB
Plaintext
1 line
6.1 KiB
Plaintext
{"version":3,"file":"Locales.js","sourceRoot":"","sources":["../../src/ios/Locales.ts"],"names":[],"mappings":"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","sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport JsonFile from '@expo/json-file';\nimport * as fs from 'fs-extra';\nimport { join } from 'path';\nimport { XcodeProject } from 'xcode';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withXcodeProject } from '../plugins/ios-plugins';\nimport * as WarningAggregator from '../utils/warnings';\nimport { addResourceFileToGroup, ensureGroupRecursively, getProjectName } from './utils/Xcodeproj';\n\ntype LocaleJson = Record<string, string>;\ntype ResolvedLocalesJson = Record<string, LocaleJson>;\ntype ExpoConfigLocales = NonNullable<ExpoConfig['locales']>;\n\nexport const withLocales: ConfigPlugin = config => {\n return withXcodeProject(config, async config => {\n config.modResults = await setLocalesAsync(config, {\n projectRoot: config.modRequest.projectRoot,\n project: config.modResults,\n });\n return config;\n });\n};\n\nexport function getLocales(\n config: Pick<ExpoConfig, 'locales'>\n): Record<string, string | LocaleJson> | null {\n return config.locales ?? null;\n}\n\nexport async function setLocalesAsync(\n config: Pick<ExpoConfig, 'locales'>,\n { projectRoot, project }: { projectRoot: string; project: XcodeProject }\n): Promise<XcodeProject> {\n const locales = getLocales(config);\n if (!locales) {\n return project;\n }\n // possibly validate CFBundleAllowMixedLocalizations is enabled\n const localesMap = await getResolvedLocalesAsync(projectRoot, locales);\n\n const projectName = getProjectName(projectRoot);\n const supportingDirectory = join(projectRoot, 'ios', projectName, 'Supporting');\n\n // TODO: Should we delete all before running? Revisit after we land on a lock file.\n const stringName = 'InfoPlist.strings';\n\n for (const [lang, localizationObj] of Object.entries(localesMap)) {\n const dir = join(supportingDirectory, `${lang}.lproj`);\n await fs.ensureDir(dir);\n const strings = join(dir, stringName);\n const buffer = [];\n for (const [plistKey, localVersion] of Object.entries(localizationObj)) {\n buffer.push(`${plistKey} = \"${localVersion}\";`);\n }\n // Write the file to the file system.\n await fs.writeFile(strings, buffer.join('\\n'));\n\n // deep find the correct folder\n const group = ensureGroupRecursively(project, `${projectName}/Supporting/${lang}.lproj`);\n\n // Ensure the file doesn't already exist\n if (!group?.children.some(({ comment }) => comment === stringName)) {\n // Only write the file if it doesn't already exist.\n project = addResourceFileToGroup({\n filepath: strings,\n groupName: `${projectName}/Supporting/${lang}.lproj`,\n project,\n isBuildFile: true,\n });\n }\n }\n\n return project;\n}\n\nexport async function getResolvedLocalesAsync(\n projectRoot: string,\n input: ExpoConfigLocales\n): Promise<ResolvedLocalesJson> {\n const locales: ResolvedLocalesJson = {};\n for (const [lang, localeJsonPath] of Object.entries(input)) {\n if (typeof localeJsonPath === 'string') {\n try {\n locales[lang] = await JsonFile.readAsync(join(projectRoot, localeJsonPath));\n } catch (e) {\n // Add a warning when a json file cannot be parsed.\n WarningAggregator.addWarningIOS(\n `locales-${lang}`,\n `Failed to parse JSON of locale file for language: ${lang}`,\n 'https://docs.expo.io/distribution/app-stores/#localizing-your-ios-app'\n );\n }\n } else {\n // In the off chance that someone defined the locales json in the config, pass it directly to the object.\n // We do this to make the types more elegant.\n locales[lang] = localeJsonPath;\n }\n }\n\n return locales;\n}\n"]} |