Parlance 1.1.1

Parlance 1.1.1

测试已测试
Lang语言 SwiftSwift
执照 MIT
发布最后发布2017年2月
SwiftSwift版本3.0
SPM支持SPM

Rivukis维护。



Parlance 1.1.1

  • 作者
  • Brian Radebaugh

Parlance

Parlance是一个用于iOS应用本地化和复数的Swift框架。

指定语言和复数规则

  • 列出受支持的语言
  • 提供一个shared实例
  • 为给定的Locale选择要使用的语言
  • 为给定的IntLanguage选择要使用的复数类别

有关复数规则的参考资料见

复数规则按语言复数规则(注意:请使用基数类型)

示例

// Supported Languages
enum Language {
    case english
    case irish
}

final class ParlanceCoordinator: ParlanceCoordinatable {
    static let shared = ParlanceCoordinator()

    // Language to use for the given Locale
    func currentLanguage(for locale: Locale) -> Language {
        switch locale.languageCode {
        case "ga"?: return .irish
        default: return .english
        }
    }

    // Plural Category for the given Int and Language
    func category(for int: Int, language: Language) -> PluralCategory {
        switch language {
        case .english:
            switch int {
            case 1: return .one
            default: return .other
            }

        case .irish:
            switch int {
            case 1: return .one
            case 2: return .two
            case _ where int >= 3 && int <= 6: return .few
            case _ where int >= 7 && int <= 10: return .many
            default: return .other
            }
        }
    }
}

创建基础模块

  • 列出每个本地化字符串的键
  • 创建一个遵守BaseModule的类
  • 指定用于_ParlanceCoordinatable的类型
  • 将每个对t()的调用跳转到相应语言的SpecificParlance静态函数中的t()

示例

enum LogInParlanceKey {
    case signedInWelcomeMessage(name: String)
    case guestWelcomeMessage
}

class LogInParlance: BaseParlance {
    typealias _ParlanceCoordinator = ParlanceCoordinator

    func t(_ key: LogInParlanceKey) -> String {
        switch currentLanguage {
        case .english: return LogInParlance_en.t(key)
        case .irish: return LogInParlance_ga.t(key)
        }
    }
}

enum ShoppingCartParlanceKey {
    case numberOfItems(Int)
}

class ShoppingCartParlance: BaseParlance {
    typealias _ParlanceCoordinator = ParlanceCoordinator

    func t(_ key: ShoppingCartParlanceKey) -> String {
        switch currentLanguage {
        case .english: return en.t(key)
        case .irish: return ga.t(key)
        }
    }
}

创建特定模块

  • 列出语言的复数类别(每个语言一次)
  • 创建一个遵守SpecificModule的类
  • 指定用于_ParlanceCoordinatable的类型
  • 指定用于_PluralCategory的类型
  • 为给定的键提供正确的翻译**使用category(for:)为任何Int获取复数类别

示例

enum EnglishPluralCategory: String {
    case one
    case other
}

class LoginParlance_EN: SpecificModule {
    typealias _ParlanceCoordinator = ParlanceCoordinator
    typealias PluralCategory = EnglishPluralCategory

    static func t(_ key: LogInParlanceKey) -> String {
        switch key {
        case .signedInWelcomeMessage(name: let name): return "Welcome, " + name
        case .guestWelcomeMessage: return "Welcome"
        }
    }
}

class ShoppingCartParlance_EN: SpecificModule {
    typealias _ParlanceCoordinator = ParlanceCoordinator
    typealias PluralCategory = EnglishPluralCategory

    static func t(_ key: ShoppingCartParlanceKey) -> String {
        switch key {
        case .numberOfItems(let count):
            switch category(for: count) {
            case .one: return "1 item"
            case .other: return "\(count) items"
            }
        }
    }
}

项目示例

要运行示例项目,请先 克隆仓库,然后从Example目录运行pod install

要求

  • Xcode 8
  • Swift 3

安装

Parlance通过CocoaPods提供。要安装它,只需将以下行添加到您的Podfile中

platform :ios, "10.0"
use_frameworks!

target "<YOUR_TARGET>" do
    pod "Parlance"
end

作者

布莱恩·雷德博,[email protected]

许可证

Parlance可使用MIT许可证。更多信息请参阅LICENSE文件。