Aby dokończyć etykietę aplikacji Mac z odmianą zależną od liczby, dodaj warianty liczby mnogiej w Xcode, uzupełnij wszystkie kategorie wymagane dla każdej obsługiwanej lokalizacji i przetestuj wyświetlane wyniki. W tym przewodniku użyto przykładowego komunikatu o zaznaczaniu elementów.
Zadanie polega na dokończeniu jednej etykiety zależnej od liczby w aplikacji SwiftUI na Maca. Komunikat informuje, ile elementów jest zaznaczonych, przyjmuje nieujemną liczbę całkowitą i zachowuje to znaczenie w tłumaczeniach. Opisany proces łączy sprawdzanie pokrycia kategorii, placeholderów i wyników działania aplikacji, aby gotowy wpis katalogu spełniał jasne kryteria akceptacji.
Co jest potrzebne do pełnego pokrycia form liczby mnogiej?
Apple zaleca korzystanie z katalogów ciągów do lokalizacji liczby mnogiej w Xcode 15 i nowszych wersjach. Dokumentacja dotycząca form liczby mnogiej rozróżnia wymagany wariant domyślny od kompletności gramatycznej: other jest obowiązkowy w słowniku ciągów, ale pominięcie dodatkowych kategorii specyficznych dla języka może prowadzić do błędów gramatycznych. W języku angielskim wymagane są one i other; kategoria zero jest opcjonalna. Lokalizowanie ciągów zawierających formy liczby mnogiej.
Możliwe nazwy kategorii to zero, one, two, few, many i other. Opisują one zależne od języka grupy gramatyczne, a nie sześć zakresów liczbowych wspólnych dla każdego języka. Kategoria o nazwie one nie powinna prowadzić do uniwersalnej reguły aplikacji, która sprawdza wyłącznie, czy liczba wynosi jeden. Unicode definiuje kategorie na podstawie zmian wymaganych przez liczebniki w zdaniu, także tych wykraczających poza sam rzeczownik. Reguły liczby mnogiej.
W tym zadaniu obowiązuje poniższa umowa dotycząca komunikatu. Są to przykładowe wymagania aplikacji, a nie wymagania narzucone przez Apple.
| Pole umowy | Wymaganie w tym przykładzie |
|---|---|
| Klucz komunikatu | selection.count |
| Domyślna wartość angielska | \(count) items selected |
| Dane wejściowe | Jedna nieujemna wartość Swift Int o nazwie count |
| Znaczenie | Liczba aktualnie zaznaczonych elementów |
| Wynik | Jedna kompletna zlokalizowana etykieta zawierająca liczbę |
| Pokrycie | Każda obsługiwana lokalizacja, w tym lokalizacja źródłowa |
| Kryteria akceptacji | Uzupełnione wymagane kategorie, zachowane podstawianie liczby, sprawdzone przykładowe wyniki |
Wymóg wyświetlania liczby to celowy wybór dla tej etykiety. Apple dopuszcza warianty liczby mnogiej, które zapisują liczbę słownie albo pomijają specyfikator formatu liczbowego. Inna umowa dotycząca komunikatu mogłaby to dopuszczać. Tutaj widoczna liczba ułatwia porównanie etykiety z opisywanym zaznaczeniem. Lokalizowanie ciągów zawierających formy liczby mnogiej.
Powiąż komunikat Swift z katalogiem
Typ String.LocalizationValue w Swift obsługuje tekst lokalizowalny z interpolacją wykonywaną w czasie działania. Gdy stabilny identyfikator ma się różnić od angielskiego tekstu źródłowego, Apple wskazuje inicjalizator String z osobnym argumentem defaultValue. Pasuje to do selection.count: identyfikator nazywa komunikat, a wartość domyślna określa jego angielskie brzmienie. String.LocalizationValue.
W przypadku małej aplikacji testowej utwórz w Xcode 15 lub nowszym projekt aplikacji macOS korzystającej ze SwiftUI, z docelową wersją macOS 12 lub nowszą. Zastąp wygenerowany plik wejściowy aplikacji kompletnym programem poniżej; w obrębie celu pozostaw tylko jedną deklarację @main. Zanim przejdziesz do kroków dotyczących katalogu, dodaj Localizable.xcstrings do celu aplikacji. Program wymaga Xcode i SDK macOS; nie został skompilowany w tym środowisku badawczym.
import Foundation
import SwiftUI
@main
struct PluralSampleApp: App {
var body: some Scene {
WindowGroup {
PluralSampleView()
}
}
}
struct PluralSampleView: View {
@State private var count: Int = 1
private let samples: [Int] = [
0, 1, 2, 3, 4, 5, 10, 11, 12,
20, 21, 22, 100, 101, 102, 1_000_000
]
private var selectionLabel: String {
String(
localized: "selection.count",
defaultValue: "\(count) items selected",
comment: "Selection summary. The integer is the number of selected items. Keep the count visible in every plural variant."
)
}
var body: some View {
VStack(alignment: .leading, spacing: 16) {
Picker("Sample count", selection: $count) {
ForEach(samples, id: \.self) { value in
Text(verbatim: String(value)).tag(value)
}
}
Text(verbatim: selectionLabel)
}
.padding(24)
.frame(minWidth: 360)
}
}
Pozycje selektora liczbowego są danymi testowymi. Zlokalizowane podsumowanie jest rozwiązywane przez String(localized:defaultValue:comment:), a następnie wyświetlane jako wynikowy ciąg. Apple dokumentuje, że pierwszy argument inicjalizatora podaje klucz wyszukiwania, wartość domyślna dostarcza tekst źródłowy, a komentarze zapewniają kontekst tłumaczenia. Podczas kompilacji Xcode wyodrębnia ciągi przekazane przez API obsługujące lokalizację. Przygotowywanie tekstu aplikacji do tłumaczenia.
Pozostaw liczbę całkowitą wewnątrz lokalizowalnej interpolacji. W ramach tej umowy nie twórz osobnych angielskich zdań dla liczby pojedynczej i mnogiej w gałęziach kodu aplikacji. Jeden komunikat jasno określa zadanie katalogu: dobranie odpowiedniego zlokalizowanego tekstu do podanej liczby.
Uzupełnij kategorie dla każdej obsługiwanej lokalizacji
Użyj edytora Xcode, aby utworzyć strukturę wariantów:
- Wybierz
Product > Build, aby wypełnić katalog. - Otwórz
Localizable.xcstringsi wybierz lokalizację źródłową. - Kliknij
selection.countz wciśniętym klawiszem Control i wybierzVary by Plural. - Uzupełnij każdy wariant języka źródłowego.
- Dodaj obsługiwane lokalizacje za pomocą przycisku
Addna pasku bocznym, a następnie uzupełnij ich warianty.
Xcode dodaje formy liczby mnogiej specyficzne dla języka i określa specyfikator formatu interpolacji. Zastosowanie wariantów liczby mnogiej do lokalizacji źródłowej synchronizuje ich strukturę między językami; zastosowanie tej opcji wyłącznie do innej lokalizacji wpływa tylko na nią. Lokalizowanie tekstu i tworzenie jego wariantów za pomocą katalogu ciągów.
Dla tej interpolacji liczby całkowitej wpisy angielskie mogą wyglądać następująco:
| Kategoria angielska | Wartość w katalogu |
|---|---|
one |
%lld item selected |
other |
%lld items selected |
Użyj specyfikatora wygenerowanego przez Xcode dla rzeczywistego typu interpolacji. W udokumentowanym przez Apple przykładzie liczby całkowitej użyto %lld; skopiowanie do tłumaczenia innego placeholdera może naruszyć zgodność argumentu. Xcode początkowo wypełnia pola wariantów wartością klucza, dlatego sprawdź tekst w każdym polu. Lokalizowanie tekstu i tworzenie jego wariantów za pomocą katalogu ciągów.
Przygotuj arkusz pokrycia zawierający po jednym wierszu dla każdego rzeczywistego identyfikatora lokalizacji. Zapisz kategorie wygenerowane przez Xcode dla tego komunikatu, informację, czy każda z nich zawiera gotowy tekst, oraz dane wejściowe, które zamierzasz przetestować. Użycie rzeczywistych identyfikatorów projektu zapobiega sytuacji, w której ogólna nazwa języka ukrywa niezweryfikowaną lokalizację.
Nie kopiuj zestawu angielskich kategorii do każdego wiersza. Nie wymagaj też wszędzie wszystkich sześciu kategorii. Pozwól, by katalog utworzył roboczą strukturę, a następnie sprawdź kardynalne reguły liczby mnogiej danego języka, dobierając dane testowe. Reguły kardynalne dotyczą ilości; reguły porządkowe dotyczą pozycji i odpowiadają na inne pytanie. Unicode opisuje je jako odrębne typy reguł. Standard techniczny Unicode nr 35: Liczby.
Osobno sprawdź strukturę, placeholdery i wyświetlany tekst
Wykonaj trzy kontrole, ponieważ każda odpowiada na inne pytanie. Brakująca kategoria oznacza problem z pokryciem, nieprawidłowy placeholder — problem z formatowaniem, a niezgrabne zdanie — problem z brzmieniem. Osobne zapisanie tych kwestii ułatwia określenie, co należy poprawić.
Sprawdź pokrycie kategorii
Dla każdego wiersza arkusza porównaj oczekiwane kategorie z uzupełnionymi wpisami katalogu. Upewnij się, że istnieje other, a żadna oczekiwana kategoria nie ma pustej wartości ani niedokończonej kopii tekstu źródłowego.
Aby prosto sprawdzić kompletność, zdefiniuj oczekiwany zbiór jako kategorie wygenerowane dla danej lokalizacji oraz wszelkie celowe, obsługiwane nadpisania. Zbiór brakujących kategorii to oczekiwany zbiór pomniejszony o kategorie zawierające gotowy tekst. Każdy brakujący element oznacza, że komunikat jest niedokończony według kryteriów akceptacji z tego artykułu. To praktyczna metoda przeglądu oparta na udokumentowanym procesie tworzenia wariantów, a nie twierdzenie, że Xcode wymusza dokładnie tę listę kontrolną.
Jeśli dwie kategorie mają zgodnie z regułami identyczne brzmienie, pozostaw ten tekst tam, gdzie jest potrzebny, i sprawdź oba wpisy. Celem jest zachowanie znaczenia komunikatu we wszystkich wymaganych kategoriach; nie jest konieczne, aby każda para ciągów widocznie się różniła.
Sprawdź podstawianie liczby
Skompiluj projekt i sprawdź diagnostykę katalogu. Apple dokumentuje walidację katalogów ciągów pod kątem typowych problemów, takich jak niezgodne specyfikatory formatu. Usuń wykryte problemy, a następnie sprawdź, czy każdy wariant nadal spełnia wymaganie tego komunikatu dotyczące wyświetlania liczby. Tworzenie aplikacji gotowych na wiele języków.
W tym przykładzie z jednym argumentem sprawdź, czy placeholder liczbowy jest obecny, nadal określa liczbę i pojawia się raz we właściwym miejscu. Pomyślna kompilacja jest przydatnym potwierdzeniem, ale decyzja o akceptacji wymaga też pokrycia kategorii i sprawdzenia rzeczywiście wyświetlanego tekstu.
Testuj reprezentatywne liczby w aplikacji Mac
Wybierz Product > Scheme > Edit Scheme, zaznacz Run i otwórz Options. Ustaw App Language i odpowiedni App Region, zamknij okno dialogowe i uruchom aplikację Mac. Powtórz te czynności dla każdej obsługiwanej lokalizacji. Apple dokumentuje tę procedurę opartą na schemacie do testowania zlokalizowanych wyników. Testowanie lokalizacji podczas uruchamiania aplikacji.
Przykładowy selektor zawiera zestaw liczb na początek testów, a nie uniwersalne pokrycie kategorii. Zanim uznasz wiersz testowy danej lokalizacji za kompletny, dodaj wartości odpowiednie dla tej lokalizacji.
| Wybór testowy | Co sprawdza |
|---|---|
0, 1 i 2 |
Brak elementów, zaznaczenie jednego elementu i zaznaczenie niewielu elementów |
| Co najmniej jedna reprezentatywna wartość dla każdej wymaganej kategorii | Pokrycie rozróżnień gramatycznych danej lokalizacji |
| Wartości po obu stronach istotnych granic reguł | Zmiany kategorii wykraczające poza najmniejsze liczby |
| Duża prawidłowa liczba | Podstawianie liczby i dostępna przestrzeń na etykietę |
| Każda testowana wartość | Znaczenie, kompletne brzmienie i widoczna liczba |
Reguły Unicode wiążą kategorie z warunkami i przykładowymi wartościami; znaczenie mogą mieć szczegóły liczbowe, w tym cyfry ułamkowe. Ta umowa dopuszcza wyłącznie liczby całkowite. Jeśli aplikacja zacznie później przyjmować wartości dziesiętne, zmień jednocześnie interpolację, tekst źródłowy i testy, zamiast zakładać, że wyniki dla liczb całkowitych nadal zapewniają pokrycie. Standard techniczny Unicode nr 35: Liczby.
Zdiagnozuj nieoczekiwany wynik
Na podstawie zaobserwowanego objawu wybierz, co sprawdzić w następnej kolejności:
| Objaw | Następne działanie |
|---|---|
Brak selection.count w katalogu |
Ponownie skompiluj projekt i sprawdź wywołanie lokalizowalne oraz wybraną tabelę |
| Tylko jedna lokalizacja ma warianty liczby mnogiej | Sprawdź ponownie, do której lokalizacji zastosowano Vary by Plural |
| Wariant nadal zawiera angielski tekst zależny od liczby mnogiej | Sprawdź wstępnie wypełnione pole i uzupełnij gotowe tłumaczenie |
| Wyświetlana liczba jest nieobecna lub nieprawidłowa | Porównaj placeholder wariantu ze specyfikatorem wygenerowanym przez Xcode i umową dotyczącą komunikatu |
| Dla większej liczby pojawia się nieoczekiwane brzmienie | Sprawdź regułę kategorii tej lokalizacji i dodaj reprezentatywny test |
| Prawidłowy tekst nie mieści się | Dostosuj widok i ponownie przetestuj całą etykietę |
W starszym projekcie używającym Xcode w wersji wcześniejszej niż 15 Apple zaleca obsługiwaną ścieżkę opartą na zasobach .strings i .stringsdict. Słownik form liczby mnogiej dostarcza warianty specyficzne dla języka i wymaga other; nie zwalnia to z obowiązku uzupełnienia pozostałych kategorii potrzebnych do poprawności gramatycznej. Lokalizowanie ciągów zawierających formy liczby mnogiej.
Komunikat jest gotowy, gdy dla każdej obsługiwanej lokalizacji uzupełniono wiersz pokrycia, placeholdery spełniają warunki umowy, a przykładowe liczby wyświetlają zamierzoną etykietę w uruchomionej aplikacji. Wróć do tych wierszy, gdy zmienią się obsługiwane lokalizacje, typ danych liczbowych lub znaczenie komunikatu.
Źródła
- Lokalizowanie tekstu i tworzenie jego wariantów za pomocą katalogu ciągów — Apple
- Lokalizowanie ciągów zawierających formy liczby mnogiej — Apple
- String.LocalizationValue — Apple
- Przygotowywanie tekstu aplikacji do tłumaczenia — Apple
- Testowanie lokalizacji podczas uruchamiania aplikacji — Apple
- Tworzenie aplikacji gotowych na wiele języków — Apple
- Reguły liczby mnogiej — Konsorcjum Unicode
- Standard techniczny Unicode nr 35: Unicode Common Locale Data & Rules (CLDR), część 3: Liczby — Konsorcjum Unicode