【问题标题】:How to prevent my strings from being translated to other languages than English?如何防止我的字符串被翻译成英语以外的其他语言?
【发布时间】:2016-07-31 09:56:43
【问题描述】:

我试图阻止我的应用自动翻译成其他语言(例如保加利亚语)。我希望我所有的字符串都是英文的。我尝试将时区设置为“Europe\London”(因为我在英国),但这并不奏效。当有人在英国以外的国家/地区安装我的应用时,有没有办法确保我的应用设置(所有设置)不会被翻译?

我在我的应用程序中使用日期,我使用的是SimpleDateFormatter。我认为这导致了翻译某些字符串的问题。所以我所做的就是在像这样使用它的字符串之前将时区设置为它:

public static SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("Europe/London"));
String time = sdf.format(new Date());
mPurchasedDate.setText(day + " " + numDay + " " + mont + " at " + time);

但这也不起作用。

PS:我没有在我的应用程序中添加任何本地化。我只有一个strings.xml 文件夹,里面的字符串是英文的。

【问题讨论】:

  • 你能提供一些输出来描述你目前得到什么以及你期望什么?
  • 仅供参考,您使用的日期时间类在几年前被 JSR 310 中定义的现代 java.time 类所取代。

标签: android localization simpledateformat


【解决方案1】:

在 strings.xml 中为您不想被翻译成任何其他语言的每个字符串设置可翻译为 false

    <string name="account_setup_imap" translatable="false">IMAP</string>

【讨论】:

    【解决方案2】:

    如果您只想为SimpleDateFormat 使用特定的Locale,请使用采用Locale 的构造函数:new SimpleDateFormat(String, Locale)

    public static SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss", Locale.UK);
    

    【讨论】:

    • 非常感谢您,伊恩。我将对其进行测试,但从外观上看,我应该做到这一点。谢谢! :)
    【解决方案3】:

    java.util 的日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用它们并切换到modern date-time API。出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 和 7。如果您正在为Android 项目且您的 Android API 级别仍不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

    为了坚持English,您需要使用日期时间格式化/解析API 指定Locale.ENGLISH无论如何,最佳做法之一是use Locale with the formatting/parsing API in every case

    现代 API:

    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss", Locale.ENGLISH);
    

    旧版 API:

    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss", Locale.ENGLISH);
    

    请注意java.util.Date 对象不是像modern date-time types 那样的真实日期时间对象;相反,它表示距离Epoch of January 1, 1970 的毫秒数。当你打印一个java.util.Date 的对象时,它的toString 方法返回从这个毫秒值计算的日期时间。由于java.util.Date 没有时区信息,它会应用您的JVM 的时区并显示相同的信息。如果您需要在不同的时区打印日期时间,则需要将时区设置为SimpleDateFomrat 并从中获取格式化字符串。

    相比之下,现代日期时间 API 具有仅表示日期、时间或日期时间的特定类。而且,对于这些中的每一个,都有用于带/不带时区信息的单独类。查看以下table 了解现代日期时间类型的概述:

    快速演示:

    import java.time.LocalTime;
    import java.time.ZoneId;
    import java.time.format.DateTimeFormatter;
    import java.util.Locale;
    
    public class Main {
        public static void main(String[] args) {
            LocalTime time = LocalTime.now(ZoneId.of("Europe/London"));
    
            // Print its default format i.e. the value returned by time#toString
            System.out.println(time);
    
            // Custom format
            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("hh:mm:ss", Locale.ENGLISH);
            System.out.println(time.format(dtf));
        }
    }
    

    输出:

    12:39:07.627763
    12:39:07
    

    Trail: Date Time 了解有关现代日期时间 API 的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 2015-09-26
      相关资源
      最近更新 更多