Add a mechanism for customizing app strings

This commit is contained in:
Letro Bot
2026-04-09 22:23:02 +04:00
parent f675fde32e
commit 922dfdaee6
5 changed files with 562 additions and 0 deletions

View File

@@ -371,6 +371,7 @@
3EC5A41F9FB7DD63A4DC6144 /* RoomChangeRolesScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B14B1DE3E2D5D26732C49036 /* RoomChangeRolesScreenViewModel.swift */; };
3EC698F80DDEEFA273857841 /* ArrayTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 893777A4997BBDB68079D4F5 /* ArrayTests.swift */; };
3ED2725734568F6B8CC87544 /* AttributedStringBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A5C6FBF97B6EED3D4FA5EFF /* AttributedStringBuilder.swift */; };
3EEB8F54CD235421C58AA578 /* Letro.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = F53C0A1CF2DD6DF5AC82C51B /* Letro.stringsdict */; };
3F2148F11164C7C5609984EB /* Sentry in Frameworks */ = {isa = PBXBuildFile; productRef = 886A0A498FA01E8EDD451D05 /* Sentry */; };
3F55721B5C08E8D9F1295592 /* SDKListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE5CD2993048222B64C45006 /* SDKListener.swift */; };
3F70E237CE4C3FAB02FC227F /* NotificationConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = C830A64609CBD152F06E0457 /* NotificationConstants.swift */; };
@@ -838,6 +839,7 @@
8ED8AF57A06F5EE9978ED23F /* AuthenticationStartScreenViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FB89DC7F9A4A91020037001 /* AuthenticationStartScreenViewModelTests.swift */; };
8F2FAA98457750D9D664136F /* LRUCache in Frameworks */ = {isa = PBXBuildFile; productRef = 1081D3630AAD3ACEDDEC3A98 /* LRUCache */; };
8F3AD08F2E706AA60F1A1D4D /* portrait_test_image.jpg in Resources */ = {isa = PBXBuildFile; fileRef = BC51BF90469412ABDE658CDD /* portrait_test_image.jpg */; };
8F60869415CCEE7CB48B8FFA /* Letro.strings in Resources */ = {isa = PBXBuildFile; fileRef = F91648730DB4AF1EC879EE3F /* Letro.strings */; };
904F06C9C1AEF884C2077542 /* RoomDirectorySearchScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2E4EF80DFB8FE7C4469B15D /* RoomDirectorySearchScreen.swift */; };
90733645AE76FB33DAD28C2B /* URLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE40D4A5DD857AC16EED945A /* URLSession.swift */; };
90DF83A6A347F7EE7EDE89EE /* AttributedStringBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF25E364AE85090A70AE4644 /* AttributedStringBuilderTests.swift */; };
@@ -1841,6 +1843,7 @@
2BFDCA5A09EE70BC17F2EFA7 /* URLComponents.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLComponents.swift; sourceTree = "<group>"; };
2C39B1D3FC8CF41D6C3B054F /* NavigationTabCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationTabCoordinator.swift; sourceTree = "<group>"; };
2C39D91A31409775B0F4268F /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = et.lproj/InfoPlist.strings; sourceTree = "<group>"; };
2C9931627740796219E6B23B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Letro.strings; sourceTree = "<group>"; };
2CEBCB9676FCD1D0F13188DD /* StringTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringTests.swift; sourceTree = "<group>"; };
2CF9FE7E0CF9F40D1509E63A /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = bg; path = bg.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
2D0946F77B696176E062D037 /* RoomMembersListScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMembersListScreenModels.swift; sourceTree = "<group>"; };
@@ -2964,6 +2967,7 @@
FC9044BE0E4A66F5B963E834 /* AudioFileEventsTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioFileEventsTimelineView.swift; sourceTree = "<group>"; };
FCE93F0CBF0D96B77111C413 /* AppLockFlowCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockFlowCoordinator.swift; sourceTree = "<group>"; };
FD1275D9CE0FFBA6E8E85426 /* UserIndicatorController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserIndicatorController.swift; sourceTree = "<group>"; };
FD2E2AE22C30A20529CDFD3E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = en; path = en.lproj/Letro.stringsdict; sourceTree = "<group>"; };
FDB9C37196A4C79F24CE80C6 /* KeychainControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainControllerTests.swift; sourceTree = "<group>"; };
FDEDD4D2DE0646DA724985D5 /* QRCodeLoginScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeLoginScreenModels.swift; sourceTree = "<group>"; };
FDF73F49E6B6683F7E2D26F0 /* SecureBackupScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupScreenCoordinator.swift; sourceTree = "<group>"; };
@@ -5650,6 +5654,8 @@
isa = PBXGroup;
children = (
91DE43B8815918E590912DDA /* InfoPlist.strings */,
F91648730DB4AF1EC879EE3F /* Letro.strings */,
F53C0A1CF2DD6DF5AC82C51B /* Letro.stringsdict */,
7109E709A7738E6BCC4553E6 /* Localizable.strings */,
187853A7E643995EE49FAD43 /* Localizable.stringsdict */,
135FC689EA39AE1D34153B58 /* SAS.strings */,
@@ -7382,6 +7388,8 @@
992F5E750F5030C4BA2D0D03 /* Assets.xcassets in Resources */,
2CA6ABBC9A88EB89EA52FCCB /* ConfettiScene.scn in Resources */,
B6DA66EFC13A90846B625836 /* InfoPlist.strings in Resources */,
8F60869415CCEE7CB48B8FFA /* Letro.strings in Resources */,
3EEB8F54CD235421C58AA578 /* Letro.stringsdict in Resources */,
5F5488FBC9CFEB6F433D74A4 /* Localizable.strings in Resources */,
0EA6537A07E2DC882AEA5962 /* Localizable.stringsdict in Resources */,
8B408C574E35E1C9B43A50CE /* PrivacyInfo.xcprivacy in Resources */,
@@ -9246,6 +9254,14 @@
name = Untranslated.strings;
sourceTree = "<group>";
};
F53C0A1CF2DD6DF5AC82C51B /* Letro.stringsdict */ = {
isa = PBXVariantGroup;
children = (
FD2E2AE22C30A20529CDFD3E /* en */,
);
name = Letro.stringsdict;
sourceTree = "<group>";
};
F75DF9500D69A3AAF8339E69 /* Untranslated.stringsdict */ = {
isa = PBXVariantGroup;
children = (
@@ -9254,6 +9270,14 @@
name = Untranslated.stringsdict;
sourceTree = "<group>";
};
F91648730DB4AF1EC879EE3F /* Letro.strings */ = {
isa = PBXVariantGroup;
children = (
2C9931627740796219E6B23B /* en */,
);
name = Letro.strings;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */