2013-04-25 10 views
5

Mam app tłumaczone w 3 językach: angielskim, niemieckim, polskimJak uniknąć awarii z powodu brakujących wpisów w łańcuchu?

Więc mam te trzy foldery dla języków w projekcie:

values 
strings.xml 

values-en 
strings.xml 

values-de 
strings.xml 

values-pl 
strings.xml 

zdałem sobie sprawę, że jeśli mogę umieścić wszystkie sznurki w wartości i brakuje niektórych napisów w polskiej wersji, że aplikacja ulega awarii podczas uzyskiwania dostępu do brakujących ciągów w polskiej wersji.

Spodziewałbym się, że system właśnie pobiera ciąg z folderu wartości domyślnych, jeśli nie znajduje go w folderze values-pl.

Czy istnieje sposób na złapanie tych potencjalnych brakujących awarii ciągu? Czy gdybym mógł uzyskać ostrzeżenie w kompilatorze, że ciąg znaków w dowolnym języku nie będzie prawidłowy?

EDIT i dodanie

W rzeczywistości inny ciąg brakowało w domyślnej też .... więc dzięki za odpowiedzi/komentarze!

Ale teraz przetestowałem także przypadek, w którym brakuje tylko ciągu znaków w domyślnym pliku strings.xml, ALE występuje we wszystkich innych plikach. Nie otrzymuję żadnego ostrzeżenia ani niczego innego.

Tak więc w tym przypadku, jeśli WSZYSTKIE ciągi są obecne w de, en, pl, ale jednego brakuje domyślnie, to aplikacja zawiesza się na przykład w Chinach (oczywiście rozumiem, ponieważ brakuje wartości domyślnej).

Ale to, co mnie martwi, to to, że nie znajduję żadnego sposobu sprawdzenia kompletności wszystkich odnośników w kodzie. W ten sposób mogę uzyskać dostęp brakujący ciąg:

context.getString(R.string.MYTRING_abc), 
+0

z mojego expiriens jeśli istnieją brakujące ciągi projekt nie kompiluje. Używam eclipse juno. – NickF

+0

Jeśli przetestujesz swoją aplikację we wszystkich dostępnych językach, nie będziesz musiał zadawać tego pytania. Dla mnie to nie ma sensu, dlaczego po prostu nie upewniasz się, że ciągi są dostępne przed opublikowaniem aplikacji. Nie wszystkie wyjątki powinny być chwytane, powinny być rozpatrywane zanim zdążą. – Darwind

+1

"Mam aplikację przetłumaczoną na 3 języki: angielski, niemiecki, polski" - nie, masz przetłumaczoną aplikację w czterech językach: angielskim, niemieckim, polskim i dowolnym języku w katalogu 'res/values ​​/'. Jeśli naprawdę masz tylko przetłumaczoną aplikację na trzy języki, to jeden z tych języków musi przejść do 'res/values ​​/'. Chcesz, aby 'res/values ​​/' zawierało domyślną wartość dla każdego zasobu ciągu, niezależnie od tego, jaki chcesz mieć domyślny język. – CommonsWare

Odpowiedz

3

w Eclipse menu Window --> Properties --> Android --> Lint Error Checking w sekcji Correctness:Messages ustawić MissingTranslation do błędu w polu Severity. Podczas kompilacji w domyślnych wartościach ciąg.xml każdy nieprzetłumaczony ciąg będzie oznaczony. W większości przypadków po zakończeniu kompilacji należy kliknąć ikonę refresh icon w oknie Link Warnings (obok Outline window), aby wyświetlić te błędy.
Jeśli po naprawieniu wystąpił błąd, należy wyczyścić projekt, w przeciwnym razie Eclipse nie zbuduje i nadal będzie wyświetlać te błędy.

+0

dziękuję Sprawdziłem, że mój jest ustawiony na śmiertelny – user387184

2

Spodziewałbym się, że system właśnie pobiera ciąg z folderu wartości domyślnych, jeśli nie znajduje go w folderze values-pl.

Działa to w ten sposób dla <string> s, ale nie dla elementów z <string-array> s. Jeśli jedno z tłumaczeń ma numer <string-array> bez poprawnej liczby elementów, wystąpi awaria, jeśli aplikacja spróbuje uzyskać dostęp do brakującego elementu. Moje rozwiązanie dla ostatnich kilku lat polegało na przechowywaniu każdej tablicy napisów w nieprzetłumaczonym pliku XML, odwołując się do możliwych do przetłumaczenia łańcuchów.

res/wartości/misc.xml:

<?xml version="1.0" encoding="utf-8"?> 
<!-- Resources that are neither styles nor strings to be translated. --> 
<resources> 
    <string-array name="notification_line_content_entries"> 
    <item>@string/time_remaining</item> 
    <item>@string/time_since_status_change</item> 
    <item>@string/vital_signs</item> 
    </string-array> 
</resources> 

ten sposób, jeśli jedna z niezależnych ciągów nie jest tłumaczony, tablica jest nadal ważna i spaść z powrotem do tłumaczenia domyślnej dla tego konkretnego wartość.

Oczywiście inna możliwość jest taka, jak sugerowano w komentarzach, nie ma domyślnych tłumaczeń dla każdego ciągu znaków w res/values/.

+0

dzięki, jest to zwykły ciąg znaków i brakuje go w katalogu wartości, ale nie ma żadnego ostrzeżenia ani niczego innego! – user387184

0

W Android Studio:

Settings -> Editor -> Inspections -> (search for or find) Incomplete translation 

Ustaw info lub warning. Error zapobiega tworzeniu aplikacji po naciśnięciu klawisza create signed APK.

Z mojego doświadczenia wynika, że ​​ten błąd występuje tylko podczas tworzenia kompilacji (debugowanie bez debugowania przez USB, co oznacza, że ​​jest to podpisana kompilacja), ale zmiana niepełnego tłumaczenia na warning (tak, otrzymuję powiadomienie, że to nie jest nie zostało to zignorowane, na wypadek, gdybym zapomniała) (lub, jeśli o to chodzi, info), pozwala na zbudowanie aplikacji i działa tak jak w debugowaniu, gdzie niekompletne tłumaczenia idą do wartości domyślnej.

Ale jeśli wystąpi błąd w debugowania, a także, co powinno nadal działać i zapobiec awarii w tworzeniu APK

Powiązane problemy