Important
This project has moved. You can find it here.
The decision is based on this article.
Thanks to No GitHub for the badge used below.
Localized provides a Swift package plugin for localizing cross-platform Swift code.
Use YML syntax for defining available phrases:
hello(name):
en: Hello, (name)!
de: Hallo, (name)!
fr: Salut, (name)!
house:
en: House
de: Haus
fr: Maison
houses(count):
en(count == "1"): There is one house.
en: There are (count) houses.
de(count == "1"): Es gibt ein Haus.
de: Es gibt (count) Häuser.
Then, access the localized strings safely in your code:
// Use the system language
print(Loc.hello(name: "Peter"))
print(Loc.house)
print(Loc.houses(count: 1))
// Access the translation for a specific language
print(Localized.hello(name: "Peter").en)
print(Localized.house.fr)
- Open your Swift package in GNOME Builder, Xcode, or any other IDE.
- Open the
Package.swift
file. - Into the
Package
initializer, underdependencies
, paste:
.package(url: "https://github.com/AparokshaUI/Localized", from: "0.1.0")
Define the available phrases in a file called Localized.yml
.
default: en
export:
en: Export Document
de: Exportiere das Dokument
send(message, name):
en(name == ""): Send (message).
en: Send (message) to (name).
de: Sende (message) to (name).
As you can see, you can add parameters using brackets after the key, and conditions using brackets after the language (e.g. for pluralization).
The line default: en
sets English as the fallback language.
Then, add the Localized
dependency, the plugin and the Localized.yml
resource
to the target in the Package.swift
file.
.executableTarget(
name: "PluginTests",
dependencies: ["Localized"],
resources: [.process("Localized.yml")],
plugins: ["GenerateLocalized"]
)
In most cases, you want to get the translated string in the system language. This can be accomplished using the following syntax.
let export = Loc.export
let send = Loc.send(message: "Hello", name: "Peter")
You can access a specific language as well.
let export = Localized.export.en
let send = Localized.send(message: "Hallo", name: "Peter").de
If you want to get the translation for a specific language code, use the following syntax. This function will return the translation for the default language if there's no translation for the prefix of that code available.
let export = Localized.export.string(for: "de-CH")
- Yams licensed under the MIT license
- The contributors
- SwiftLint for checking whether code style conventions are violated
- The programming language Swift
- SourceDocs used for generating the docs