Marcin Stelmaszyk wrote:
04-06-07, Marcin Kawelski <[EMAIL PROTECTED]> napisał(a):
pytanko do javowców, jest jakaś standardowa klasa (lub mechanizm) do
obsługi wielu języków w kontrolkach swinga? Jak to sie realizuje?
dość prosto. Tutorial Suna:
http://java.sun.com/docs/books/tutorial/i18n/index.html
A ja może dorzucę jeszcze parę słów z własnego doświadczenia.
W eclipse np. jest dosyć przyjemna funkcja - Source > Externalize
Strings. Aplikację z "hardcodowanymi" stringami można bardzo szybko
przekształcić na w pełni lokalizowalną. Wykorzystywany jest standardowy
mechanizm ResourceBundle. Eclipse dodaje jednak by default klasę
pośredniczącą Messages (można to konfigurować). Gdybym miał robić
lokalizację na niewielką skalę, skorzystał bym z ładowania zasobów
lokalizowalnych statycznie przez classloader w ramach tej samej klasy, np.:
import java.util.ResourceBundle;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
public class LocalizedSwing {
private static final ResourceBundle MESSAGES =
ResourceBundle.getBundle("messages");
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
final JFrame frame =
new JFrame(MESSAGES.getString("frame.title"));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(
new JLabel(MESSAGES.getString("test.text")));
frame.pack();
frame.setVisible(true);
}
});
}
}
Można też pobawić się w coś w rodzaju:
private static final ResourceBundle MESSAGES =
ResourceBundle.getBundle(LocalizedSwing.class.getName());
I mieć zawsze specyficzne messages dla specyficznej klasy.
Na większą skalę użył bym mechanizmów lokalizacji z jakiegoś framework -
np. Netbeans RPC, ale wtedy też pewnie i całą aplikację oparł bym na
jakimś Rich Client Platform.
--
"Meaning is differential not referential"
Kazimierz Pogoda
Nordic Consulting & Development Company http://www.ncdc.pl/