Java Swing - 本地化温度

2024-03-01

有没有办法在Java中本地化温度?就像温度格式将基于区域设置?

例如,对于挪威语,温度格式应为 14 °C。度数符号之前应该有一个空格。但其他语言应该是14°C。


以下示例演示了温度本地化,包括按区域设置特定属性对十进制值进行可自定义的舍入和格式设置。

public class LocalTemperature {

    private final Locale locale;
    private final String temperatureFormat;
    private final float conversionFactor;
    private final float conversionOffset;

    public LocalTemperature(ResourceBundle bundle) {
        locale = bundle.getLocale();
        temperatureFormat = bundle.getString("temperature.decimal.format");
        conversionFactor = Float.parseFloat(bundle.getString("temperature.conversion.factor"));
        conversionOffset = Float.parseFloat(bundle.getString("temperature.conversion.offset"));
    }

    public String format(double kelvin) {
        double localTemperature = conversionOffset + conversionFactor * kelvin;

        DecimalFormat format = new DecimalFormat(temperatureFormat, DecimalFormatSymbols.getInstance(locale));

        return format.format(localTemperature); 
    }
}

MyResources_DE.properties:

temperature.conversion.factor=1.0
temperature.conversion.offset=-273.15
temperature.decimal.format=###,###.##°C

MyResources_NR.properties:

temperature.conversion.factor=1.0
temperature.conversion.offset=-273.15
temperature.decimal.format=###,###.## °C

MyResources_en_US.properties:

temperature.conversion.factor=1.8
temperature.conversion.offset=-459.67
temperature.decimal.format=###,###.## °F

这可以通过以下单元测试来验证:

@RunWith(Parameterized.class)
public class LocalTemperatureTest {

    private final double testValue;
    private final String expectedResult;
    private final LocalTemperature testSubject;


    public LocalTemperatureTest(Locale locale, double testValue, String expected) {
        ResourceBundle bundle = ResourceBundle.getBundle("MyResources", locale);

        this.testSubject = new LocalTemperature(bundle);
        this.testValue = testValue;
        this.expectedResult = expected;
    }

    @Test
    public void test() {
        TestCase.assertEquals("Conversion error", expectedResult, testSubject.format(testValue));
    }

    @Parameters(name="{index}: locale={0}  kelvin={1}  expected={2}")
    public static Iterable<Object[]> getTestParameters() {
        Locale norwegian = new Locale("nr");

        Object[][] parameters = {
                {Locale.GERMAN, 0, "-273,15°C"},
                {Locale.GERMAN, 273.15, "0°C"},
                {Locale.GERMAN, 287.15, "14°C"},
                {Locale.GERMAN, 287.35, "14,2°C"},
                {Locale.GERMAN, 287.38, "14,23°C"},
                {Locale.GERMAN, 287.384, "14,23°C"},
                {Locale.GERMAN, 287.385, "14,24°C"},
                {norwegian, 287.15, "14 °C"},
                {Locale.US, 300.0, "80.33 °F"}
        };
        return Arrays.asList(parameters);
    }
}

请注意,根据合同,所有提供的温度值应具有相同的基本比例(此处为开尔文)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java Swing - 本地化温度 的相关文章

