如何本地化包含日期且文本位置因语言而异的字符串?

问题描述 投票:0回答:1

我正在为匈牙利用户本地化我的应用程序,但无法弄清楚如何处理其中包含日期的字符串。

在英语中,我有一个文本字符串应该显示“4reps @ 120 kg on 8/19/23”。我对其中的“on 8/19/23”部分遇到了麻烦,因为在匈牙利语中,“on”出现在日期之后,例如“19.08.23.-én”。这是我的本地化代码“23 年 8 月 19 日”

let dateFormatter = DateFormatter()
dateFormatter.locale = Locale.current
dateFormatter.setLocalizedDateFormatFromTemplate("MMddyy")
let formattedDate = dateFormatter.string(from: viewData.liftDate)

let onDateText = NSLocalizedString("onDateText", 
                                    tableName: "Main", 
                                    value: formattedDate, <-- a string
                                    comment: "")

liftDate.text = onDateText

在我的 localized.strings 文件中我有这个:

"onDateText" = "%@-én";

我的应用程序中出现的是“4 ismétlésszám @ 120.0 kg %@-én”

我需要帮助了解如何获取返回的本地化字符串中包含的日期。

注意:出现的屏幕是 UIViewController,而不是 SwiftUI 视图。

我在这里阅读了很多关于SO的帖子,并尝试使用通常推荐的字符串编程指南来解决它,但我无法弄清楚。

感谢您的帮助。

swift localization nslocalizedstring dateformatter
1个回答
0
投票

您需要使用

NSLocalizedString
的结果作为字符串格式。您传入的值是默认的字符串格式。

您的更新代码将如下所示:

let dateFormatter = DateFormatter()
dateFormatter.locale = Locale.current
dateFormatter.setLocalizedDateFormatFromTemplate("MMddyy")
let formattedDate = dateFormatter.string(from: viewData.liftDate)

let onDateFormat = NSLocalizedString("onDateText",
                                    tableName: "Main",
                                    value: "on %@",
                                    comment: "")

liftDate.text = String(format: onDateFormat, formattedDate)

注意

value
NSLocalizedString
参数的变化。另请注意使用
String(format:)
创建最终字符串。

通过

NSLocalizedString
中的基本格式字符串,您可以使用标准本地化工具从您的代码生成基本 Localized.strings 文件。

在运行时,

NSLocalizedString
返回的实际值将是基于用户区域设置的实际本地化值。

© www.soinside.com 2019 - 2024. All rights reserved.