本地应用程序_本地化快速应用程序

本地应用程序

Hello Swift developers, I want to share with you my experience and knowledge about using Property Wrappers in an application and how to reduce your code and make it easier to maintain. I will write about this in several topic parts.

您好,Swift开发人员,我想与您分享我在应用程序中使用Property Wrappers的经验和知识,以及如何减少代码并使维护更容易。 我将在几个主题部分中对此进行撰写。

In Swift 5.1, Apple introduced Property Wrappers, which gives the possibility to set up additional layer between your property and serving logic.

在Swift 5.1中,Apple引入了Property Wrappers ,它使在属性和服务逻辑之间设置附加层成为可能。

This part is about how to localize your application using Property Wrappers and simple way within @IBOutlet.

这部分是关于如何使用Property Wrappers@IBOutlet简单方法来本地化应用程序的。

So, instead of the basic case:

因此,代替基本情况:

class NatureViewController: UIViewController {
  @IBOutlet private var label: UILabel! {
    didSet {
      label.title = NSLocalizedString("natureTitle", comment: "")
    }
  }
  
  @IBOutlet private var button: UIButton! {
    didSet {
      button.setTitle(NSLocalizedString("saveNatureButton", comment: ""), for: .normal)
    }
  }
}

We can improve the code with property wrapper @Localized, and have:

我们可以使用属性包装器 @Localized改进代码,并具有:

class NatureViewController: UIViewController {
  @Localized("natureTitle")
  @IBOutlet private var label: UILabel!
  
  @Localized("saveNatureButton")
  @IBOutlet private var button: UIButton!
}

It looks pretty, doesn’t it? So let’s create @Localized property wrapper.It will be good to apply key as enum, to have: @Localized(.natureTitle)

看起来很漂亮,不是吗? 因此,让我们创建@Localized属性@Localized 。将键用作枚举将是很好的: @Localized(.natureTitle)

@propertyWrapper
struct Localized<T: Localizable> {
  private let key: LocalizationKey
  
  var wrappedValue: T? = nil {
    didSet {
      wrappedValue?.set(localization: key)
    }
  }
  
  init(_ key: LocalizationKey) {
    self.key = key
  }
}

And be able to apply for any that conforms Localizable protocol.To achieve our goal, we will extend also UILabel and UIButton.

并且可以申请任何符合Localizable协议的协议。要实现我们的目标,我们还将扩展UILabelUIButton

protocol Localizable {
  func set(localization: LocalizationKey)
}


extension UIButton: Localizable {
  func set(localization key: LocalizationKey) {
    setTitle(key.string, for: .normal)
  }
}


extension UILabel: Localizable {
  func set(localization key: LocalizationKey) {
    text = key.string
  }
}

And the final thing that we need is LocalizationKey:

最后,我们需要的是LocalizationKey

enum LocalizationKey: String {
  case 
  natureTitle, 
  saveNatureButton
}


extension LocalizationKey {
  var string: String {
    NSLocalizedString(rawValue, comment: rawValue)
  }
}

As our enum is raw representable, as a String conforms to the protocol, it’s enough just to have Localizable.strings with the same keys for values.

由于我们的枚举是原始可表示的,因此String符合协议,仅使Localizable.strings具有与值相同的键就足够了。

So in the end our code looks like:

因此,最终我们的代码如下所示:

class NatureViewController: UIViewController {
  @Localized(.natureTitle)
  @IBOutlet private var label: UILabel!
  
  @Localized(.saveNatureButton)
  @IBOutlet private var button: UIButton!
}

That’s all in this part! Here are some potential ideas that @Localized can contain:

这就是全部! 以下是@Localized可能包含的一些潜在想法:

  • applying format values with strings for dynamic replacement.

    将格式值与字符串一起应用以进行动态替换。
  • be able to determine strings from a specific table and bundle.

    能够从特定的表和捆绑确定字符串。

More about Property Wrapper read in the official documentation:

有关Property Wrapper的更多信息,请参阅官方文档:

翻译自: https://levelup.gitconnected.com/localize-swift-application-f1fd0f4af800

本地应用程序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt是一个跨平台的应用程序开发框架,能够快速开发各种类型的应用程序。Qt提供了丰富的工具和库,使开发者能够轻松地设计、编写和调试高质量的图形用户界面。 Qt使用C++编程语言,具有良好的可扩展性和可移植性。开发者可以使用Qt的类和函数来创建自定义的对象,并根据自己的需求进行扩展和修改。Qt还提供了丰富的API和示例代码,帮助开发者快速理解和掌握开发流程。 Qt的主要特点之一是其跨平台能力。开发者可以使用Qt编写一次代码,然后在不同的操作系统和设备上部署并运行。无论是在Windows、Mac、Linux还是移动平台上,开发者都可以使用Qt进行开发,并且代码的可移植性非常好。 除了跨平台能力,Qt还提供了许多特性和模块,帮助开发者快速开发出功能强大的应用程序。例如,Qt提供了图形渲染引擎、网络功能、数据库访问、XML处理等模块,使开发者能够轻松地集成这些功能到他们的应用程序中。 另外,Qt还支持多种开发方式。开发者可以选择使用Qt的集成开发环境(Qt Creator)来进行开发,也可以使用其他的IDE,如Visual Studio等。Qt还支持各种主流的编译器,包括GCC、Clang、MSVC等。 总而言之,Qt是一个通用的快速开发框架,具有跨平台能力、丰富的功能模块和易用的开发工具。使用Qt,开发者能够更加高效地开发出高质量、可扩展的应用程序。 ### 回答2: Qt是一个跨平台的应用程序开发框架,被广泛用于开发图形界面(GUI)应用程序。它提供了丰富的功能和工具,使开发者能够快速而灵活地开发各种应用程序。 首先,Qt具有跨平台的特性,这意味着开发者可以用一套代码在不同的操作系统上运行应用程序,无需重新编写代码。Qt支持多种操作系统,包括Windows、Linux、MacOS等。 其次,Qt提供了大量的易于使用的类和函数,简化了开发过程。开发者可以利用Qt提供的预定义控件、图形绘制函数和布局管理器来快速构建用户界面,并使用信号与槽机制进行事件处理。这些功能可以大大提高开发效率。 另外,Qt框架还包括了许多用于处理非GUI相关任务的模块,如网络通信、数据库访问、多线程处理等。这些功能使开发者能够更轻松地处理各种常见任务,而无需编写大量的底层代码。 此外,Qt提供了用于国际化和本地化的工具,使应用程序能够支持不同语言和地区的用户。开发者可以轻松地将应用程序翻译成多种语言,从而扩展用户群体。 总的来说,Qt是一个功能强大而灵活的应用程序开发框架,提供了丰富的功能和工具,使开发者能够快速构建跨平台的GUI应用程序。它的易用性和高效性使其成为许多开发者的首选框架。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值