mirror of
https://github.com/Ranchero-Software/NetNewsWire
synced 2025-08-12 06:26:36 +00:00
71 lines
2.5 KiB
Markdown
71 lines
2.5 KiB
Markdown
# Localization
|
|
|
|
NetNewsWire is an Internationalized and Localized app.
|
|
|
|
## Internationalization
|
|
|
|
`Internationalized` means that, at code-level, we don't use locale-dependent strings. Instead, in code we use a key-based approach. Generally, this takes the form of:
|
|
|
|
`UIKit` or `AppKit` — using `NSLocalizedString`:
|
|
|
|
```swift
|
|
let messageFormat = NSLocalizedString("alert.title.open-articles-in-browser.%ld", comment: "Are you sure you want to open %ld articles in your browser?")
|
|
alert.messageText = String.localizedStringWithFormat(messageFormat, urlStrings.count)
|
|
```
|
|
|
|
or, in `SwiftUI` — using the `Text` struct:
|
|
|
|
```swift
|
|
Text("alert.title.remove-account.\(viewModel.accountToDelete?.nameForDisplay ?? "")", comment: "Are you sure you want to remove “%@“?")
|
|
```
|
|
|
|
### Key Format
|
|
|
|
All keys are lower cased and follow the `dot.separated` UI element name -> `hyphen-separated` string descriptor -> `dot.separated` variable list format, e.g.:
|
|
|
|
```
|
|
alert.title.open-articles-in-browser.%ld
|
|
button.title.close
|
|
```
|
|
|
|
### Comments
|
|
|
|
Whether using `NSLocalizedString` or `Text`, a `comment` must be provided. This will generally be a reference to the string in English. However, where a key contains multiple variables, the ordering of the variables must be specified in the comment.
|
|
|
|
|
|
## Localization
|
|
|
|
All of NetNewsWire's strings in code are localized in external resources — `.strings` or `.stringsdict`. Each target has its own `Localizable.strings` (and, where necessary, `.stringsdict`) files. All Storyboards are also localized.
|
|
|
|
### Adding New Strings
|
|
|
|
If you are developing a new feature that introduces new strings to the code base, follow these general guidelines:
|
|
|
|
- Check if there is an existing string in `Localizable.strings` that meets your needs. If there is, use that.
|
|
- If there isn't:
|
|
- Add your string in code following the key and comment rules above
|
|
- Run `Export Localizations`
|
|
- Open the `en.xcloc` file and provide the new translations.
|
|
- Save the `en.xcloc` file.
|
|
- Run `Import Localizations`
|
|
- Select `en.xcloc` and Import.
|
|
|
|
### Updating Existing Translations
|
|
|
|
Update the Development Language translation first:
|
|
|
|
- Run `Export Localizations`
|
|
- Open the `en.xcloc` file and provide the new translations.
|
|
- Save the `en.xcloc` file.
|
|
- Run `Import Localizations`
|
|
- Select `en.xcloc` and Import.
|
|
|
|
Then update other lanaguages:
|
|
|
|
- Run `Export Localizations`
|
|
- Open the `en-GB.xcloc` file and provide the new translations.
|
|
- Save the `en-GB.xcloc` file.
|
|
- Run `Import Localizations`
|
|
- Select `en-GB.xcloc` and Import.
|
|
|