Skip to content

Swift toolkit for reading, writing, and translating Xcode .xcstrings string catalogs with provider-agnostic and LLM-powered workflows.

Notifications You must be signed in to change notification settings

atacan/StringCatalogKit

Repository files navigation

StringCatalogKit

StringCatalogKit provides model types for .xcstrings files and a provider-agnostic translation engine.

Products

  • StringCatalog: Codable model types for Xcode string catalogs.
  • CatalogTranslation: Translation engine + file planning/apply API.
  • CatalogTranslationLLM: LLM adapter with customizable prompt templates.

Quick Start

import CatalogTranslation
import StringCatalog

struct MyTranslator: CatalogTextTranslator {
    func translate(_ request: TranslationRequest) async throws -> String {
        // Your API call here (OpenAI, DeepL, custom service...)
        return "translated: \(request.text)"
    }
}

let translator = MyTranslator()
let engine = CatalogTranslationEngine(translator: translator)

let catalog = try StringCatalog(contentsOf: URL(fileURLWithPath: "/path/Localizable.xcstrings"))
let result = try await engine.translateCatalog(catalog, to: .german)

print(result.report.stats)

File Workflow

let service = CatalogFileTranslationService(engine: engine)
let plan = try await service.plan(
    in: [URL(fileURLWithPath: "/path/to/project")],
    targetLanguages: [.german, .french]
)

// Dry run first:
print(plan.items.filter(\.changed).count)

// Explicitly apply:
let applyReport = try service.apply(plan)
print(applyReport.writtenFiles)

LLM Usage

CatalogTranslationLLM provides LLMTranslator, which adapts system/user prompts to any model provider:

import CatalogTranslation
import CatalogTranslationLLM

let translator = LLMTranslator { _, systemPrompt, userPrompt in
    // Call your LLM API here and return translated text.
    try await myLLMClient.complete(system: systemPrompt, user: userPrompt)
}

let engine = CatalogTranslationEngine(translator: translator)

For a full runnable example with OpenAI integration, see:

  • examples/README.md
  • examples/Sources/TranslateCatalogWithOpenAI/main.swift

About

Swift toolkit for reading, writing, and translating Xcode .xcstrings string catalogs with provider-agnostic and LLM-powered workflows.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published