[vlc-commits] macosx: Force right to left interface if RTL language was selected

David Fuhrmann git at videolan.org
Sun Jul 30 17:59:41 CEST 2017


vlc | branch: master | David Fuhrmann <dfuhrmann at videolan.org> | Sun Jul 30 10:14:40 2017 +0200| [2b5f3a4322d349f29215bc6180073ad2f436e8b7] | committer: David Fuhrmann

macosx: Force right to left interface if RTL language was selected

Enable RTL interface if RTL language was explicitly selected in
preferences.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=2b5f3a4322d349f29215bc6180073ad2f436e8b7
---

 modules/gui/macosx/VLCSimplePrefsController.m | 208 ++++++++++----------------
 1 file changed, 78 insertions(+), 130 deletions(-)

diff --git a/modules/gui/macosx/VLCSimplePrefsController.m b/modules/gui/macosx/VLCSimplePrefsController.m
index caba91e393..310e039895 100644
--- a/modules/gui/macosx/VLCSimplePrefsController.m
+++ b/modules/gui/macosx/VLCSimplePrefsController.m
@@ -44,133 +44,73 @@
 #import <Sparkle/Sparkle.h>                        //for o_intf_last_updateLabel
 #endif
 
-static const char *const ppsz_language[] =
-{
-    "auto",
-    "en",
-    "ar",
-    "bn",
-    "pt_BR",
-    "en_GB",
-    "el",
-    "bg",
-    "ca",
-    "zh_TW",
-    "cs",
-    "cy",
-    "da",
-    "nl",
-    "fi",
-    "et",
-    "eu",
-    "fr",
-    "ga",
-    "gd",
-    "gl",
-    "ka",
-    "de",
-    "he",
-    "hr",
-    "hu",
-    "hy",
-    "is",
-    "id",
-    "it",
-    "ja",
-    "ko",
-    "lt",
-    "mn",
-    "ms",
-    "nb",
-    "nn",
-    "kk",
-    "km",
-    "ne",
-    "oc",
-    "fa",
-    "pl",
-    "pt_PT",
-    "pa",
-    "ro",
-    "ru",
-    "zh_CN",
-    "si",
-    "sr",
-    "sk",
-    "sl",
-    "ckb",
-    "es",
-    "sv",
-    "te",
-    "tr",
-    "uk",
-    "vi",
-    "wa",
-    NULL,
-};
 
