Zasadniczo na wielu platformach piszę moje ciągi znaków do pliku .resx lub .xml, a następnie otrzymuję je stosując podejście zależne od platformy.
To znaczy, na iOS, otrzymuję je przez NSBundle.MainBundle
i Context.Resources
na Androidzie.
Jakie są zalety tego podejścia i dlaczego nie ma go bezpośrednio dostępnego w kodzie, więc na przykład:
W projekcie międzyplatformowym każda platforma może uzyskać do niej bezpośredni dostęp, bez integracji.
Podczas budowania nie ma obaw, czy dobrze zbudowane zasoby.
- Koder może korzystać z takich funkcji, jak obsługa wielu języków
Krótko mówiąc: jaki jest powód, dla którego zasoby łańcuchowe mają taką strukturę?
[Edytować]
Powiedzmy, że mój plik jest częścią „podstawowego” projektu współdzielonego przez inny projekt. (Pomyśl o PCL, wieloplatformowej strukturze plików projektu).
Załóżmy, że mój plik jest całkowicie podobny do pliku .resx / .xml i wygląda następująco (nie jestem profesjonalistą w xml, przepraszam!): Parametry Paramètres
Jest to więc w zasadzie niestandardowy plik XML, w którym wskazujesz klucz / język, aby uzyskać odpowiedni ciąg.
Plik byłby częścią aplikacji, tak jak dodajesz dowolny dostępny plik w aplikacji, a system uzyskuje dostęp do zasobów ciągu, kodowany przy użyciu PCL. Czy spowodowałoby to dodatkowe obciążenie aplikacji?
źródło
Odpowiedzi:
Lokalizacja i internacjonalizacja,
Zachowanie ciągów zewnętrznych pozwala im się zmieniać (czytać: przetłumaczone) bez potrzeby ponownej kompilacji (co najwyżej tylko ponowne połączenie i po prostu wrzucenie nowego folderu w najlepszym wypadku).
źródło
Jeśli masz plik, który zawiera tylko zasoby ciągów, możesz przekazać go do biura tłumaczeń lub czegoś podobnego i uzyskać tłumaczenie. Wydaje mi się, że możesz sobie wyobrazić, jak ciężko by to było, gdybyś musiał dać wiele plików kodowych laikowi, aby wykonał tłumaczenie (oprócz tego, że nie chciałbyś nikomu rozdawać kodu).
źródło
Oprócz internacjonalizacji / lokalizacji oddzielanie ciągów tekstowych w ten sposób pozwala korektorowi na przesyłanie poprawek do pisowni / gramatyki / interpunkcji, które są izolowane
messages.${LOCALE}
, bez konieczności dotykania prawdziwego pliku kodu źródłowego. Możesz mieć zaciemnienie przy zmianach kodu, ale zaakceptuj takie poprawki tekstu. Jeśli akceptujesz jednoczesne zmiany zarówno kodu, jak i komunikatów, ich oddzielenie ułatwia scalenie poprawek, pod warunkiem, że zmiany w kodzie nie redefiniują żadnych wiadomości, które istniały podczas sprawdzania korektoramessages.en_US
.Ponadto, w zależności od sposobu implementacji, ponowne połączenie aplikacji może nie być konieczne. Kod może po prostu pobrać linię 138
messages.${LOCALE}
dla określonego komunikatu, przy czym numer linii jest określany w czasie wykonywania.źródło
W ten sposób Twój język / platforma zdecydowała się na wdrożenie lokalizacji ciągów znaków. Wszystkie podejścia do lokalizacji wymagają pewnego rodzaju zewnętrznych plików zasobów, z których można uzyskać tłumaczenia. Głównym problemem jest to, jak utrzymujesz te zasoby.
Wygląda na to, że musisz ręcznie zarządzać tymi plikami zasobów , co może być dużym obciążeniem. Komplikuje to także współdzielenie powtarzających się ciągów. A konieczność zrobienia tego, gdy obecnie wysyłasz tylko jeden język, jest jeszcze większym obciążeniem.
Powszechną alternatywą jest podejście GNU Gettext polegające na oznaczaniu możliwych do przetłumaczenia ciągów w kodzie źródłowym i automatycznym wyodrębnianiu tych ciągów do standardowych plików PO, które działają ładnie na różnych platformach i między językami. Z perspektywy programisty każdego dnia pokonuje ręczną konserwację plików zasobów XML.
źródło