Swiftpack.co - yonaskolb/Stringly as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
yonaskolb/Stringly
Manage and generate localization files
.package(url: "https://github.com/yonaskolb/Stringly.git", from: "0.8.0")

Stringly

Stringly generates type safe localization files from a source yaml,json, or toml file. At the moment only outputs for Apple platforms are supported, but a generator for Android's R.strings is easy to add

  • Multi-language support
  • Named placeholders
  • Plural support
  • ✅ Compile safe Swift accessors

Usage

See help

stringly help

To generate all files in all languages

stringly generate Strings.yml

To generate a single file in a certain langage

stringly generate-file Strings.yml Strings.strings --language de

Installing

Make sure Xcode 11 is installed first.

Mint

mint install yonaskolb/stringly

Swift Package Manager

Use as CLI

git clone https://github.com/yonaskolb/Stringly.git
cd Stringly
swift run stringly

Use as dependency

Add the following to your Package.swift file's dependencies:

.package(url: "https://github.com/yonaskolb/Stringly.git", from: "0.7.0"),

And then import wherever needed: import StringlyKit

Example

Given a source Strings.yml:

auth: # grouping of strings
  loginButton: Log In # If you don't specify a language it defaults to a base language
  emailTitle:
    en: Email # specifying a language
  passwordTitle: 
    en: Password
    de: Passwort # multiple languages
  error: # infinitely nested groups
    wrongEmailPassword: Incorrect email/password combination
home:
  title: Hello {name} # this is a placeholder. Without a type defaults to %@ on apple platforms
  postCount: "Total posts: {postCount:d}" # the placeholder now has a type %d
  day: "Day: {}" # an unnamed placeholder
  escaped: Text with escaped \{braces} # escape braces in text by using \{
  articles: # this is a pluralized string
    en: You have {articleCount:d} # placeholder will be replaced with pluralization
    en.articleCount: # supports pluralizing multiple placeholders in a single string
      none: no articles
      one: one article
      other: {articleCount:d} articles

This generates .swift, .strings, and .stringsdict files for multiple languages.

The Swift file then allows usage like this:

errorLabel.text = Strings.auth.error.wrongEmailPassword
welcomeLabel.text = Strings.home.title(name: "John")
postsLabel.text = Strings.home.postCount(postCount: 10)
day.text = Strings.home.day("Monday")
articleLabel.text = Strings.home.articles(articleCount: 4)

Future Directions

  • Comments and other data for keys
  • Generate files for other platforms like Android R.string file or translation specific files
  • Importing of translation files

GitHub

link
Stars: 14
Last commit: 2 weeks ago

Ad: Job Offers

iOS Software Engineer @ Perry Street Software
Perry Street Software is Jack’d and SCRUFF. We are two of the world’s largest gay, bi, trans and queer social dating apps on iOS and Android. Our brands reach more than 20 million members worldwide so members can connect, meet and express themselves on a platform that prioritizes privacy and security. We invest heavily into SwiftUI and using Swift Packages to modularize the codebase.

Submit a free job ad (while I'm testing this). The analytics numbers for this website are here.

Release Notes

0.8.0
2 weeks ago
  • Add Strings.overrides which can be used for things like A/B tests, remote values, or any other customisation

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics