-
Notifications
You must be signed in to change notification settings - Fork 3k
How to add and modify Strings
For documentation on how the string import and export is done, please see this wiki page.
This file contains all the strings which gets localized for Firefox iOS. To preserve a clean structure of this string file, we should organize them alphabetically, according to specific screens or feature, on that screen. Each string should be under a struct giving a clear indication as to where it is being used. In this case we will prefer verbosity for the sake of accuracy, over brevity. Sub structs may, and should, also be used to separate functionality where it makes sense, but efforts should be made to keep structs two levels deep unless there are good reasons for doing otherwise. As we continue to update strings, old strings may be present at the bottom of this file without this specific structure, which will be updated in due time.
Note that strings shouldn't be reused in multiple places in the application. Depending on the Locale we can't guarantee one string will be translated the same even if its value is the same.
- Create or find the proper
struct
to add those strings in. If there's nostruct
that fits in, create one related to the feature or section this string will be under following the guidelines explained above. - Create the new
MZLocalizedString
under thisstruct
making sure it follows the documentation. Particularly make sure that:- The
key
has a clear explicit name following the structure of where it is located, ended with the version the string was included in. This is to ensure that we can easily modify that string if needed later on, as well as monitoring string import PRs easily. - The
tableName
is defined and not nil. - The
value
is defined and not nil. - The
comment
follows the l10n guidelines.
- The
- Once all new strings are added, open a PR on Firefox for iOS.
- Once merged, the new strings will be exported automatically to the Firefox l10n repository through the next automated Github action.
Any new string should have the same structure as the following example.
public static let TurnOnNotificationsTitle = MZLocalizedString(
key: "Settings.Notifications.TurnOnNotificationsTitle.v112",
tableName: "Settings",
value: "Turn on Notifications",
comment: "This is the title informing the user needs to turn on notifications in iOS Settings."
)
The following applies only to strings you modify that were already exported to the l10n repository. If they weren't exported you can modify the
value
only (please check with the l10n team to confirm it wasn't exported).
Modifying a string means we need to modify at least two part of the MZLocalizedString
, the key
and the value
. Sometimes the comment will also need to be adjusted, so please make ensure the comment still make sense following the string update. When modifying a string, we will create a new version of that string in the same struct
, making sure to keep the old version of that string alive until the version it was last used in is released on the App Store.
- Create a new
MZLocalizedString
below the old version of this string, modifying itskey
andvalue
. You cannot modify thevalue
only, since we need a newkey
for the string to be exported. - Modify the older string version by adding the
lastUsedInVersion
property, and modifying its name to avoid conflict in our strings file.
Here's an example of what the previously exemplified added strings would look like if we were to modify it.
public static let TurnOnNotificationsTitleNotUsed = MZLocalizedString(
key: "Settings.Notifications.TurnOnNotificationsTitle.v112",
tableName: "Settings",
value: "Turn on Notifications",
comment: "This is the title informing the user needs to turn on notifications in iOS Settings.",
lastUsedInVersion: 118
)
public static let TurnOnNotificationsTitle = MZLocalizedString(
key: "Settings.Notifications.TurnOnNotificationsTitle.v118",
tableName: "Settings",
value: "Turn on Notifications Feature",
comment: "This is the title informing the user needs to turn on notifications feature in iOS Settings."
)
So the string TurnOnNotificationsTitleNotUsed
is not used in our code anymore, but this string will still live in the l10n repository until we don't need it anymore. We will remove this unused string once the version 118 is released on the App Store.
Similar as to how we modify strings, we need to keep strings that are removed in our project until the last version this string was used in gets released on the App Store.
- Add the
lastUsedInVersion
on the string that is not used anymore in the project.
If we remove the code where this string is used in v118, then we would add the string lastUsedInVersion
as such.
public static let TurnOnNotificationsTitle = MZLocalizedString(
key: "Settings.Notifications.TurnOnNotificationsTitle.v112",
tableName: "Settings",
value: "Turn on Notifications",
comment: "This is the title informing the user needs to turn on notifications in iOS Settings.",
lastUsedInVersion: 118
)
So the string TurnOnNotificationsTitle
is not used in our code anymore, but this string will still live in the l10n repository until we don't need it anymore. We will remove this unused string once the version 118 is released on the App Store.
If you followed the documentation above, you'll have noted that we don't remove strings entirely from the project until the version this string was last used in is released on the App Store. This means, once that particular release is made we need to create a PR which will remove the old unused string from our main
branch. This PR is done manually for now once the tag is created for this release. Dot releases shouldn't have any effect on string removal.