【问题标题】:Print time-related strings like "today" and "yesterday" translated depending on Locale?打印根据语言环境翻译的与时间相关的字符串,如“今天”和“昨天”?
【发布时间】:2018-05-01 19:33:32
【问题描述】:

我正在寻找一种方法来打印与时间相关的字符串,例如在 Android 应用中翻译成用户的区域设置(即语言)的“今天”和“昨天”。

我曾尝试使用DateUtils.getRelativeDateTimeString,但它 不考虑语言环境,或者至少在运行时无法更改它。我需要类似于 SimpleDateFormat 的现有构造函数的东西:

public SimpleDateFormat(String pattern, Locale locale)

当然,可以为每种语言添加每个单词的翻译,但假设这些单词确实存在于操作系统中,没有更好的方法。

有没有办法做到这一点?

编辑: 我正在尝试做类似于 iOS 上的日期选择器的操作:

【问题讨论】:

  • 你也可以考虑我的库Time4A,它包含88种语言的“今天”、“昨天”、“明天”的翻译,另见API doc中给出的例子
  • 谢谢@MenoHochschild,你是个传奇!
  • @OleV.V.那个被删除的答案可能被删除了,因为像今天和昨天这样的词不包括在漂亮的时间里。
  • 听起来像是一个可能的解释,@HenningHall。谢谢(重复你已经说过的作为对答案的评论,以便我最终也能理解)。

标签: java android simpledateformat date-format


【解决方案1】:

有了@Meno Hochschild 的评论,我可以通过以下方式解决它:

  1. 添加Time4A library
  2. 制作了UnitPatterns.java 的本地副本并将其公开。
  3. 这样使用它:

UnitPatterns.of(locale).getTodayWord(); // returns "today" UnitPatterns.of(locale).getYesterdayWord(); // returns "yesterday"

【讨论】:

  • 现在我已经发布了 Time4A-v3.43-2018e,其中包含通过:PrettyTime.of(Locale.ENGLISH).printYesterday() 等的直接支持。
【解决方案2】:

这似乎是一个翻译问题, 不是日期格式问题。

您的应用将包含想要向用户显示的消息。 这些消息需要翻译成您的目标语言。 一旦您知道要显示的消息, 检索然后使用区域设置显示本地化(即翻译的)消息(Android 支持)。

您很可能确实想要显示“明天”或“昨天”这个词。 反而, 你可能想显示类似“blah blah tomorrow”或 “对不起,昨天的废话”。 翻译整个消息, 不仅仅是单独的单词。

其他信息 我认为您确实需要将“今天”翻译成每种目标语言。 而且,您需要将每个与日期相关的字符串翻译成每种目标语言(我的意思是“Tue May 1”需要翻译成每种语言)。 您可以使用一些“技巧”。 选择字符串的“基础”部分并为其他部分使用占位符。 占位符, 因为不同的语言可能有不同的顺序 "星期几月日"

【讨论】:

  • 感谢您的回答!在我的情况下,实际上只有字符串“Today”本身将被显示,我用我的实际用例更新了我的问题。所以我还是要加人工翻译你相信吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-28
  • 2011-11-03
  • 2014-05-25
  • 1970-01-01
  • 2011-06-14
  • 1970-01-01
相关资源
最近更新 更多