feat: Convert localization from xcstrings to traditional .strings format

- Migrate from Localizable.xcstrings to .lproj structure for Weblate compatibility
- Create Base, English, and German localization directories
- Update Xcode project configuration to use .strings files
- Clean up unused xcstrings references from project file
This commit is contained in:
Ilyas Hallak 2025-08-28 18:50:11 +02:00
parent 953ff5da8d
commit 2f55da92c0
5 changed files with 266 additions and 43 deletions

View File

@ -48,9 +48,6 @@
},
"%lld min" : {
},
"%lld minutes" : {
},
"%lld." : {
@ -102,12 +99,6 @@
},
"Are you sure you want to log out? This will delete all your login credentials and return you to setup." : {
},
"Automatic sync" : {
},
"Automatically mark articles as read" : {
},
"Available tags" : {
@ -120,9 +111,6 @@
},
"Changes take effect immediately. Lower log levels include higher ones (Debug includes all, Critical includes only critical messages)." : {
},
"Clear cache" : {
},
"Close" : {
@ -132,9 +120,6 @@
},
"Critical" : {
},
"Data Management" : {
},
"Debug" : {
@ -273,9 +258,6 @@
},
"OK" : {
},
"Open external links in in-app Safari" : {
},
"Optional: Custom title" : {
@ -319,18 +301,12 @@
}
}
}
},
"Reading Settings" : {
},
"Remove" : {
},
"Reset" : {
},
"Reset settings" : {
},
"Reset to Defaults" : {
@ -340,9 +316,6 @@
},
"Resume listening" : {
},
"Safari Reader Mode" : {
},
"Save bookmark" : {
@ -391,12 +364,6 @@
},
"Speed" : {
},
"Sync interval" : {
},
"Sync Settings" : {
},
"Syncing with server..." : {

View File

@ -10,8 +10,6 @@
5D2B7FB92DFA27A400EBDB2B /* URLShare.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 5D2B7FAF2DFA27A400EBDB2B /* URLShare.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
5D348CC32E0C9F4F00D0AF21 /* netfox in Frameworks */ = {isa = PBXBuildFile; productRef = 5D348CC22E0C9F4F00D0AF21 /* netfox */; };
5DA241FB2E17C3B3007531C3 /* RswiftLibrary in Frameworks */ = {isa = PBXBuildFile; productRef = 5DA241FA2E17C3B3007531C3 /* RswiftLibrary */; };
5DA242132E17D31A007531C3 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 5DA242122E17D31A007531C3 /* Localizable.xcstrings */; };
5DA242142E17D31A007531C3 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 5DA242122E17D31A007531C3 /* Localizable.xcstrings */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@ -67,7 +65,6 @@
5D45F9C82DF858680048D5B8 /* readeck.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = readeck.app; sourceTree = BUILT_PRODUCTS_DIR; };
5D45F9DE2DF8586A0048D5B8 /* readeckTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = readeckTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
5D45F9E82DF8586A0048D5B8 /* readeckUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = readeckUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
5DA242122E17D31A007531C3 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
@ -172,7 +169,6 @@
5D45F9BF2DF858680048D5B8 = {
isa = PBXGroup;
children = (
5DA242122E17D31A007531C3 /* Localizable.xcstrings */,
5D45F9CA2DF858680048D5B8 /* readeck */,
5D45F9E12DF8586A0048D5B8 /* readeckTests */,
5D45F9EB2DF8586A0048D5B8 /* readeckUITests */,
@ -349,7 +345,6 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
5DA242132E17D31A007531C3 /* Localizable.xcstrings in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -357,7 +352,6 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
5DA242142E17D31A007531C3 /* Localizable.xcstrings in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -436,7 +430,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = URLShare/URLShare.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 20;
CURRENT_PROJECT_VERSION = 21;
DEVELOPMENT_TEAM = 8J69P655GN;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = URLShare/Info.plist;
@ -469,7 +463,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = URLShare/URLShare.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 20;
CURRENT_PROJECT_VERSION = 21;
DEVELOPMENT_TEAM = 8J69P655GN;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = URLShare/Info.plist;
@ -624,7 +618,7 @@
CODE_SIGN_ENTITLEMENTS = readeck/readeck.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 20;
CURRENT_PROJECT_VERSION = 21;
DEVELOPMENT_ASSET_PATHS = "\"readeck/Preview Content\"";
DEVELOPMENT_TEAM = 8J69P655GN;
ENABLE_HARDENED_RUNTIME = YES;
@ -668,7 +662,7 @@
CODE_SIGN_ENTITLEMENTS = readeck/readeck.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 20;
CURRENT_PROJECT_VERSION = 21;
DEVELOPMENT_ASSET_PATHS = "\"readeck/Preview Content\"";
DEVELOPMENT_TEAM = 8J69P655GN;
ENABLE_HARDENED_RUNTIME = YES;

View File

@ -0,0 +1,127 @@
/*
Localizable.strings
readeck
Created by conversion from Localizable.xcstrings
*/
"" = "";
"(%lld found)" = "(%lld found)";
"%" = "%";
"%@ (%lld)" = "%1$@ (%2$lld)";
"%lld" = "%lld";
"%lld articles in the queue" = "%lld articles in the queue";
"%lld bookmark%@ synced successfully" = "%1$lld bookmark%2$@ synced successfully";
"%lld bookmark%@ waiting for sync" = "%1$lld bookmark%2$@ waiting for sync";
"%lld min" = "%lld min";
"%lld." = "%lld.";
"%lld/%lld" = "%1$lld/%2$lld";
"12 min • Today • example.com" = "12 min • Today • example.com";
"Activate the Read Aloud Feature to read aloud your articles. This is a really early preview and might not work perfectly." = "Activate the Read Aloud Feature to read aloud your articles. This is a really early preview and might not work perfectly.";
"Add" = "Add";
"Add new tag:" = "Add new tag:";
"all" = "all";
"All tags selected" = "All tags selected";
"Archive" = "Archive";
"Archive bookmark" = "Archive bookmark";
"Are you sure you want to delete this bookmark? This action cannot be undone." = "Are you sure you want to delete this bookmark? This action cannot be undone.";
"Are you sure you want to log out? This will delete all your login credentials and return you to setup." = "Are you sure you want to log out? This will delete all your login credentials and return you to setup.";
"Available tags" = "Available tags";
"Cancel" = "Cancel";
"Category-specific Levels" = "Category-specific Levels";
"Changes take effect immediately. Lower log levels include higher ones (Debug includes all, Critical includes only critical messages)." = "Changes take effect immediately. Lower log levels include higher ones (Debug includes all, Critical includes only critical messages).";
"Close" = "Close";
"Configure log levels and categories" = "Configure log levels and categories";
"Critical" = "Critical";
"Debug" = "Debug";
"DEBUG BUILD" = "DEBUG BUILD";
"Debug Settings" = "Debug Settings";
"Delete" = "Delete";
"Delete Bookmark" = "Delete Bookmark";
"Developer: Ilyas Hallak" = "Developer: Ilyas Hallak";
"Done" = "Done";
"Enter an optional title..." = "Enter an optional title...";
"Enter your Readeck server details to get started." = "Enter your Readeck server details to get started.";
"Error" = "Error";
"Error: %@" = "Error: %@";
"Favorite" = "Favorite";
"Finished reading?" = "Finished reading?";
"Font" = "Font";
"Font family" = "Font family";
"Font Settings" = "Font Settings";
"Font size" = "Font size";
"From Bremen with 💚" = "From Bremen with 💚";
"General" = "General";
"Global Level" = "Global Level";
"Global Minimum Level" = "Global Minimum Level";
"Global Settings" = "Global Settings";
"https://example.com" = "https://example.com";
"https://readeck.example.com" = "https://readeck.example.com";
"Include Source Location" = "Include Source Location";
"Info" = "Info";
"Jump to last read position (%lld%%)" = "Jump to last read position (%lld%%)";
"Key" = "Key";
"Level for %@" = "Level for %@";
"Loading %@" = "Loading %@";
"Loading article..." = "Loading article...";
"Logging Configuration" = "Logging Configuration";
"Login & Save" = "Login & Save";
"Logout" = "Logout";
"Logs below this level will be filtered out globally" = "Logs below this level will be filtered out globally";
"Manage Labels" = "Manage Labels";
"Mark as favorite" = "Mark as favorite";
"More" = "More";
"New Bookmark" = "New Bookmark";
"No articles in the queue" = "No articles in the queue";
"No bookmarks" = "No bookmarks";
"No bookmarks found in %@." = "No bookmarks found in %@.";
"No bookmarks found." = "No bookmarks found.";
"No results" = "No results";
"Notice" = "Notice";
"OK" = "OK";
"Optional: Custom title" = "Optional: Custom title";
"Password" = "Password";
"Paste" = "Paste";
"Please wait while we fetch your bookmarks..." = "Please wait while we fetch your bookmarks...";
"Preview" = "Preview";
"Progress: %lld%%" = "Progress: %lld%%";
"Re-login & Save" = "Re-login & Save";
"Read Aloud Feature" = "Read Aloud Feature";
"Read article aloud" = "Read article aloud";
"Read-aloud Queue" = "Read-aloud Queue";
"readeck Bookmark Title" = "readeck Bookmark Title";
"Reading %lld/%lld: " = "Reading %1$lld/%2$lld: ";
"Remove" = "Remove";
"Reset" = "Reset";
"Reset to Defaults" = "Reset to Defaults";
"Restore" = "Restore";
"Resume listening" = "Resume listening";
"Save bookmark" = "Save bookmark";
"Save Bookmark" = "Save Bookmark";
"Saving..." = "Saving...";
"Search" = "Search";
"Search or add new tag..." = "Search or add new tag...";
"Search results" = "Search results";
"Search..." = "Search...";
"Searching..." = "Searching...";
"Select a bookmark or tag" = "Select a bookmark or tag";
"Selected tags" = "Selected tags";
"Server Endpoint" = "Server Endpoint";
"Server not reachable - saving locally" = "Server not reachable - saving locally";
"Settings" = "Settings";
"Show Performance Logs" = "Show Performance Logs";
"Show Timestamps" = "Show Timestamps";
"Speed" = "Speed";
"Syncing with server..." = "Syncing with server...";
"Theme" = "Theme";
"This is how your bookmark descriptions and article text will appear in the app. The quick brown fox jumps over the lazy dog." = "This is how your bookmark descriptions and article text will appear in the app. The quick brown fox jumps over the lazy dog.";
"Try Again" = "Try Again";
"Unable to load bookmarks" = "Unable to load bookmarks";
"Unarchive Bookmark" = "Unarchive Bookmark";
"URL in clipboard:" = "URL in clipboard:";
"Username" = "Username";
"Version %@" = "Version %@";
"Warning" = "Warning";
"Your current server connection and login credentials." = "Your current server connection and login credentials.";
"Your Password" = "Your Password";
"Your Username" = "Your Username";

