This project has moved to https://git.aparoksha.dev/aparoksha/localized - Easy-to-use, safe and cross-platform library for localizing Swift code
[!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)
Package.swift
file.Package
initializer, under dependencies
, 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")