【问题标题】:How to read text not keys from property files with ResourceBundle如何使用 ResourceBundle 从属性文件中读取文本而不是键
【发布时间】:2017-05-27 10:16:47
【问题描述】:

我遇到了一个问题。可以使用 ResourceBundle 从属性或文本文件中读取键和值,但我有一些 i18n 网页内容存储在属性/文本文件中。

我想在访问网站各个页面时显示相关的语言内容。 Java ResourceBundle 中是否有任何选项可以显示整个文件内容而不是显示键和值?

请指教

【问题讨论】:

    标签: java utf-8 internationalization resourcebundle


    【解决方案1】:

    ResourceBundle 并非真正用于此目的。下面是一种使用 apache commons-io 库的简单方法。如果您更喜欢纯 Java 方法,可以使用 Scanner 等。

    import static java.nio.charset.StandardCharsets.UTF_8;
    
    import java.io.File;
    import java.io.IOException;
    
    import org.apache.commons.io.FileUtils;
    
    public class DummyJunk {
    
        public static void main(String[] args) {    
            try{
                String s = FileUtils.readFileToString(new File("/path/to/file"), UTF_8);
                System.out.println(s);
            }catch(IOException e ){
                e.printStackTrace();
            }
        }
    }
    

    【讨论】:

    • 这不是我的解决方案。例如,我有 3 个文件,分别为 Disclaimer_en_USDisclaimer_fa_IRDisclaimer_ar_AE,那么当我们必须检测浏览器语言时,我必须添加额外的代码来说明应该显示哪个文件并且更复杂。
    • 这不是 ResourceBundle 的目的,您可能会遇到问题。资源包需要属性和价值,您甚至需要注意转义特殊字符。如果属性文件以某种方式托管 html 内容,这也会在将来造成维护问题。相反,我建议将所有这些免责声明作为单独的文件维护,并在属性文件中维护区域设置到文件名的映射,该文件将使用 ResourceBundle 读取。
    • 你能举个例子吗I would instead suggest maintaining all these disclaimers as individual files and maintain a mapping of locale to file name in a properties file which will be read using ResourceBundle.
    • 下面是属性文件的内容,它将使用 ResourceBundle 读取,而实际的免责声明文件将使用 File 类读取。 pastebin.com/CAhprTKF
    • 这不是 ResourceBundle 的工作方式。 ResourceBundle 根据 Locale 选择文件,而不是根据 Locale 选择键和值。您再次提供了错误的解决方案
    猜你喜欢
    • 2020-06-17
    • 1970-01-01
    • 2012-07-24
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    相关资源
    最近更新 更多