Since the file InfoPlist.strings
is not just 1 single file, but is spread across multiple folders and files like so: en.lproj/InfoPlist.strings
, de.lproj/InfoPlist.strings
. It is a bit trickier to use it for different schemes.
Here is how I localized the name of the Today Widget shared by 2 flavors / schemes of the same target. For demonstration purposes, I used 2 "flavors": TA
and EC
. I will refer to them in this answer.
Step 1:
- Create folders for each "flavor" or scheme in the target directory. Name each folder exactly as they are named in your
user-defined
scheme. Copy there the InfoPlist.strings
file.
This step might be tricky. What I did: I created a new folder in XCode and named it TA
. I dragged & dropped there my InfoPlist.strings
file, then browsed to that folder in Finder, duplicated that folder, and renamed it to EC
. Then, I drag & dropped it into XCode. Don't add it to any target. It is not needed.
Step 2:
- Remove the
InfoPlist.strings
from the target's Copy Bundle Resources
build phase:
Click on your project name -> Select the widget's target (ex. Today Widget) -> go to Build Phases
-> open the Copy Bundle Resources
-> find the file InfoPlist.strings
, select it and press Delete
button
Step 3:
- Add a new Run Script to copy the correct
InfoPlist.strings
file
Here is the script I came up with which will copy the correct file, based on the current flavor/scheme your app is running now:
for lng in en de es fr it nl pt-PT tr
do
INFO_PLIST_FILE="${PROJECT_DIR}/TodayMatchesWidget/${APP_FLAVOR}/${lng}.lproj/InfoPlist.strings"
BUILD_APP_DIR="${BUILT_PRODUCTS_DIR}/${FULL_PRODUCT_NAME}"
FILE_LOCATION="${BUILD_APP_DIR}/${lng}.lproj/InfoPlist.strings"
cp "${INFO_PLIST_FILE}" "${FILE_LOCATION}"
done
This is a for loop, which iterates through all my localization
languages. You need to put there only the languages that you support.
Each language abbreviation should be separated by a space, nothing
else.
The only variable which you need to take care of is APP_FLAVOR
,
which in my case is a user-defined setting inside the project's Build Settings
, and in my case will be either TA
or EC
.
Here is the final folder structure in Today Widget's folder:
P.S:
I assume you already have a InfoPlist.strings
file in the target's directory. If not, just add a new Strings File
and call it InfoPlist.strings
and add this value inside:
CFBundleDisplayName = "My Localized Widget";
I hope it helps anyone out there!