목차
1. 리소스 파일 준비
2. 리소스 파일 로드
3. 현지화된 문자열 가져오기
4. ResourceBundle 사용 팁
4.1 적절한 리소스 파일 형식 선택
4.2 현지화된 문자열의 특수 문자 처리
4.3 누락된 현지화 문자열 처리
4.4 동적 현지화된 문자열 처리
4.5 处理多个资源文件
4.6 自定义资源加载器
4.7 动态更新资源文件
Java java지도 시간 Java에서 국제화된 기본 클래스 ResourceBundle을 사용하는 방법

Java에서 국제화된 기본 클래스 ResourceBundle을 사용하는 방법

May 04, 2023 pm 02:22 PM
java resourcebundle

    Java 개발에서 ResourceBundle은 지역화된 리소스를 편리하게 관리하기 위한 메커니즘입니다. 이를 통해 프로그램은 현재 시스템 환경의 언어 및 국가/지역에 따라 해당 지역화된 리소스 파일을 자동으로 로드할 수 있으므로 하드 코딩을 방지하고 반복 코드를 줄일 수 있습니다. ResourceBundle을 사용하기 위한 기본 단계는 다음과 같습니다.

    1. 리소스 파일 준비

    ResourceBundle은 리소스 파일을 로딩하여 현지화를 구현하므로, 언어별, 국가/지역별로 해당 리소스 파일을 준비해야 합니다. 리소스 파일은 .properties 형식의 텍스트 파일이거나 .class 파일 또는 .jar 파일일 수 있습니다.

    리소스 파일에서 현지화해야 하는 각 문자열에 대해 속성 이름을 지정한 다음 각 속성 이름에 대해 해당 언어로 번역을 제공해야 합니다. 예를 들어, 다음은 message.properties라는 리소스 파일의 예입니다.

    greeting=Hello
    farewell=Goodbye
    로그인 후 복사

    동일한 속성 이름에 대해 다양한 언어 및 국가에서 다양한 번역이 제공될 수 있습니다. 예를 들어, 다음은 message_fr.properties라는 프랑스어 리소스 파일의 예입니다.

    greeting=Bonjour
    farewell=Au revoir
    로그인 후 복사

    2. 리소스 파일 로드

    Java에서는 ResourceBundle 클래스를 사용하여 리소스 파일을 로드할 수 있습니다. ResourceBundle 클래스는 리소스 파일을 로드하기 위한 여러 가지 생성자를 제공합니다. 예:

    ResourceBundle rb = ResourceBundle.getBundle("messages", Locale.getDefault());
    로그인 후 복사

    이 명령문은 현재 시스템 환경의 기본 언어 및 국가/지역에 따라 message라는 리소스 파일을 로드합니다. 시스템 환경이 영어와 미국인 경우 이 명령문은 message.properties 리소스 파일을 로드합니다. 시스템 환경이 프랑스어 및 프랑스어인 경우 이 명령문은 message_fr.properties 리소스 파일을 로드합니다.

    지정된 언어 및 국가/지역의 리소스 파일을 로드해야 하는 경우 Locale 매개변수와 함께 getBundle() 메서드를 사용할 수 있습니다. 예:

    Locale locale = new Locale("fr", "FR");
    ResourceBundle rb = ResourceBundle.getBundle("messages", locale);
    로그인 후 복사

    이 명령문은 message_fr_FR.properties라는 프랑스어/프랑스어 리소스 파일을 로드합니다.

    3. 현지화된 문자열 가져오기

    리소스 파일이 성공적으로 로드되면 ResourceBundle의 getString() 메서드를 사용하여 현지화된 문자열을 가져올 수 있습니다. 예:

    String greeting = rb.getString("greeting");
    String farewell = rb.getString("farewell");
    로그인 후 복사

    이 명령문은 리소스 파일에서 Greeting 및 Farewell이라는 속성을 가진 지역화된 문자열을 가져오고 이를 각각 Greeting 및 Farewell 변수에 할당합니다. 지정된 속성 이름을 찾을 수 없는 경우 getString() 메서드는 MissingResourceException을 발생시킵니다.

    4. ResourceBundle 사용 팁

    위의 기본 단계 외에도 ResourceBundle 사용에 대한 몇 가지 주목할만한 기능과 팁이 있습니다.

    4.1 적절한 리소스 파일 형식 선택

    ResourceBundle은 .properties를 포함한 여러 리소스 파일 형식을 지원합니다. , .xml 및 .class 파일 등 간단한 지역화된 문자열의 경우 .properties 형식이 사용이 간편하고 편집 및 지역화가 쉽기 때문에 가장 일반적으로 선택됩니다.

    이미지, 사운드, 비디오 등과 같이 더 복잡하고 현지화된 리소스의 경우 다른 형식의 리소스 파일을 사용해야 할 수도 있습니다. 예를 들어, .class 파일이나 .jar 파일을 사용하여 이미지나 사운드 파일을 포함하고 ResourceBundle의 ClassLoader.getSystemClassLoader() 메서드를 사용하여 이러한 파일을 로드할 수 있습니다.

    4.2 현지화된 문자열의 특수 문자 처리

    현지화된 문자열에는 줄 바꿈, 탭, 유니코드 문자 등과 같은 다양한 특수 문자가 포함될 수 있습니다. 이러한 문자를 리소스 파일에 직접 삽입하면 불필요한 문제와 오류가 발생할 수 있습니다.

    이러한 문제를 방지하려면 Java의 이스케이프 문자를 사용하여 이러한 특수 문자를 나타낼 수 있습니다. 예를 들어, "n"을 사용하여 개행 문자를 나타내고, "t"를 사용하여 탭 문자를 나타내고, "uXXXX"를 사용하여 유니코드 문자를 나타낼 수 있습니다.

    4.3 누락된 현지화 문자열 처리

    경우에 따라 특정 언어의 현지화 문자열에 대한 번역이 제공되지 않는 상황이 있을 수 있습니다. 프로그램에서 MissingResourceException 예외를 방지하려면 리소스 파일에서 이러한 누락된 문자열에 대한 기본 번역(예: 영어 번역)을 제공할 수 있습니다. 예를 들어, 다음은 기본 번역이 포함된 message_fr.properties 파일의 예입니다.

    greeting=Bonjour
    farewell=Au revoir
    warning=Attention: This message has no translation in French. Please refer to the English version.
    로그인 후 복사

    이러한 방식으로 프랑스어 환경에서 특정 속성 이름에 대한 현지화된 문자열을 찾을 수 없는 경우 ResourceBundle은 자동으로 기본값을 반환합니다. 속성 이름 Translation의 경우 프로그램 예외를 방지합니다.

    4.4 동적 현지화된 문자열 처리

    일부 현지화된 문자열에는 시간, 날짜, 숫자, 통화 등과 같은 동적 콘텐츠가 포함될 수 있습니다. 이러한 문자열을 올바르게 지역화하려면 MessageFormat 및 NumberFormat과 같은 Java의 형식 지정 메커니즘을 사용해야 합니다. 예를 들어 다음은 MessageFormat을 사용하여 동적 문자열을 지역화하는 예입니다.

    String pattern = rb.getString("greeting");
    Object[] arguments = {"John"};
    String greeting = MessageFormat.format(pattern, arguments);
    로그인 후 복사

    이 예에서 패턴은 자리 표시자 "{0}"를 포함하는 지역화된 문자열입니다. "{0}"은 패턴을 다음으로 바꿔야 함을 의미합니다. 동적 콘텐츠의 위치입니다. 인수는 "{0}"의 위치를 ​​순서대로 대체할 실제 동적 콘텐츠를 포함하는 배열입니다. 마지막으로 MessageFormat.format() 메서드는 현지화된 문자열을 반환합니다.

    4.5 处理多个资源文件

    在一些情况下,可能需要使用多个资源文件来管理不同类型或不同用途的本地化资源。在这种情况下,可以使用ResourceBundle.Control类的方法来指定资源文件的搜索路径和加载顺序。

    例如,可以使用ResourceBundle.Control.getControl()方法来获取默认的ResourceBundle.Control实例,然后使用ResourceBundle.getBundle()方法来指定基础名称和Locale信息,以便查找合适的资源文件。例如,以下是一个使用多个资源文件来管理本地化字符串的示例:

    ResourceBundle.Control control = ResourceBundle.Control.getControl(ResourceBundle.Control.FORMAT_PROPERTIES);
    ResourceBundle messages = ResourceBundle.getBundle("Messages", new Locale("fr"), control);
    ResourceBundle errors = ResourceBundle.getBundle("Errors", new Locale("fr"), control);
    
    String greeting = messages.getString("greeting");
    String error = errors.getString("invalid_input");
    
    System.out.println(greeting); // Bonjour
    System.out.println(error); // Entrée invalide
    로그인 후 복사

    在这个示例中,我们使用ResourceBundle.Control.FORMAT_PROPERTIES指定了资源文件的格式为.properties文件,然后分别使用Messages和Errors作为基础名称来获取不同类型的资源文件。这样,我们就可以轻松地管理不同类型的本地化资源,从而使程序更加可读和易于维护。

    4.6 自定义资源加载器

    如果默认的资源加载机制无法满足需求,我们还可以自定义资源加载器来实现更高级的功能。自定义资源加载器需要继承java.util.ResourceBundle.Control类,并重写其中的方法来实现自定义逻辑。

    例如,以下是一个使用自定义资源加载器来加载本地化字符串的示例:

    public class MyResourceLoader extends ResourceBundle.Control {
        @Override
        public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload)
                throws IllegalAccessException, InstantiationException, IOException {
            String bundleName = toBundleName(baseName, locale);
            String resourceName = toResourceName(bundleName, "myproperties");
            InputStream stream = loader.getResourceAsStream(resourceName);
            if (stream != null) {
                try {
                    return new PropertyResourceBundle(stream);
                } finally {
                    stream.close();
                }
            } else {
                return super.newBundle(baseName, locale, format, loader, reload);
            }
        }
    }
    
    ResourceBundle.Control control = new MyResourceLoader();
    ResourceBundle messages = ResourceBundle.getBundle("Messages", new Locale("fr"), control);
    
    String greeting = messages.getString("greeting");
    
    System.out.println(greeting); // Bonjour
    로그인 후 복사

    在这个示例中,我们定义了一个名为MyResourceLoader的自定义资源加载器,并重写了其中的newBundle()方法来实现自定义资源加载逻辑。然后,我们使用这个自定义资源加载器来获取Messages资源文件中的本地化字符串。这样,我们就可以实现更高级的资源加载功能,从而满足更复杂的需求。

    4.7 动态更新资源文件

    有时候,在应用程序运行期间,可能需要动态地更新资源文件中的某些值。在Java中,我们可以使用PropertyResourceBundle类来实现这个功能。

    PropertyResourceBundle是ResourceBundle的一个子类,它可以读取.properties格式的资源文件,并将其转换为一个键值对的形式。然后,我们可以通过这个键值对来动态地更新资源文件中的值。

    例如,以下是一个使用PropertyResourceBundle来动态更新本地化字符串的示例:

    // 加载资源文件
    InputStream stream = new FileInputStream("Messages.properties");
    PropertyResourceBundle bundle = new PropertyResourceBundle(stream);
    
    // 动态更新本地化字符串
    bundle.handleKey("greeting", (key, value) -> "Hello");
    
    // 输出本地化字符串
    String greeting = bundle.getString("greeting");
    System.out.println(greeting); // Hello
    로그인 후 복사

    在这个示例中,我们首先使用FileInputStream来加载Messages.properties资源文件,然后将其转换为一个PropertyResourceBundle对象。然后,我们使用handleKey()方法来动态地更新greeting这个键对应的值。最后,我们使用getString()方法来获取更新后的本地化字符串。

    这种动态更新资源文件的方式可以使应用程序更加灵活,能够快速响应变化。但是需要注意的是,这种方式需要保证资源文件的正确性和一致性,否则可能会导致应用程序运行出错。

    위 내용은 Java에서 국제화된 기본 클래스 ResourceBundle을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

    핫 AI 도구

    Undresser.AI Undress

    Undresser.AI Undress

    사실적인 누드 사진을 만들기 위한 AI 기반 앱

    AI Clothes Remover

    AI Clothes Remover

    사진에서 옷을 제거하는 온라인 AI 도구입니다.

    Undress AI Tool

    Undress AI Tool

    무료로 이미지를 벗다

    Clothoff.io

    Clothoff.io

    AI 옷 제거제

    Video Face Swap

    Video Face Swap

    완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

    뜨거운 도구

    메모장++7.3.1

    메모장++7.3.1

    사용하기 쉬운 무료 코드 편집기

    SublimeText3 중국어 버전

    SublimeText3 중국어 버전

    중국어 버전, 사용하기 매우 쉽습니다.

    스튜디오 13.0.1 보내기

    스튜디오 13.0.1 보내기

    강력한 PHP 통합 개발 환경

    드림위버 CS6

    드림위버 CS6

    시각적 웹 개발 도구

    SublimeText3 Mac 버전

    SublimeText3 Mac 버전

    신 수준의 코드 편집 소프트웨어(SublimeText3)

    자바의 완전수 자바의 완전수 Aug 30, 2024 pm 04:28 PM

    Java의 완전수 가이드. 여기서는 정의, Java에서 완전 숫자를 확인하는 방법, 코드 구현 예제에 대해 논의합니다.

    자바의 웨카 자바의 웨카 Aug 30, 2024 pm 04:28 PM

    Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

    Java의 스미스 번호 Java의 스미스 번호 Aug 30, 2024 pm 04:28 PM

    Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

    Java Spring 인터뷰 질문 Java Spring 인터뷰 질문 Aug 30, 2024 pm 04:29 PM

    이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

    Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까? Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까? Feb 07, 2025 pm 12:09 PM

    Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

    Java의 날짜까지의 타임스탬프 Java의 날짜까지의 타임스탬프 Aug 30, 2024 pm 04:28 PM

    Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.

    캡슐의 양을 찾기위한 Java 프로그램 캡슐의 양을 찾기위한 Java 프로그램 Feb 07, 2025 am 11:37 AM

    캡슐은 3 차원 기하학적 그림이며, 양쪽 끝에 실린더와 반구로 구성됩니다. 캡슐의 부피는 실린더의 부피와 양쪽 끝에 반구의 부피를 첨가하여 계산할 수 있습니다. 이 튜토리얼은 다른 방법을 사용하여 Java에서 주어진 캡슐의 부피를 계산하는 방법에 대해 논의합니다. 캡슐 볼륨 공식 캡슐 볼륨에 대한 공식은 다음과 같습니다. 캡슐 부피 = 원통형 볼륨 2 반구 볼륨 안에, R : 반구의 반경. H : 실린더의 높이 (반구 제외). 예 1 입력하다 반경 = 5 단위 높이 = 10 단위 산출 볼륨 = 1570.8 입방 단위 설명하다 공식을 사용하여 볼륨 계산 : 부피 = π × r2 × h (4

    미래를 창조하세요: 완전 초보자를 위한 Java 프로그래밍 미래를 창조하세요: 완전 초보자를 위한 Java 프로그래밍 Oct 13, 2024 pm 01:32 PM

    Java는 초보자와 숙련된 개발자 모두가 배울 수 있는 인기 있는 프로그래밍 언어입니다. 이 튜토리얼은 기본 개념부터 시작하여 고급 주제를 통해 진행됩니다. Java Development Kit를 설치한 후 간단한 "Hello, World!" 프로그램을 작성하여 프로그래밍을 연습할 수 있습니다. 코드를 이해한 후 명령 프롬프트를 사용하여 프로그램을 컴파일하고 실행하면 "Hello, World!"가 콘솔에 출력됩니다. Java를 배우면 프로그래밍 여정이 시작되고, 숙달이 깊어짐에 따라 더 복잡한 애플리케이션을 만들 수 있습니다.

    See all articles