private static void LoadUIMessages(List <MapDescriptor> mapDescriptors, DataFileSet fileSet, IProgress <ProgressInfo> progress, CancellationToken ct)
        {
            // Key = locale, Value = file contents
            var ui_messages = new Dictionary <string, UI_Message>();

            foreach (string locale in Locale.ALL)
            {
                ui_messages[locale] = new UI_Message(fileSet.ui_message_csv[locale], locale);
            }

            // using the MSG ID in each map descriptor, load its actual string from the ui_message_XX.csv file
            foreach (MapDescriptor mapDescriptor in mapDescriptors)
            {
                foreach (string locale in Locale.ALL)
                {
                    var msgId = mapDescriptor.Name_MSG_ID;
                    if (msgId > 0)
                    {
                        mapDescriptor.Name[locale] = ui_messages[locale].get(mapDescriptor.Name_MSG_ID);
                    }
                    else
                    {
                        mapDescriptor.Name[locale] = "";
                    }
                    msgId = mapDescriptor.Desc_MSG_ID;
                    if (msgId > 0)
                    {
                        mapDescriptor.Desc[locale] = ui_messages[locale].get(mapDescriptor.Desc_MSG_ID);
                    }
                    else
                    {
                        mapDescriptor.Desc[locale] = "";
                    }
                }
                mapDescriptor.readFrbFileInfo(fileSet.param_folder, progress, ct);
            }
        }
Exemplo n.º 2
0
        private static void WriteLocalizationFiles(List <MapDescriptor> mapDescriptors, DataFileSet fileSet, DataFileSet riivFileSet, bool patchWiimmfi)
        {
            // Key = locale, Value = file contents
            var ui_messages = new Dictionary <string, UI_Message>();

            foreach (string locale in Locale.ALL)
            {
                ui_messages[locale] = new UI_Message(fileSet.ui_message_csv[locale], locale);
            }
            // free up the used MSG IDs
            foreach (MapDescriptor mapDescriptor in mapDescriptors)
            {
                foreach (string locale in Locale.ALL)
                {
                    if (mapDescriptor.Name_MSG_ID > 0)
                    {
                        ui_messages[locale].removeKey(mapDescriptor.Name_MSG_ID);
                    }
                    if (mapDescriptor.Desc_MSG_ID > 0)
                    {
                        ui_messages[locale].removeKey(mapDescriptor.Desc_MSG_ID);
                    }
                }
            }
            // make new msg ids
            uint msgId = 25000;

            foreach (var mapDescriptor in mapDescriptors)
            {
                mapDescriptor.Name_MSG_ID = msgId++;
                foreach (var entry in ui_messages)
                {
                    var locale     = entry.Key;
                    var ui_message = entry.Value;
                    // write EN messages to the UK file as well (we are not differentiating here)
                    if (locale == Locale.UK)
                    {
                        locale = Locale.EN;
                    }
                    // if there is no localization for this locale, use the english variant as default
                    if (!mapDescriptor.Name.ContainsKey(locale) || string.IsNullOrWhiteSpace(mapDescriptor.Name[locale]))
                    {
                        ui_message.set(mapDescriptor.Name_MSG_ID, mapDescriptor.Name[Locale.EN]);
                    }
                    else
                    {
                        ui_message.set(mapDescriptor.Name_MSG_ID, mapDescriptor.Name[locale]);
                    }
                }
                mapDescriptor.Desc_MSG_ID = msgId++;
                foreach (var entry in ui_messages)
                {
                    var locale     = entry.Key;
                    var ui_message = entry.Value;
                    // write EN messages to the UK file as well (we are not differentiating here)
                    if (locale == Locale.UK)
                    {
                        locale = Locale.EN;
                    }
                    // if there is no localization for this locale, use the english variant as default
                    if (!mapDescriptor.Desc.ContainsKey(locale) || string.IsNullOrWhiteSpace(mapDescriptor.Desc[locale]))
                    {
                        ui_message.set(mapDescriptor.Desc_MSG_ID, mapDescriptor.Desc[Locale.EN]);
                    }
                    else
                    {
                        ui_message.set(mapDescriptor.Desc_MSG_ID, mapDescriptor.Desc[locale]);
                    }
                }
            }
            // text replace Nintendo WFC -> Wiimmfi
            if (patchWiimmfi)
            {
                foreach (var entry in ui_messages)
                {
                    var locale     = entry.Key;
                    var ui_message = entry.Value;
                    var keys       = ui_message.getMap().Keys.ToList();
                    foreach (var id in keys)
                    {
                        var text = ui_message.get(id);

                        // need to use Regex, because there are different types of whitespaces in the messages (some are U+0020 while others are U+00A0)
                        if (locale == Locale.DE)
                        {
                            text = Regex.Replace(text, @"die\sNintendo\sWi-Fi\sConnection", "Wiimmfi", RegexOptions.IgnoreCase);
                            text = Regex.Replace(text, @"der\sNintendo\sWi-Fi\sConnection", "Wiimmfi", RegexOptions.IgnoreCase);
                            text = Regex.Replace(text, @"zur\sNintendo\sWi-Fi\sConnection", "Wiimmfi", RegexOptions.IgnoreCase);
                        }
                        if (locale == Locale.FR)
                        {
                            text = Regex.Replace(text, @"Wi-Fi\sNintendo", "Wiimmfi", RegexOptions.IgnoreCase);
                            text = Regex.Replace(text, @"CWF\sNintendo", "Wiimmfi", RegexOptions.IgnoreCase);
                            text = Regex.Replace(text, @"Connexion\sWi-Fi\sNintendo", "Wiimmfi", RegexOptions.IgnoreCase);
                        }
                        if (locale == Locale.ES)
                        {
                            text = Regex.Replace(text, @"Conexión\sWi-Fi\sde\sNintendo", "Wiimmfi", RegexOptions.IgnoreCase);
                            text = Regex.Replace(text, @"CWF\sde\sNintendo", "Wiimmfi", RegexOptions.IgnoreCase);
                            text = Regex.Replace(text, @"Conexión\sWi-Fi\sde<n>Nintendo", "Wiimmfi<n>", RegexOptions.IgnoreCase);
                            text = Regex.Replace(text, @"Conexión<n>Wi-Fi\sde\sNintendo", "Wiimmfi<n>", RegexOptions.IgnoreCase);
                        }
                        if (locale == Locale.JP)
                        {
                            text = text.Replace("Wi-Fi", "Wiimmfi", StringComparison.OrdinalIgnoreCase);
                        }
                        text = Regex.Replace(text, @"Nintendo\sWi-Fi\sConnection", "Wiimmfi", RegexOptions.IgnoreCase);
                        text = Regex.Replace(text, @"Nintendo\sWFC", "Wiimmfi", RegexOptions.IgnoreCase);
                        text = text.Replace("support.nintendo.com", "https://wiimmfi.de/error", StringComparison.OrdinalIgnoreCase);
                        ui_message.set(id, text);
                    }
                }
            }
            // write to files
            foreach (var entry in ui_messages)
            {
                string     locale     = entry.Key;
                UI_Message ui_message = entry.Value;
                Directory.CreateDirectory(Path.GetDirectoryName(riivFileSet.ui_message_csv[locale]));
                ui_message.writeToFile(riivFileSet.ui_message_csv[locale]);
            }
        }