From 6a15f4193370581ef1b393a561bfa16d3064f7a6 Mon Sep 17 00:00:00 2001 From: Camilo Vega Date: Tue, 10 Mar 2026 15:54:17 -0500 Subject: [PATCH 1/4] Add en.lproj strings and restore CFBundleLocalizations for Weblate integration --- syncthing.xcodeproj/project.pbxproj | 10 ++ syncthing/Info.plist | 5 + syncthing/en.lproj/Localizable.strings | 40 +++++++ syncthing/en.lproj/STAboutWindow.strings | 15 +++ syncthing/en.lproj/STApplication.strings | 105 ++++++++++++++++++ .../en.lproj/STPreferencesWindow.strings | 33 ++++++ .../STPreferencesWindowGeneralView.strings | 27 +++++ 7 files changed, 235 insertions(+) create mode 100644 syncthing/en.lproj/Localizable.strings create mode 100644 syncthing/en.lproj/STAboutWindow.strings create mode 100644 syncthing/en.lproj/STApplication.strings create mode 100644 syncthing/en.lproj/STPreferencesWindow.strings create mode 100644 syncthing/en.lproj/STPreferencesWindowGeneralView.strings diff --git a/syncthing.xcodeproj/project.pbxproj b/syncthing.xcodeproj/project.pbxproj index ac08bfb..7571eb3 100644 --- a/syncthing.xcodeproj/project.pbxproj +++ b/syncthing.xcodeproj/project.pbxproj @@ -77,6 +77,11 @@ 9A38F8612E80F1B600100A57 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/STPreferencesWindow.strings; sourceTree = ""; }; 9A38F8622E80F1B600100A57 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/STPreferencesWindowGeneralView.strings; sourceTree = ""; }; 9A38F8632E80F1B700100A57 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; + E61B6566426D4A64B3E27FD1 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/STApplication.strings; sourceTree = ""; }; + 6BF5309C44C44B33816DBD62 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/STAboutWindow.strings; sourceTree = ""; }; + 15C8D2E3EEAF4502842A8594 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/STPreferencesWindow.strings; sourceTree = ""; }; + 65BA17B6FFE8436FB229DCBE /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/STPreferencesWindowGeneralView.strings; sourceTree = ""; }; + 6CE6654979C54545BA0EA08C /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; C44262761D0DEF9F005340C2 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; C4460A7C1D0DD2D500200C21 /* STPreferencesWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = STPreferencesWindowController.h; path = Controllers/STPreferencesWindowController.h; sourceTree = ""; }; C4460A7D1D0DD2D500200C21 /* STPreferencesWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = STPreferencesWindowController.m; path = Controllers/STPreferencesWindowController.m; sourceTree = ""; }; @@ -433,6 +438,7 @@ isa = PBXVariantGroup; children = ( C4A4156C1D0D579D00DC6018 /* Base */, + E61B6566426D4A64B3E27FD1 /* en */, 9A38F85F2E80F1B600100A57 /* es */, ); name = STApplication.xib; @@ -442,6 +448,7 @@ isa = PBXVariantGroup; children = ( D4A1B5731E2A3F4900C8E2A3 /* Base */, + 6CE6654979C54545BA0EA08C /* en */, 9A38F8632E80F1B700100A57 /* es */, ); name = Localizable.strings; @@ -451,6 +458,7 @@ isa = PBXVariantGroup; children = ( C4946B001D5877F2008447A2 /* Base */, + 6BF5309C44C44B33816DBD62 /* en */, 9A38F8602E80F1B600100A57 /* es */, ); name = STAboutWindow.xib; @@ -460,6 +468,7 @@ isa = PBXVariantGroup; children = ( D4A1B57B1E2A3F4900C8E2AB /* Base */, + 15C8D2E3EEAF4502842A8594 /* en */, 9A38F8612E80F1B600100A57 /* es */, ); name = STPreferencesWindow.xib; @@ -469,6 +478,7 @@ isa = PBXVariantGroup; children = ( D4A1B57D1E2A3F4900C8E2AD /* Base */, + 65BA17B6FFE8436FB229DCBE /* en */, 9A38F8622E80F1B600100A57 /* es */, ); name = STPreferencesWindowGeneralView.xib; diff --git a/syncthing/Info.plist b/syncthing/Info.plist index 253a2b3..f9db187 100644 --- a/syncthing/Info.plist +++ b/syncthing/Info.plist @@ -4,6 +4,11 @@ CFBundleDevelopmentRegion en + CFBundleLocalizations + + en + es + CFBundleDisplayName Syncthing CFBundleExecutable diff --git a/syncthing/en.lproj/Localizable.strings b/syncthing/en.lproj/Localizable.strings new file mode 100644 index 0000000..c73ade5 --- /dev/null +++ b/syncthing/en.lproj/Localizable.strings @@ -0,0 +1,40 @@ +/* + Localizable.strings + syncthing + + Base localization (English) +*/ + +/* Notification title */ +"Syncthing" = "Syncthing"; + +/* Status tooltips */ +"Up to date" = "Up to date"; +"Synchronising" = "Synchronising"; +"Pause" = "Pause"; +"Not running" = "Not running"; +"Error" = "Error"; + +/* Device menu items */ +"Resume All Devices" = "Resume All Devices"; +"Pause All Devices" = "Pause All Devices"; + +/* Daemon status */ +"Syncthing Service (Running)" = "Syncthing Service (Running)"; +"Syncthing Service (Stopped)" = "Syncthing Service (Stopped)"; + +/* API status */ +"API (Online)" = "API (Online)"; +"API (Offline)" = "API (Offline)"; + +/* Connection status */ +"Online" = "Online"; +"Running (Offline)" = "Running (Offline)"; +"Unknown (Online)" = "Unknown (Online)"; +"Unavailable" = "Unavailable"; + +/* Menu titles */ +"Folders" = "Folders"; + +/* Tooltip template (version %@ and status %@) */ +"Syncthing %@\n%@" = "Syncthing %@\n%@"; \ No newline at end of file diff --git a/syncthing/en.lproj/STAboutWindow.strings b/syncthing/en.lproj/STAboutWindow.strings new file mode 100644 index 0000000..e10b07e --- /dev/null +++ b/syncthing/en.lproj/STAboutWindow.strings @@ -0,0 +1,15 @@ + +/* Class = "NSTextFieldCell"; title = "appNameLabel"; ObjectID = "69s-3K-WtF"; */ +"69s-3K-WtF.title" = "appNameLabel"; + +/* Class = "NSButtonCell"; title = "Check for updates"; ObjectID = "Eed-GH-Oia"; */ +"Eed-GH-Oia.title" = "Check for updates"; + +/* Class = "NSWindow"; title = "About Syncthing"; ObjectID = "QvC-M9-y7g"; */ +"QvC-M9-y7g.title" = "About Syncthing"; + +/* Class = "NSTextFieldCell"; title = "Project page"; ObjectID = "c8c-o9-dcj"; */ +"c8c-o9-dcj.title" = "Project page"; + +/* Class = "NSTextFieldCell"; title = "appVersionLabel"; ObjectID = "sEI-CG-StK"; */ +"sEI-CG-StK.title" = "appVersionLabel"; diff --git a/syncthing/en.lproj/STApplication.strings b/syncthing/en.lproj/STApplication.strings new file mode 100644 index 0000000..50e4ca6 --- /dev/null +++ b/syncthing/en.lproj/STApplication.strings @@ -0,0 +1,105 @@ + +/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "09B-Fd-kIg"; */ +"09B-Fd-kIg.title" = "Delete"; + +/* Class = "NSMenu"; title = "Folders"; ObjectID = "0Tt-4w-4MD"; */ +"0Tt-4w-4MD.title" = "Folders"; + +/* Class = "NSMenuItem"; title = "Quit Syncthing"; ObjectID = "1wN-cb-7w4"; */ +"1wN-cb-7w4.title" = "Quit Syncthing"; + +/* Class = "NSMenuItem"; title = "Restart"; ObjectID = "24n-vt-eof"; */ +"24n-vt-eof.title" = "Restart"; + +/* Class = "NSMenuItem"; title = "Quit application"; ObjectID = "42h-qg-75M"; */ +"42h-qg-75M.title" = "Quit application"; + +/* Class = "NSMenuItem"; title = "None"; ObjectID = "8nY-KP-Cjq"; */ +"8nY-KP-Cjq.title" = "None"; + +/* Class = "NSMenu"; title = "Edit"; ObjectID = "BIk-A1-DsB"; */ +"BIk-A1-DsB.title" = "Edit"; + +/* Class = "NSMenuItem"; title = "Folders"; ObjectID = "Gbh-kn-bEe"; */ +"Gbh-kn-bEe.title" = "Folders"; + +/* Class = "NSMenuItem"; title = "API"; ObjectID = "Gzh-BA-qbg"; */ +"Gzh-BA-qbg.title" = "API"; + +/* Class = "NSMenuItem"; title = "Paste"; ObjectID = "HRl-Yj-JKY"; */ +"HRl-Yj-JKY.title" = "Paste"; + +/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "HiV-0K-6gI"; */ +"HiV-0K-6gI.title" = "Edit"; + +/* Class = "NSMenuItem"; title = "Menu"; ObjectID = "I8M-Pf-BKw"; */ +"I8M-Pf-BKw.title" = "Menu"; + +/* Class = "NSMenuItem"; title = "Cut"; ObjectID = "Kac-nG-ccL"; */ +"Kac-nG-ccL.title" = "Cut"; + +/* Class = "NSMenu"; title = "Main Menu"; ObjectID = "LRK-4Q-J2a"; */ +"LRK-4Q-J2a.title" = "Main Menu"; + +/* Class = "NSMenuItem"; title = "Syncthing Service"; ObjectID = "MAH-El-s0y"; */ +"MAH-El-s0y.title" = "Syncthing Service"; + +/* Class = "NSMenu"; title = "Syncthing"; ObjectID = "O1r-v6-dVJ"; */ +"O1r-v6-dVJ.title" = "Syncthing"; + +/* Class = "NSMenuItem"; title = "Status"; ObjectID = "PGw-J9-KII"; */ +"PGw-J9-KII.title" = "Status"; + +/* Class = "NSMenuItem"; title = "Syncthing"; ObjectID = "ViC-de-Xi1"; */ +"ViC-de-Xi1.title" = "Syncthing"; + +/* Class = "NSMenuItem"; title = "Item"; ObjectID = "Y9X-vm-pic"; */ +"Y9X-vm-pic.title" = "Item"; + +/* Class = "NSMenu"; title = "Syncthing Service"; ObjectID = "YYN-1k-umQ"; */ +"YYN-1k-umQ.title" = "Syncthing Service"; + +/* Class = "NSMenuItem"; title = "Redo"; ObjectID = "aOH-1O-Idh"; */ +"aOH-1O-Idh.title" = "Redo"; + +/* Class = "NSMenuItem"; title = "Undo"; ObjectID = "aRj-ou-O6a"; */ +"aRj-ou-O6a.title" = "Undo"; + +/* Class = "NSMenuItem"; title = "Rescan All"; ObjectID = "boL-Lr-rxV"; */ +"boL-Lr-rxV.title" = "Rescan All"; + +/* Class = "NSMenuItem"; title = "About"; ObjectID = "dst-j8-d2d"; */ +"dst-j8-d2d.title" = "About"; + +/* Class = "NSMenuItem"; ibShadowedToolTip = "Open Syncthing Web GUI"; ObjectID = "euz-4I-RQa"; */ +"euz-4I-RQa.ibShadowedToolTip" = "Open Syncthing Web GUI"; + +/* Class = "NSMenuItem"; title = "Open"; ObjectID = "euz-4I-RQa"; */ +"euz-4I-RQa.title" = "Open"; + +/* Class = "NSMenuItem"; title = "Close window"; ObjectID = "htF-y1-dkl"; */ +"htF-y1-dkl.title" = "Close window"; + +/* Class = "NSMenuItem"; title = "Pause All Devices"; ObjectID = "kBF-aK-W8P"; */ +"kBF-aK-W8P.title" = "Pause All Devices"; + +/* Class = "NSMenuItem"; title = "Preferences..."; ObjectID = "lgT-yX-bGZ"; */ +"lgT-yX-bGZ.title" = "Preferences..."; + +/* Class = "NSMenu"; title = "Status"; ObjectID = "qS5-d4-4WD"; */ +"qS5-d4-4WD.title" = "Status"; + +/* Class = "NSMenu"; title = "Menu"; ObjectID = "rlz-0G-Jeh"; */ +"rlz-0G-Jeh.title" = "Menu"; + +/* Class = "NSMenuItem"; title = "Start"; ObjectID = "s51-hi-aSO"; */ +"s51-hi-aSO.title" = "Start"; + +/* Class = "NSMenuItem"; title = "Select All"; ObjectID = "uO2-Lw-6R3"; */ +"uO2-Lw-6R3.title" = "Select All"; + +/* Class = "NSMenuItem"; title = "Stop"; ObjectID = "v6W-XD-Nuf"; */ +"v6W-XD-Nuf.title" = "Stop"; + +/* Class = "NSMenuItem"; title = "Copy"; ObjectID = "ygR-tH-H8e"; */ +"ygR-tH-H8e.title" = "Copy"; diff --git a/syncthing/en.lproj/STPreferencesWindow.strings b/syncthing/en.lproj/STPreferencesWindow.strings new file mode 100644 index 0000000..0212473 --- /dev/null +++ b/syncthing/en.lproj/STPreferencesWindow.strings @@ -0,0 +1,33 @@ + +/* Class = "NSToolbarItem"; label = "General"; ObjectID = "1ij-UG-c1I"; */ +"1ij-UG-c1I.label" = "General"; + +/* Class = "NSToolbarItem"; paletteLabel = "General"; ObjectID = "1ij-UG-c1I"; */ +"1ij-UG-c1I.paletteLabel" = "General"; + +/* Class = "NSToolbarItem"; label = "Info"; ObjectID = "86s-00-8YI"; */ +"86s-00-8YI.label" = "Info"; + +/* Class = "NSToolbarItem"; paletteLabel = "Info"; ObjectID = "86s-00-8YI"; */ +"86s-00-8YI.paletteLabel" = "Info"; + +/* Class = "NSWindow"; title = "Syncthing Preferences"; ObjectID = "QvC-M9-y7g"; */ +"QvC-M9-y7g.title" = "Syncthing Preferences"; + +/* Class = "NSToolbarItem"; label = "Advanced"; ObjectID = "S5T-mV-7Wv"; */ +"S5T-mV-7Wv.label" = "Advanced"; + +/* Class = "NSToolbarItem"; paletteLabel = "Advanced"; ObjectID = "S5T-mV-7Wv"; */ +"S5T-mV-7Wv.paletteLabel" = "Advanced"; + +/* Class = "NSToolbarItem"; label = "Folders"; ObjectID = "X60-Ql-i8O"; */ +"X60-Ql-i8O.label" = "Folders"; + +/* Class = "NSToolbarItem"; paletteLabel = "Folders"; ObjectID = "X60-Ql-i8O"; */ +"X60-Ql-i8O.paletteLabel" = "Folders"; + +/* Class = "NSToolbarItem"; label = "Devices"; ObjectID = "poY-nn-e76"; */ +"poY-nn-e76.label" = "Devices"; + +/* Class = "NSToolbarItem"; paletteLabel = "Devices"; ObjectID = "poY-nn-e76"; */ +"poY-nn-e76.paletteLabel" = "Devices"; diff --git a/syncthing/en.lproj/STPreferencesWindowGeneralView.strings b/syncthing/en.lproj/STPreferencesWindowGeneralView.strings new file mode 100644 index 0000000..d66e96e --- /dev/null +++ b/syncthing/en.lproj/STPreferencesWindowGeneralView.strings @@ -0,0 +1,27 @@ + +/* Class = "NSTextFieldCell"; placeholderString = "aNVUG3mSx4PVyZW8LXWGoybFRSXS9c5a"; ObjectID = "2yS-fe-acc"; */ +"2yS-fe-acc.placeholderString" = "aNVUG3mSx4PVyZW8LXWGoybFRSXS9c5a"; + +/* Class = "NSButtonCell"; title = "Test"; ObjectID = "DIH-Pb-tr4"; */ +"DIH-Pb-tr4.title" = "Test"; + +/* Class = "NSButtonCell"; title = "Quit Syncthing"; ObjectID = "KYS-0x-TeQ"; */ +"KYS-0x-TeQ.title" = "Quit Syncthing"; + +/* Class = "NSButtonCell"; title = "Open Syncthing Web Interface"; ObjectID = "MM0-EG-ljE"; */ +"MM0-EG-ljE.title" = "Open Syncthing Web Interface"; + +/* Class = "NSButtonCell"; title = "Start at login"; ObjectID = "bnF-et-LAz"; */ +"bnF-et-LAz.title" = "Start at login"; + +/* Class = "NSTextFieldCell"; title = "URI"; ObjectID = "geO-tg-eJG"; */ +"geO-tg-eJG.title" = "URI"; + +/* Class = "NSTextFieldCell"; placeholderString = "http://localhost:8384"; ObjectID = "hwI-eW-JrI"; */ +"hwI-eW-JrI.placeholderString" = "http://localhost:8384"; + +/* Class = "NSTextFieldCell"; title = "API key"; ObjectID = "jak-D0-chd"; */ +"jak-D0-chd.title" = "API key"; + +/* Class = "NSButtonCell"; title = "Show in menu bar"; ObjectID = "nB8-OA-X1F"; */ +"nB8-OA-X1F.title" = "Show in menu bar"; From a527a2ccbbf0eb07b79136527acace876cbc2347 Mon Sep 17 00:00:00 2001 From: Camilo Vega Date: Wed, 11 Mar 2026 13:25:06 -0500 Subject: [PATCH 2/4] Add CFBundleLocalizations to Info.plist.tmpl --- syncthing/Info.plist.tmpl | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/syncthing/Info.plist.tmpl b/syncthing/Info.plist.tmpl index f6f8d55..9c3fefd 100644 --- a/syncthing/Info.plist.tmpl +++ b/syncthing/Info.plist.tmpl @@ -4,6 +4,11 @@ CFBundleDevelopmentRegion en + CFBundleLocalizations + + en + es + CFBundleDisplayName Syncthing CFBundleExecutable From 5bf80fb9c14aa4939a324e76c35fd1c072b102a1 Mon Sep 17 00:00:00 2001 From: Camilo Vega Date: Wed, 11 Mar 2026 17:05:52 -0500 Subject: [PATCH 3/4] Move Localizable.strings from Base.lproj to en.lproj to avoid Weblate duplication --- syncthing.xcodeproj/project.pbxproj | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/syncthing.xcodeproj/project.pbxproj b/syncthing.xcodeproj/project.pbxproj index 7571eb3..917fa8c 100644 --- a/syncthing.xcodeproj/project.pbxproj +++ b/syncthing.xcodeproj/project.pbxproj @@ -108,7 +108,7 @@ C4F0E82C1DA1B9CF00435310 /* STPreferencesWindowGeneralViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = STPreferencesWindowGeneralViewController.m; sourceTree = ""; }; C4FFB0631D0D7E440015D14A /* XGSyncthing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XGSyncthing.h; path = syncthing/XGSyncthing.h; sourceTree = SOURCE_ROOT; }; C4FFB0641D0D7E4C0015D14A /* XGSyncthing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XGSyncthing.m; path = syncthing/XGSyncthing.m; sourceTree = SOURCE_ROOT; }; - D4A1B5731E2A3F4900C8E2A3 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; + D4A1B57B1E2A3F4900C8E2AB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/STPreferencesWindow.xib; sourceTree = ""; }; D4A1B57D1E2A3F4900C8E2AD /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/STPreferencesWindowGeneralView.xib; sourceTree = ""; }; FB3E4EE48CFC608AD4FBDE77 /* Pods-syncthing.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-syncthing.debug.xcconfig"; path = "Pods/Target Support Files/Pods-syncthing/Pods-syncthing.debug.xcconfig"; sourceTree = ""; }; @@ -447,7 +447,6 @@ D4A1B5721E2A3F4900C8E2A2 /* Localizable.strings */ = { isa = PBXVariantGroup; children = ( - D4A1B5731E2A3F4900C8E2A3 /* Base */, 6CE6654979C54545BA0EA08C /* en */, 9A38F8632E80F1B700100A57 /* es */, ); From 35ea6ee910ac1826c4317b52fbbc7e684cfedc09 Mon Sep 17 00:00:00 2001 From: Camilo Vega Date: Wed, 11 Mar 2026 17:22:13 -0500 Subject: [PATCH 4/4] Remove Base.lproj/Localizable.strings (moved to en.lproj) --- syncthing/Base.lproj/Localizable.strings | 40 ------------------------ 1 file changed, 40 deletions(-) delete mode 100644 syncthing/Base.lproj/Localizable.strings diff --git a/syncthing/Base.lproj/Localizable.strings b/syncthing/Base.lproj/Localizable.strings deleted file mode 100644 index c73ade5..0000000 --- a/syncthing/Base.lproj/Localizable.strings +++ /dev/null @@ -1,40 +0,0 @@ -/* - Localizable.strings - syncthing - - Base localization (English) -*/ - -/* Notification title */ -"Syncthing" = "Syncthing"; - -/* Status tooltips */ -"Up to date" = "Up to date"; -"Synchronising" = "Synchronising"; -"Pause" = "Pause"; -"Not running" = "Not running"; -"Error" = "Error"; - -/* Device menu items */ -"Resume All Devices" = "Resume All Devices"; -"Pause All Devices" = "Pause All Devices"; - -/* Daemon status */ -"Syncthing Service (Running)" = "Syncthing Service (Running)"; -"Syncthing Service (Stopped)" = "Syncthing Service (Stopped)"; - -/* API status */ -"API (Online)" = "API (Online)"; -"API (Offline)" = "API (Offline)"; - -/* Connection status */ -"Online" = "Online"; -"Running (Offline)" = "Running (Offline)"; -"Unknown (Online)" = "Unknown (Online)"; -"Unavailable" = "Unavailable"; - -/* Menu titles */ -"Folders" = "Folders"; - -/* Tooltip template (version %@ and status %@) */ -"Syncthing %@\n%@" = "Syncthing %@\n%@"; \ No newline at end of file