Skip to content
This repository has been archived by the owner on Oct 17, 2024. It is now read-only.
/ Localized Public archive

This project has moved to https://git.aparoksha.dev/aparoksha/localized - Easy-to-use, safe and cross-platform library for localizing Swift code

License

Notifications You must be signed in to change notification settings

AparokshaUI/Localized

Repository files navigation

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.

No GitHub

Localized Icon

Localized

GitHub · Contributor Docs

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

  1. Open your Swift package in GNOME Builder, Xcode, or any other IDE.
  2. Open the Package.swift file.
  3. Into the Package initializer, under dependencies, 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"]
)

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

Other Thanks