随机推荐

  • rpm %config(noreplace) 用 %config 覆盖

    在我的 rpm 中 我有一个完整的目录 我想用 config noreplace 标记它 该目录中有一个文件 我想在每次安装时使用 config 中的语义将其替换为最新的 rpm 使用此处的指南 http www uxsup csx cam
  • 禁用 WPF DataGrid 中第一行的第一列

    有没有一种方法 使用样式和多触发器 始终禁用第一行的第一列DataGrid在 WPF 控件中 这是一个模板化列 在编辑模式下显示组合框 在正常模式下显示文本框 我希望它永远不会进入编辑模式 仅此列 该行中的其余列应该能够进入编辑模式 是的
  • 这里不允许AllowOverride

    我已经设置了一个虚拟主机 如下所示
  • 如何在任务计划程序上执行PowerShell脚本?

    我正在尝试执行我的 Powershell 脚本 每 5 分钟运行一次 我尝试使用 Windows 7 的任务计划程序来运行它 但它在记事本上打开我的脚本 并且不会在我的数据库中插入任何内容 下面是我的 Powershell V 2 0 脚本
  • 如何通过 AutoCAD Plot API 在 Forge 设计自动化中使用用户定义的字体

    我们使用 Forge Plot API 将 DWG 绘制为 PDF JPG 一位客户提出了使用名为 ROBBI TTF 的特殊 TTF 字体的 DWG 我想这个字体必须上传到 Forge 服务器才能使用 是否可以上传字体一次 以便它可以用于
  • Jupyter:更改输出单元格大小

    我在 vscode 上使用 Jupyter 自上次更新以来 每次我都会看到整个输出窗口 当它很大时 有时会很烦人 我想减少它并且能够滚动它 我尝试修改 最大输出大小 设置 但它对我来说没有任何改变 有什么帮助吗 谢谢你 我是 VS Code
  • SmartGit 在 Ubuntu 上的安装和使用

    我已经下载了最新的 SmartGit 安装 每次我想使用它时 我都需要从 SmartGit bin 目录运行脚本 smartgit sh 此过程每次都需要相同的存储库设置 在 Ubuntu 上安装 SmartGit 的正确方法是什么 因此
  • Apache URL 重写,

    我正在尝试让 URL 重写在我的网站上运行 这是我的 htaccess 的内容 RewriteEngine On RewriteRule blog index php page blog L RewriteRule about index
  • 对“cvCreateKalman”的未定义引用[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我一直在开
  • 使用剪贴板 API 时 Chrome 中的构造函数非法?

    我目前正在构建一个网络应用程序 它是我很久以前用 Visual Basic 编写的另一个程序的翻译 在 Visual Basic 中 可以将数据直接放入操作系统的剪贴板中 Chrome 中有执行此操作的功能吗 我试过了 var magice
  • 在基于nx的nodejs应用程序中使用环境变量

    我已经在 nrwl nx 工作区中设置了一个包含多个 Nodejs 和 Angular 应用程序的项目 我正在尝试使用环境文件 在 Nodejs 应用程序内 我已经像这样设置了导入 import environment from envir
  • OLE DB 目标:转换规范的字符值无效

    我的表来源 num facture TYPE actif date 1 1 1 2010 01 31 00 00 00 000 2 2 1 2011 01 31 00 00 00 000 3 3 2 2012 01 31 00 00 00
  • 获取当前年份和月份会产生奇怪的结果

    我正在做一个与Android相关的学习项目 我试图使用下面的代码获取当前年份和月份 但它对我不起作用 GregorianCalendar gc new GregorianCalendar gc YEAR returning 1 gc MON
  • 在 WebSocketContext 中正确处置 WebSocket

    在 ASP NET 中 当您提供的处理程序HttpContext AcceptWebSocketRequest http msdn microsoft com en us library system web httpcontext acc
  • 将除一个目录之外的整个站点重定向到新站点 - apache .htaccess

    我正在尝试将当前站点移至新域 一个目录除外 Example 当前站点 oldsite olddomain example 新站点 新域名 example 所以我知道我可以创建一个 htaccess 重定向条目来执行此操作 并且它有效 但我想
  • 为什么要避免在 java 中使用 Runtime.exec() ?

    Process p Runtime getRuntime exec command is p getInputStream byte userbytes new byte 1024 is read userbytes 我想从 java 在
  • Teradata 优化器 SQL 中的 Equal 与 Like

    我目前正在尝试优化一些 bobj 报告 其中我们的后端是 Teradata 这Teradata优化器看起来很挑剔 我想知道是否有人想出了一个解决方案或解决方法让优化器以类似的方式对待喜欢的人 My issue is that we allo
  • VMWare vFabric tc Server 和 maven 找不到 org.springframework.web.servlet.DispatcherServlet

    我知道以前发布过一个与此非常相似的问题 但该解决方案不适用于我的问题 我正在尝试使用 Maven 启动一个基本的 Spring 项目 这是我的 pom xml
  • Pandas to_sql 不适用于 SQL Alchemy 连接

    我使用以下代码通过 SQL alchemy 连接到 MySQL 数据库 from sqlalchemy import create engine import pandas as pd query SELECT FROM hello eng
  • Java Swing - 本地化温度

    有没有办法在Java中本地化温度 就像温度格式将基于区域设置 例如 对于挪威语 温度格式应为 14 C 度数符号之前应该有一个空格 但其他语言应该是14 C 以下示例演示了温度本地化 包括按区域设置特定属性对十进制值进行可自定义的舍入和格式