Mogę uruchomić to tylko za pomocą całkiem masywnego hacka, który nie jest nawet przenośny. Może jednak da ci wystarczająco dużo pracy, aby stworzyć realistyczne rozwiązanie. (To działa pod Java 8.)
stworzyłem paczkę com.sun.javafx.scene.control.skin.resources
, a utworzony plik controls_fi_FI.properties w nim z jednej linii
ProgressIndicator.doneString=Valmis
I stworzył aplikację testową z następujących czynności:
import java.util.Locale;
import java.util.ResourceBundle;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.layout.BorderPane;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
System.out.println(ResourceBundle.getBundle("com/sun/javafx/scene/control/skin/resources/controls").getString("ProgressIndicator.doneString"));
BorderPane root = new BorderPane();
ProgressIndicator progressIndicator = new ProgressIndicator(1);
root.setCenter(progressIndicator);
Scene scene = new Scene(root,400,400);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
Locale.setDefault(new Locale("fi", "FI"));
launch(args);
}
}
Uruchomienie tej aplikacji na wiele sposobów nie działa zgodnie z oczekiwaniami: podczas gdy System.out.println(...)
daje prawidłowy wynik, tekst wyświetlany na wskaźniku postępu jest nieprawidłowy.
Jednakże, jeśli pakiet com/sun/javafx/control/skin/resources/controls_fi_FI.properties
w pliku jar i przenieść ten plik jar do podkatalogu mojej instalacji JDK jre/lib/ext
(tj. W tym samym miejscu jak jfxrt.jar
), działa jako wymagane (przynajmniej w moim prostego testu; jak już powiedziałem, nie twierdzę, że jest to jakieś solidne rozwiązanie).
Wydaje się, że ładowanie klasy ControlsResources
jest ładowane przez moduł ładujący klasy rozszerzenia i dlatego używa tego samego programu ładującego klasy, aby załadować pakiet zasobów.
Dzięki lepszej znajomości ładowarki klasy niż mam, może być w stanie kształtować to w rozsądnym rozwiązaniem ...
Korzystanie z 'ResourceBundle' określona przez właściwości pliku w ścieżce klasy powinno działać. Czy możesz pokazać, jak pobierasz wartości z twojego pakietu? –
Myślę, że źle zrozumiałeś mój problem. Moja własna lokalizacja działa już z ResourceBundle, po prostu próbuję zlokalizować wbudowane ciągi kontrolne. Na przykład ProgressIndicator ma to "zrobione" -string, który jest wyświetlany, gdy kontrola jest w 100%. Po prostu skopiowałem plik controls.properties z jre i przetłumaczyłem go sam, dodając go do ścieżki klas. – user2499946
Ach, tak: źle mnie zrozumiałem. Dzięki za wytłumaczenie. –