View File

@ -0,0 +1,8 @@
/*
Localizable.strings (German)
readeck
Created by conversion from Localizable.xcstrings
*/
"all" = "Ale";

View File

@ -0,0 +1,127 @@
/*
Localizable.strings
readeck
Created by conversion from Localizable.xcstrings
*/
"" = "";
"(%lld found)" = "(%lld found)";
"%" = "%";
"%@ (%lld)" = "%1$@ (%2$lld)";
"%lld" = "%lld";
"%lld articles in the queue" = "%lld articles in the queue";
"%lld bookmark%@ synced successfully" = "%1$lld bookmark%2$@ synced successfully";
"%lld bookmark%@ waiting for sync" = "%1$lld bookmark%2$@ waiting for sync";
"%lld min" = "%lld min";
"%lld." = "%lld.";
"%lld/%lld" = "%1$lld/%2$lld";
"12 min • Today • example.com" = "12 min • Today • example.com";
"Activate the Read Aloud Feature to read aloud your articles. This is a really early preview and might not work perfectly." = "Activate the Read Aloud Feature to read aloud your articles. This is a really early preview and might not work perfectly.";
"Add" = "Add";
"Add new tag:" = "Add new tag:";
"all" = "all";
"All tags selected" = "All tags selected";
"Archive" = "Archive";
"Archive bookmark" = "Archive bookmark";
"Are you sure you want to delete this bookmark? This action cannot be undone." = "Are you sure you want to delete this bookmark? This action cannot be undone.";
"Are you sure you want to log out? This will delete all your login credentials and return you to setup." = "Are you sure you want to log out? This will delete all your login credentials and return you to setup.";
"Available tags" = "Available tags";
"Cancel" = "Cancel";
"Category-specific Levels" = "Category-specific Levels";
"Changes take effect immediately. Lower log levels include higher ones (Debug includes all, Critical includes only critical messages)." = "Changes take effect immediately. Lower log levels include higher ones (Debug includes all, Critical includes only critical messages).";
"Close" = "Close";
"Configure log levels and categories" = "Configure log levels and categories";
"Critical" = "Critical";
"Debug" = "Debug";
"DEBUG BUILD" = "DEBUG BUILD";
"Debug Settings" = "Debug Settings";
"Delete" = "Delete";
"Delete Bookmark" = "Delete Bookmark";
"Developer: Ilyas Hallak" = "Developer: Ilyas Hallak";
"Done" = "Done";
"Enter an optional title..." = "Enter an optional title...";
"Enter your Readeck server details to get started." = "Enter your Readeck server details to get started.";
"Error" = "Error";
"Error: %@" = "Error: %@";
"Favorite" = "Favorite";
"Finished reading?" = "Finished reading?";
"Font" = "Font";
"Font family" = "Font family";
"Font Settings" = "Font Settings";
"Font size" = "Font size";
"From Bremen with 💚" = "From Bremen with 💚";
"General" = "General";
"Global Level" = "Global Level";
"Global Minimum Level" = "Global Minimum Level";
"Global Settings" = "Global Settings";
"https://example.com" = "https://example.com";
"https://readeck.example.com" = "https://readeck.example.com";
"Include Source Location" = "Include Source Location";
"Info" = "Info";
"Jump to last read position (%lld%%)" = "Jump to last read position (%lld%%)";
"Key" = "Key";
"Level for %@" = "Level for %@";
"Loading %@" = "Loading %@";
"Loading article..." = "Loading article...";
"Logging Configuration" = "Logging Configuration";
"Login & Save" = "Login & Save";
"Logout" = "Logout";
"Logs below this level will be filtered out globally" = "Logs below this level will be filtered out globally";
"Manage Labels" = "Manage Labels";
"Mark as favorite" = "Mark as favorite";
"More" = "More";
"New Bookmark" = "New Bookmark";
"No articles in the queue" = "No articles in the queue";
"No bookmarks" = "No bookmarks";
"No bookmarks found in %@." = "No bookmarks found in %@.";
"No bookmarks found." = "No bookmarks found.";
"No results" = "No results";
"Notice" = "Notice";
"OK" = "OK";
"Optional: Custom title" = "Optional: Custom title";
"Password" = "Password";
"Paste" = "Paste";
"Please wait while we fetch your bookmarks..." = "Please wait while we fetch your bookmarks...";
"Preview" = "Preview";
"Progress: %lld%%" = "Progress: %lld%%";
"Re-login & Save" = "Re-login & Save";
"Read Aloud Feature" = "Read Aloud Feature";
"Read article aloud" = "Read article aloud";
"Read-aloud Queue" = "Read-aloud Queue";
"readeck Bookmark Title" = "readeck Bookmark Title";
"Reading %lld/%lld: " = "Reading %1$lld/%2$lld: ";
"Remove" = "Remove";
"Reset" = "Reset";
"Reset to Defaults" = "Reset to Defaults";
"Restore" = "Restore";
"Resume listening" = "Resume listening";
"Save bookmark" = "Save bookmark";
"Save Bookmark" = "Save Bookmark";
"Saving..." = "Saving...";
"Search" = "Search";
"Search or add new tag..." = "Search or add new tag...";
"Search results" = "Search results";
"Search..." = "Search...";
"Searching..." = "Searching...";
"Select a bookmark or tag" = "Select a bookmark or tag";
"Selected tags" = "Selected tags";
"Server Endpoint" = "Server Endpoint";
"Server not reachable - saving locally" = "Server not reachable - saving locally";
"Settings" = "Settings";
"Show Performance Logs" = "Show Performance Logs";
"Show Timestamps" = "Show Timestamps";
"Speed" = "Speed";
"Syncing with server..." = "Syncing with server...";
"Theme" = "Theme";
"This is how your bookmark descriptions and article text will appear in the app. The quick brown fox jumps over the lazy dog." = "This is how your bookmark descriptions and article text will appear in the app. The quick brown fox jumps over the lazy dog.";
"Try Again" = "Try Again";
"Unable to load bookmarks" = "Unable to load bookmarks";
"Unarchive Bookmark" = "Unarchive Bookmark";
"URL in clipboard:" = "URL in clipboard:";
"Username" = "Username";
"Version %@" = "Version %@";
"Warning" = "Warning";
"Your current server connection and login credentials." = "Your current server connection and login credentials.";
"Your Password" = "Your Password";
"Your Username" = "Your Username";