SwiftLingo
Localization is time-consuming so I made a package to automate the task.
Steps to setup, only take a few minutes!
- Import the pacakge
https://github.com/kumarneel/SwiftLingo
- Setup a folder where you would like to store your localized information
-
Create a
.swift
file calledLocalizableStrings
-
Create a
.string
file calledLocalizable
, Xcode will automatically call it by this name
- Go to Project Settings tab
Info
- Go to the Localization Section
![Screenshot 2023-12-15 at 1 15 46 PM](https://private-user-images.githubusercontent.com/19336901/290938337-a67b11e1-3994-4033-9eaf-b621c77f671b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MDQ1MDY4NjUsIm5iZiI6MTcwNDUwNjU2NSwicGF0aCI6Ii8xOTMzNjkwMS8yOTA5MzgzMzctYTY3YjExZTEtMzk5NC00MDMzLTllYWYtYjYyMWM3N2Y2NzFiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDAxMDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwMTA2VDAyMDI0NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWM1NmNjZGVjMTU0YmQxZDRmZDZjOTE1MTVkMGQ1ZTMwZGM5NGM2NWU2ZWFhNDY5ZjY2Y2RmZTg0OTUzZDI3MDQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.Ab1ZKWcEsjh-K_GLi7t3LT28d-YskoKVbOc5j6Ao17M)
- Click
+
and add any Language that you would like to translate into
- NOTE, these language codes are important and will passed into SwiftPackage Initializer
![Screenshot 2023-12-15 at 1 18 39 PM](https://private-user-images.githubusercontent.com/19336901/290938782-3691106a-99a5-4b42-909d-b531b7e5040e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MDQ1MDY4NjUsIm5iZiI6MTcwNDUwNjU2NSwicGF0aCI6Ii8xOTMzNjkwMS8yOTA5Mzg3ODItMzY5MTEwNmEtOTlhNS00YjQyLTkwOWQtYjUzMWI3ZTUwNDBlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDAxMDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwMTA2VDAyMDI0NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTA4NGM0YTRkZTk1ZjhhM2I2MzdmODIxNjQyNmVjNzk5ZDVhMWY0MDNiMDAyZjQ5Y2E4NGZjNDgzZDM3OTI0YzEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.hy4q-d0DIgVbb85DPVQKlJvGCqCsTYDAKXr2tTbh3Rw)
- Go back to your
Localizable.strings
file. Go to the navigation tab on the right and click Localize...
![Screenshot 2023-12-15 at 1 22 24 PM](https://private-user-images.githubusercontent.com/19336901/290939344-85feca07-6646-4dda-823a-8828da6d5187.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MDQ1MDY4NjUsIm5iZiI6MTcwNDUwNjU2NSwicGF0aCI6Ii8xOTMzNjkwMS8yOTA5MzkzNDQtODVmZWNhMDctNjY0Ni00ZGRhLTgyM2EtODgyOGRhNmQ1MTg3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDAxMDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwMTA2VDAyMDI0NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTAzNTNhM2ZkZDZhMjg5ZTIzZTJhNzkxY2NmMjc0NDg0N2I1YjYwZTQ5MWFjMmZmZTM5YjM5ZTQ0ZjgwYTU1N2UmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.A5lugF58GSBmOr0Z40oYD7g79gez7SMjcmklzRBXrgg)
- Check the languages you just added to be localized
![Screenshot 2023-12-15 at 1 23 10 PM](https://private-user-images.githubusercontent.com/19336901/290939462-318261d0-376f-46a3-b18a-b1569c48823b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MDQ1MDY4NjUsIm5iZiI6MTcwNDUwNjU2NSwicGF0aCI6Ii8xOTMzNjkwMS8yOTA5Mzk0NjItMzE4MjYxZDAtMzc2Zi00NmEzLWIxOGEtYjE1NjljNDg4MjNiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDAxMDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwMTA2VDAyMDI0NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWIxOGFhOWJlZTJmZDM2YjQyOTk1NTJlZTNhYzMzOWQzM2RmNjQyYTE5MjJjODZjOTY4NGE4YWM5OTBmZDJkYjkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.JbX8TdTOJV0o50PSUAbgVvfMDbYM3TsuwnvGEeCJB74)
- They will now appear under the file you have created
![Screenshot 2023-12-15 at 1 23 40 PM](https://private-user-images.githubusercontent.com/19336901/290939521-e679be35-045e-411c-adb0-feacb35fed2f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MDQ1MDY4NjUsIm5iZiI6MTcwNDUwNjU2NSwicGF0aCI6Ii8xOTMzNjkwMS8yOTA5Mzk1MjEtZTY3OWJlMzUtMDQ1ZS00MTFjLWFkYjAtZmVhY2IzNWZlZDJmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDAxMDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwMTA2VDAyMDI0NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWI3NGQ0Y2M3YjlmMWJiNzI4ZDM4NTIxYmVhNGUxYjA5OTMwMzczNTNlOWFlMTI3ZTk3MWJmYTEyODViNTBhYTAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.uAc_AuBMOI8O6cgB-aF9bs_YXEJlAE9dfVGZU1ZpRBk)
Usage
Create your first key in your English Translation file
"log_in_title" = "Login";
Import SwiftLingo
Initialize in AppDelegate or anywhere AND RUN ON SIMULATOR
// Path to root directory where files are stored
// 'fr' is the French Language Code
SL.initialize(
directoryPath: "/Users/photos/Desktop/Localization/SwiftLingoTest/SwiftLingoTest/Localization",
desiredLanguages: ["en", fr"],
openAPIKey: "your_API_KEY"
)
Watch as files auto-populate once logs are complete
Use localized string variable in View
struct ContentView: View {
var body: some View {
VStack {
Text(LocalizableStrings.log_in_title)
}
.padding()
}
}