Katalogi String i zlokalizowane ciągi
Lokalizowanie tekstu za pomocą nowoczesnego katalogu String.
Katalogi String i zlokalizowane ciągi to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.
Po co w ogóle lokalizować
Lokalizacja (l10n) oznacza prezentowanie tekstu aplikacji w języku użytkownika, natomiast internacjonalizacja (i18n) oznacza taką strukturę kodu, która umożliwia lokalizację. Pierwszym krokiem jest zaprzestanie umieszczania tekstów widocznych dla użytkownika bezpośrednio w kodzie i pobieranie ich z katalogu zasobów.
// Hardcoded — bad for localization
// let title = "Welcome"
// Localized — looked up by key
let title = String(localized: "Welcome")Katalogi String Catalog
Nowoczesne projekty Xcode używają String Catalog (pliku .xcstrings). Jest to pojedynczy plik oparty na formacie JSON, zawierający wszystkie klucze podlegające lokalizacji, ich tłumaczenia dla poszczególnych języków oraz metadane, takie jak komentarze i informacje o liczbie mnogiej. Xcode może automatycznie wydobywać klucze z kodu.
// Localizable.xcstrings holds entries like:
// key: "Welcome"
// en: "Welcome"
// tr: "Hos geldiniz"
// ja: "Yokoso"String(localized:)
W kodzie String(localized:) rozwiązuje klucz w czasie działania, zwracając tłumaczenie dla bieżącego ustawienia regionalnego. Przekazany literał jest jednocześnie kluczem i wartością zapasową w języku deweloperskim.
let greeting = String(localized: "Welcome back")
let cancel = String(localized: "Cancel")
print(greeting)Dodawanie komentarzy dla tłumaczy
Samo słowo Run może oznaczać uruchamianie albo jogging. Parametr comment: zapewnia tłumaczom kontekst, dzięki czemu mogą wybrać właściwe sformułowanie. Komentarze są automatycznie przenoszone do String Catalog.
let runLabel = String(
localized: "Run",
comment: "Button that executes the user's code")Interpolowanie wartości
Można osadzać wartości czasu działania w lokalizowanym ciągu znaków. Swift zamienia każdą interpolację na symbol zastępczy formatu, aby tłumacze mogli zmieniać ich kolejność. W różnych językach podmiot i liczba występują w różnych miejscach.
let name = "Mira"
let count = 3
let msg = String(localized: "\(name) has \(count) new messages")
print(msg)LocalizedStringKey w SwiftUI
W SwiftUI rzadko wywołuje się bezpośrednio String(localized:). Większość widoków przyjmujących tekst akceptuje LocalizedStringKey, więc zwykły literał tekstowy jest lokalizowany automatycznie.
// In SwiftUI — the literal is a LocalizedStringKey
// Text("Welcome back") // auto-localized
// Button("Save") { save() } // auto-localized
let key: LocalizedStringKey = "Welcome back"
_ = keyUnikanie przypadkowej lokalizacji
Ponieważ SwiftUI traktuje literały jako klucze, dynamiczna zmienna typu String nie jest lokalizowana. Jeśli utworzysz tekst przez konkatenację, katalog nigdy nie zobaczy rzeczywistego klucza. Gdy chcesz użyć lokalizacji, przekazuj pojedynczy literał, a gdy celowo jej nie chcesz — używaj verbatim:.
let userInput = "hello"
// Text(userInput) // NOT a localization key
// Text(verbatim: userInput) // explicitly raw, never localized
let verbatimKey = userInput
_ = verbatimKeyOkreślanie tabeli
Duże aplikacje dzielą ciągi znaków na wiele katalogów (tabel). Można wskazać konkretną tabelę i pakiet, co jest niezbędne podczas dostarczania ciągów znaków wewnątrz frameworka lub pakietu Swift.
let onboardingTitle = String(
localized: "Get Started",
table: "Onboarding",
bundle: .main)LocalizedStringResource
LocalizedStringResource reprezentuje lokalizowalny ciąg znaków jako wartość, którą można przechowywać i rozwiązać później, nawet między procesami (co przydaje się w App Intents i widżetach). Rzeczywiste wyszukiwanie odracza do momentu wyświetlania.
let resource = LocalizedStringResource("Order shipped")
// Resolve later, possibly in another locale context
let resolved = String(localized: resource)
print(resolved)Domyślna lokalizacja
Język deweloperski projektu zapewnia wartość zapasową, gdy brakuje tłumaczenia. Literał tekstowy zapisany w kodzie jest traktowany jako wartość w języku źródłowym, dzięki czemu kod pozostaje czytelny i użytkownikom nigdy nie wyświetlasz surowego klucza, takiego jak welcome_screen_title.
// If only 'en' is translated and device is set to 'fr',
// the development-language value is shown as fallback.
let fallback = String(localized: "Settings")
print(fallback)Praktyczne wyszukiwanie
Połączmy wszystko: funkcja zwracająca w pełni zlokalizowany komunikat z adnotacją kontekstową i interpolacją, gotowy do użycia w dowolnym interfejsie użytkownika.
func welcomeMessage(for user: String) -> String {
return String(
localized: "Welcome, \(user)!",
comment: "Greeting shown after sign-in")
}
print(welcomeMessage(for: "Ada"))Szybkie sprawdzenie
Przypomnij sobie, jak SwiftUI decyduje, czy lokalizować tekst.
Podsumowanie
Utworzyłeś podstawy lokalizowanego tekstu:
- Przechowuj tłumaczenia w String Catalog (pliku
.xcstrings). - Wyszukuj ciągi znaków za pomocą
String(localized:), dodająccomment:dla tłumaczy. - W SwiftUI literały stają się obiektami
LocalizedStringKeyi są lokalizowane automatycznie, a zmienne nie. - Używaj
table:/bundle:w przypadku frameworków orazLocalizedStringResourcedo odroczonego rozwiązywania.
Często zadawane pytania
Czy lekcja „Katalogi String i zlokalizowane ciągi” jest bezpłatna?
Tak — pełny tekst „Katalogi String i zlokalizowane ciągi” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Katalogi String i zlokalizowane ciągi”?
Lokalizowanie tekstu za pomocą nowoczesnego katalogu String. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Swift Academy?
Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Katalogi String i zlokalizowane ciągi”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?
Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Katalogi String i zlokalizowane ciągi
- Liczba mnoga i Stringsdict
- Formatowanie zależne od ustawień regionalnych
- Kierunek od prawej do lewej i kierunek układu