2011-06-30 16 views
12

Definiujemy wszystkie nasze umiędzynarodowione stałe ciągi w jednym pliku właściwości LocalizableResource_xx.properties (po jednym na język) znajdującym się w google.gwt.i18n.client.Jak obsługiwać pojedyncze cudzysłowy w stałych internacjonalizacji?

W ten sposób możliwe jest, aby uzyskać dostęp do stałych w kodzie Javy poprzez interfejs stałych

Window.alert(myConstants.helloWorld()); 

jak ich używać wewnątrz UiBinder .ui.xml

<ui:attribute key="some.key" name="text" description="useful info" /> 

Takie podejście nie działa dobrze, jeśli ciąg zawiera pojedynczy cytat ('). Wynika to z faktu, że kompilator GWT generuje plik java.text.ParseException: Unterminated single quote: podczas przetwarzania plików .ui.xml. Jeśli unikniemy cytatu, czyli podwoimy go (''), kompilator przejdzie, ale łańcuchy dostępne przez stały interfejs zawierają zarówno pojedyncze cytaty (jak w You can''t do that).

Zastępowanie pojedynczych cudzysłowów za pomocą kodowania utf-8 nie pomaga (taki sam wyjątek jak powyżej).

Czy można w jakiś sposób użyć tego samego pliku właściwości w szablonach UiBinder, jak również w kodzie Java, bez uruchamiania irytujących problemów z pojedynczym cudzysłowem?

+1

Czy próbowali ucieczki to tak: \ "? –

+2

(Tylko w celach informacyjnych: Javadoc dla ['java.util.Properties.load (Reader)'] (http://download.oracle.com/javase/6/docs/api/java/util/Properties.html# load (java.io.Reader)) mówi: "Escapes nie są konieczne dla pojedynczych i podwójnych cudzysłowów, jednak zgodnie z powyższą regułą, pojedyncze i podwójne cudzysłowy poprzedzone znakiem odwrotnego ukośnika nadal dają odpowiednio jeden i dwa cudzysłowy.") –

+0

@ Paweł Dyda: Tak, próbowałem tego, ale wystąpił 'java.text.ParseException'. – z00bs

Odpowiedz

1

Ponieważ nie wydaje się być kolejnym rozwiązaniem wyślę nasze obejście wspomnianego wydania:

Stworzyliśmy klasy otoki wykonawczych interfejs stałe, które po prostu przechodzi stałe i18n się do String modify(String) zanim oni ponownie przekazane dzwoniącemu.

public class ConstantsWrapper implements MyConstants { 

    private static MyConstants sConstants = GWT.create(MyConstants.class); 

    public static String transform(String text) { 
     return text.replaceAll("''", "'"); 
    } 

    @Override 
    public String someText() { 
     return transform(sConstants.someText()); 
    } 

    ... 
} 

Nadal nie mogę się doczekać prawdziwego rozwiązania.

3

trzeba uciec swoje postacie używania znaków ewakuacyjnych HTML (np & # 39; do reprezentowania apostrof ') przed umieszczeniem ich w pliku lokalizacyjnego:

znajdziesz listę znaków ewakuacyjnych HTML na http://www.theukwebdesigncompany.com/articles/entity-escape-characters.php (lub możesz wyszukać "listę ucieczki html" w google).

W twoim przypadku musisz napisać & # 39; zamiast "" "

Mam nadzieję, że to rozwiąże problem.

+0

Dziękuję za odpowiedź. Nie mam różnicy między twoimi notacjami. Ale kiedy napiszę "" "" wszystkie trzy znaki zostaną wyprowadzone. – z00bs

10

Ten problem wydaje się być rozwiązany w bieżącym wydaniu.

'' (to dwie pojedyncze oferty) działa dobrze dla nas!

6

char ucieczka jest apostrof ' (zamiast zwykle odwrotny ukośnik \)

Przykład:

register.form.success=Un courriel a 'ét'é envoy'é a l''adresse suivante ': {0} 
Powiązane problemy