Localized
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)
Table of Contents
Installation
- Open your Swift package in GNOME Builder, Xcode, or any other IDE.
- Open the
Package.swiftfile. - Into the
Packageinitializer, underdependencies, paste:
.package(url: "https://github.com/AparokshaUI/Localized", from: "0.1.0")
Usage
Definition
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"]
)
Use the Swift macro alternatively
If you don't want to have a separate Localized.yml resource, you can use the
YML syntax directly in your Swift code using a Swift macro.
Leave out the resources and plugins lines in the target definition, and
instead of creating a Localized.yml file, use the following macro in a Swift file.
#localized(default: "en", yml: """
export:
en: Export Document
de: Exportiere das Dokument
send(message, name):
en: Send (message) to (name).
de: Sende (message) to (name).
""")
You cannot have a defaultLanguage set in the YML, instead, use the macro parameter.
Usage
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")
Thanks
Dependencies
- Swift Syntax licensed under the Apache 2.0 license
- Yams licensed under the MIT license
- Swift Macro Toolkit licensed under the Apache 2.0 license
Other Thanks
- The contributors
- SwiftLint for checking whether code style conventions are violated
- The programming language Swift
- SourceDocs used for generating the docs