-static const char *const ppsz_language_text[] =
-{
-    N_("Auto"),
-    "American English",
-    "عربي",
-    "বাংলা",
-    "Português Brasileiro",
-    "British English",
-    "Νέα Ελληνικά",
-    "български език",
-    "Català",
-    "正體中文",
-    "Čeština",
-    "Cymraeg",
-    "Dansk",
-    "Nederlands",
-    "Suomi",
-    "eesti keel",
-    "Euskara",
-    "Français",
-    "Gaeilge",
-    "Gàidhlig",
-    "Galego",
-    "ქართული",
-    "Deutsch",
-    "עברית",
-    "hrvatski",
-    "Magyar",
-    "հայերեն",
-    "íslenska",
-    "Bahasa Indonesia",
-    "Italiano",
-    "日本語",
-    "한국어",
-    "lietuvių",
-    "Монгол хэл",
-    "Melayu",
-    "Bokmål",
-    "Nynorsk",
-    "Қазақ тілі",
-    "ភាសាខ្មែរ",
-    "नेपाली",
-    "Occitan",
-    "فارسی",
-    "Polski",
-    "Português",
-    "ਪੰਜਾਬੀ",
-    "Română",
-    "Русский",
-    "简体中文",
-    "සිංහල",
-    "српски",
-    "Slovensky",
-    "slovenščina",
-    "کوردیی سۆرانی",
-    "Español",
-    "Svenska",
-    "తెలుగు",
-    "Türkçe",
-    "украї́нська мо́ва",
-    "tiếng Việt",
-    "Walon",
+static struct {
+    const char iso[6];
+    const char name[34];
+    BOOL isRightToLeft;
+
+} const language_map[] = {
+    { "auto",  N_("Auto"),              NO },
+    { "en",    "American English",      NO },
+    { "ar",    "عربي",                  YES },
+    { "bn",    "বাংলা",                  NO },
+    { "pt_BR", "Português Brasileiro",  NO },
+    { "en_GB", "British English",       NO },
+    { "el",    "Νέα Ελληνικά",          NO },
+    { "bg",    "български език",        NO },
+    { "ca",    "Català",                NO },
+    { "zh_TW", "正體中文",               NO },
+    { "cs",    "Čeština",               NO },
+    { "cy",    "Cymraeg",               NO },
+    { "da",    "Dansk",                 NO },
+    { "nl",    "Nederlands",            NO },
+    { "fi",    "Suomi",                 NO },
+    { "et",    "eesti keel",            NO },
+    { "eu",    "Euskara",               NO },
+    { "fr",    "Français",              NO },
+    { "ga",    "Gaeilge",               NO },
+    { "gd",    "Gàidhlig",              NO },
+    { "gl",    "Galego",                NO },
+    { "ka",    "ქართული",               NO },
+    { "de",    "Deutsch",               NO },
+    { "he",    "עברית",                  YES },
+    { "hr",    "hrvatski",              NO },
+    { "hu",    "Magyar",                NO },
+    { "hy",    "հայերեն",                NO },
+    { "is",    "íslenska",              NO },
+    { "id",    "Bahasa Indonesia",      NO },
+    { "it",    "Italiano",              NO },
+    { "ja",    "日本語",                 NO },
+    { "ko",    "한국어",                  NO },
+    { "lt",    "lietuvių",              NO },
+    { "mn",    "Монгол хэл",            NO },
+    { "ms",    "Melayu",                NO },
+    { "nb",    "Bokmål",                NO },
+    { "nn",    "Nynorsk",               NO },
+    { "kk",    "Қазақ тілі",            NO },
+    { "km",    "ភាសាខ្មែរ",                NO },
+    { "ne",    "नेपाली",                  NO },
+    { "oc",    "Occitan",               NO },
+    { "fa",    "فارسی",                 YES },
+    { "pl",    "Polski",                NO },
+    { "pt_PT", "Português",             NO },
+    { "pa",    "ਪੰਜਾਬੀ",                  NO },
+    { "ro",    "Română",                NO },
+    { "ru",    "Русский",               NO },
+    { "zh_CN", "简体中文",               NO },
+    { "si",    "සිංහල",                NO },
+    { "sr",    "српски",                NO },
+    { "sk",    "Slovensky",             NO },
+    { "sl",    "slovenščina",           NO },
+    { "ckb",   "کوردیی سۆرانی",         YES },
+    { "es",    "Español",               NO },
+    { "sv",    "Svenska",               NO },
+    { "te",    "తెలుగు",                 NO },
+    { "tr",    "Türkçe",                NO },
+    { "uk",    "украї́нська мо́ва",       NO },
+    { "vi",    "tiếng Việt",            NO },
+    { "wa",    "Walon",                 NO }
 };
 
 static NSString* VLCSPrefsToolbarIdentifier = @"Our Simple Preferences Toolbar Identifier";
@@ -562,10 +502,10 @@ static inline const char * __config_GetLabel(vlc_object_t *p_this, const char *p
     NSUInteger sel = 0;
     const char *pref = NULL;
     pref = [[[NSUserDefaults standardUserDefaults] objectForKey:@"language"] UTF8String];
-    for (int x = 0; ppsz_language[x] != NULL; x++) {
-        [_intf_languagePopup addItemWithTitle:toNSStr(ppsz_language_text[x])];
+    for (int x = 0; x < ARRAY_SIZE(language_map); x++) {
+        [_intf_languagePopup addItemWithTitle:toNSStr(language_map[x].name)];
         if (pref) {
-            if (!strcmp(ppsz_language[x], pref))
+            if (!strcmp(language_map[x].iso, pref))
                 sel = x;
         }
     }
@@ -914,7 +854,15 @@ static inline void save_string_list(intf_thread_t * p_intf, id object, const cha
     if (_intfSettingChanged) {
         NSUInteger index = [_intf_languagePopup indexOfSelectedItem];
         NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
-        [defaults setObject:toNSStr(ppsz_language[index]) forKey:@"language"];
+        [defaults setObject:toNSStr(language_map[index].iso) forKey:@"language"];
+
+        if (index == 0) { // Automatic handling of right to left
+            [defaults removeObjectForKey:@"NSForceRightToLeftWritingDirection"];
+            [defaults removeObjectForKey:@"AppleTextDirection"];
+        } else {
+            [defaults setBool:language_map[index].isRightToLeft forKey:@"NSForceRightToLeftWritingDirection"];
+            [defaults setBool:language_map[index].isRightToLeft forKey:@"AppleTextDirection"];
+        }
         [defaults synchronize];
 
         config_PutInt(p_intf, "metadata-network-access", [_intf_artCheckbox state]);



More information about the vlc-commits mailing list