Как локализовать аннотации @Messages в NetBeans

Я хотел бы использовать @Messages аннотация в NetBeans для упрощения локализации в моем приложении. Однако я не могу найти какую-либо информацию о том, как добавить переводы (связки) для других языков с помощью этого механизма.

Пример действия с использованием @Messages как следует

@ActionID(category = "category",
id = "AddAction")
@ActionRegistration(iconBase = "actions/action-icon.png",
displayName = "#CTL_AddAction")
@ActionReferences({
    @ActionReference(path = "Menu/Shapes", position = 160),
    @ActionReference(path = "Toolbars/Shapes", position = 5133)
})
@Messages("CTL_AddAction=Add Action")

Как можно изменить действие добавления в зависимости от языка?

1 ответ

Решение

http://bits.netbeans.org/dev/javadoc/org-openide-util/org/openide/util/NbBundle.Messages.html

Аннотация @Messages создаст класс Bundle.java и файл Bundle.properties. Класс Bundle.java будет включать функции для локализации, а файл Bundle.properties содержит пары ключ-значение, которые определяют точные строки для корневой локали.

Для правильной локализации вы должны изучить файл Bundle.properties, а затем создать файл Bundle_fr.properties (для французского языка) или файл Bundle_whwhat.properties, где "независимо от того" - это локаль, которую вы хотите добавить.

Затем, когда для вашего приложения установлен языковой стандарт, класс Bundle.java должен использовать правильный файл Bundle_xx.properties для локализации ваших вызовов функций класса Bundle.java.

package com.testmodule;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import org.openide.awt.ActionID;
import org.openide.awt.ActionReference;
import org.openide.awt.ActionReferences;
import org.openide.awt.ActionRegistration;
import org.openide.util.NbBundle.Messages;

@ActionID(category = "category",
id = "com.testmodule.AddAction")
@ActionRegistration(iconBase = "com/testmodule/action-icon.png",
displayName = "#CTL_AddAction")
@ActionReferences({
    @ActionReference(path = "Menu/Shapes", position = 160),
    @ActionReference(path = "Toolbars/Shapes", position = 5133)
})
@Messages({
    "CTL_AddAction=Add Action"
})
public final class AddAction implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        Locale.setDefault(Locale.FRENCH);
        System.out.println("I am action "+Bundle.CTL_AddAction());
    }
}

Мои связки выглядят так:

Bundle.properties
    OpenIDE-Module-Name=testmodule
Bundle_fr.properties
    OpenIDE-Module-Name=french testmodule
    CTL_AddAction=Ajouter une action
Другие вопросы по тегам