![]() |
#17
|
|||
|
|||
![]() Quote:
In your script: Code:
private Configuration Config = Configuration.GetInstance(CONFIG_FILE); ... Config.GetString("Messages", msgKey, pl.LanguageName()); Code:
private SendTranslate initTranslate = SendTranslate.GetInstance(localizationFilePath); Code:
initTranslate.GetString("Messages", msgKey, pl.LanguageName()) Code:
SendTranslate.GetString("Messages", msgKey, pl.LanguageName(), "Chat") Code:
public static string GetString(string section, string key, string language) Code:
private static void Send(Player[] playerList, string section, string key, string target, params object[] args) Code:
initTranslate.GetString("Messages", msgKey, pl.LanguageName()) Code:
using System; using System.IO; using System.Collections; using System.Collections.Generic; using maddox.game; using maddox.game.world; using System.Xml; namespace smpmessage { // ==================================================== // (based on Small_Bee and FG_Kodiak code) // ==================================================== public sealed class SendTranslate { #region Parameters private static volatile SendTranslate _theOneAndOnly = null; private static readonly Dictionary<string, Dictionary<string, Dictionary<string, string>>> _stringPool = new Dictionary<string, Dictionary<string, Dictionary<string, string>>>(); static readonly IGamePlay GamePlay = Strategy.THIS.GamePlay; private static object syncRoot = new object(); //nessesary for threadsave Singleton const string XmlLanguagenode = "SMP/LanguageSection"; private const string DefaultLanguage = "en"; public static string setupServerLanguage = "en"; public static string hudON = "on"; #endregion #region Read File public static SendTranslate GetInstance(string filename) { if (_theOneAndOnly == null) { lock (syncRoot) { if (_theOneAndOnly == null) { _theOneAndOnly = new SendTranslate(filename); } } } return _theOneAndOnly; } private SendTranslate(string filename) { LoadSettings(filename); } private XmlDocument LoadXMLFile(string file) { // Load the xml-file in a xml-document XmlDocument xDoc = new XmlDocument(); try { xDoc.Load(file); } catch (System.IO.FileNotFoundException) { throw new Exception("Xml-File " + file + " not found"); } catch (Exception ex) { throw new Exception("Error loading " + file + ": " + ex.Message); } return xDoc; } private void LoadSettings(string languageFile) { XmlDocument xDoc = LoadXMLFile(languageFile); var xmlNodeList = xDoc.SelectNodes(XmlLanguagenode); if (xmlNodeList != null) foreach (XmlNode sectionNode in xmlNodeList) { var strs = new Dictionary<string, Dictionary<string, string>>(); foreach (XmlNode textNode in sectionNode.ChildNodes) { var texts = new Dictionary<string, string>(); foreach (XmlNode txt in textNode.ChildNodes) { texts.Add(txt.Name, txt.InnerText); } if (textNode.Attributes != null) strs.Add(textNode.Attributes["key"].Value, texts); } if (sectionNode.Attributes != null) _stringPool.Add(sectionNode.Attributes["name"].Value, strs); } } public static string GetString(string section, string key, string language) { if (_stringPool.Count > 0) { Dictionary<string, Dictionary<string, string>> strs; if (_stringPool.TryGetValue(section, out strs)) { Dictionary<string, string> texts; if (strs.TryGetValue(key, out texts)) { string text; if (texts.TryGetValue(language, out text)) return text; if (texts.TryGetValue(DefaultLanguage, out text)) return text; } } } return key; // if nothing is found return a empty string -> modify if a error message is needed. } public string GetString(string section, string key) { return GetString(section, key, DefaultLanguage); } #endregion #region Send Translate Message to List public static void ToAll(string section, string key, string target, params object[] args) { Send(SendMessage.GetPlayerList(1), section, key, target, args); Send(SendMessage.GetPlayerList(2), section, key, target, args); } public static void ToArmy(string section, string key, int army, string target, params object[] args) { Send(SendMessage.GetPlayerList(army), section, key, target, args); } public static void ToPlayers(string section, string key, Player[] players, string target, params object[] args) { Send(players, section, key, target, args); } #endregion #region Send private static void Send(Player[] playerList, string section, string key, string target, params object[] args) { Dictionary<string, List<Player>> playerLanguageDict = new Dictionary<string, List<Player>>(); List<Player> serverList = new List<Player>(); string serverLanguageName = "en"; if (GamePlay.gpPlayer() != null) { serverList.Add(GamePlay.gpPlayer()); } foreach (Player player in playerList) { string languageName = player.LanguageName(); if (!playerLanguageDict.ContainsKey(languageName)) { playerLanguageDict.Add(languageName, new List<Player>()); } playerLanguageDict[languageName].Add(player); } if (serverList.Count > 0) { foreach (Player serverPlayer in serverList) { serverLanguageName = serverPlayer.LanguageName(); if (setupServerLanguage != "off") { serverLanguageName = setupServerLanguage; } } if (target == "Screen" && hudON == "on") { GamePlay.gpLogServer(serverList.ToArray(), "[HUD]:" + GetString(section, key, serverLanguageName), args); } else { GamePlay.gpLogServer(serverList.ToArray(), GetString(section, key, serverLanguageName), args); } } if (playerList.Length > 0) { foreach (KeyValuePair<string, List<Player>> kvp in playerLanguageDict) { switch (target) { case "ChatAndScreen": { GamePlay.gpLogServer(kvp.Value.ToArray(), GetString(section, key, kvp.Key.ToString()), args); GamePlay.gpHUDLogCenter(kvp.Value.ToArray(), GetString(section, key, kvp.Key.ToString()), args); } break; case "Chat": GamePlay.gpLogServer(kvp.Value.ToArray(), GetString(section, key, kvp.Key.ToString()), args); break; case "Screen": GamePlay.gpHUDLogCenter(kvp.Value.ToArray(), GetString(section, key, kvp.Key.ToString()), args); break; } } } } #endregion } public static class SendMessage { #region Parameters static readonly IGamePlay GamePlay = Strategy.THIS.GamePlay; public static string hudON = "on"; #endregion #region Send Message to List public static void ToAll(string message, string target, params object[] args) { Send(GetPlayerList(1), message, target, args); Send(GetPlayerList(2), message, target, args); } public static void ToArmy(string message, int army, string target, params object[] args) { Send(GetPlayerList(army), message, target, args); } public static void ToPlayers(string message, Player[] players, string target, params object[] args) { Send(players, message, target, args); } #endregion #region Send private static void Send(Player[] playerList, string message, string target, params object[] args) { List<Player> serverList = new List<Player>(); if (GamePlay.gpPlayer() != null) { serverList.Add(GamePlay.gpPlayer()); } if (serverList.Count > 0) { if (target == "Screen" && hudON == "on") { GamePlay.gpLogServer(serverList.ToArray(), "[HUD]:" + message, args); } else { GamePlay.gpLogServer(serverList.ToArray(), message, args); } } if (playerList.Length > 0) { switch (target) { case "ChatAndScreen": { GamePlay.gpLogServer(playerList, message, args); GamePlay.gpHUDLogCenter(playerList, message, args); } break; case "Chat": { GamePlay.gpLogServer(playerList, message, args); break; } case "Screen": GamePlay.gpHUDLogCenter(playerList, message, args); break; } } } #endregion #region GetPlayerList public static Player[] GetPlayerList(int army) { List<Player> playerList = new List<Player>(); List<Player> playerArmyList = new List<Player>(); if (GamePlay.gpPlayer() != null) playerList.Add(GamePlay.gpPlayer()); if (GamePlay.gpRemotePlayers() != null) playerList.AddRange(GamePlay.gpRemotePlayers()); if (playerList != null) { foreach (Player player in playerList) { if (player.Army() == army && player != null) playerArmyList.Add(player); } } return playerArmyList.ToArray(); } #endregion } } Code:
//$reference "smpMessage.dll" using System; using maddox.game; using maddox.game.world; using smpmessage; /* Available methods: * -- Translate and send message * public static void ToAll(string section, string key, string target, params object[] args) * public static void ToArmy(string section, string key, int army, string target, params object[] args) * public static void ToPlayers(string section, string key, Player[] players, string target, params object[] args) * * -- No translate, only send message * public static void ToAll(string message, string target, params object[] args) * public static void ToArmy(string message, int army, string target, params object[] args) * public static void ToPlayers(string message, Player[] players, string target, params object[] args) * * -- Only translate, no send message * public string GetString(string section, string key, string language) * * Available languages in game: en ru de fr es cs it pl */ public class Mission : AMission { // Path to localization xml-file, if you want to use localization on your script private static string localizationFilePath = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "\\1C SoftClub\\il-2 sturmovik cliffs of dover\\missions\\Single\\LocalizationExample\\localization.xml"; // Create dictionary for translate and send messages private SendTranslate initTranslate = SendTranslate.GetInstance(localizationFilePath); public override void OnBattleStarted() { base.OnBattleStarted(); MissionNumberListener = -1; } public override void OnPlaceEnter(Player player, AiActor actor, int placeIndex) { base.OnPlaceEnter(player, actor, placeIndex); initTranslate.GetString("SendMessageSection", "GetTranslateText", "en"); // TEST Messages // Translate and send message /* initTranslate.ToAll("SendMessageSection", "SendToChatToALLtranslate", "Chat"); initTranslate.ToPlayers("SendMessageSection", "SendToChatToPlayertranslate", new Player[] { player }, "Chat"); initTranslate.ToArmy("SendMessageSection", "SendToChatToArmytranslate", 1, "Chat"); initTranslate.ToAll("SendMessageSection", "SendToScreenToALLtranslate", "Screen"); initTranslate.ToPlayers("SendMessageSection", "SendToScreenToPlayertranslate", new Player[] { player }, "Screen"); initTranslate.ToArmy("SendMessageSection", "SendToScreenToArmytranslate", 1, "Screen"); initTranslate.ToAll("SendMessageSection", "SendToChatAndScreenToALLtranslate", "ChatAndScreen"); initTranslate.ToPlayers("SendMessageSection", "SendToChatAndScreenToPlayertranslate", new Player[] { player }, "ChatAndScreen"); initTranslate.ToArmy("SendMessageSection", "SendToChatAndScreenToArmytranslate", 1, "ChatAndScreen"); */ // No translate, only send message SendMessage.ToAll("Message to ALL - ENGLISH or ДРУГОЙ ЯЗЫК", "Chat"); SendMessage.ToPlayers("Message to Players - ENGLISH or ДРУГОЙ ЯЗЫК", new Player[] { player }, "Chat"); SendMessage.ToArmy("Message to Army - ENGLISH or ДРУГОЙ ЯЗЫК", 1, "Chat"); SendMessage.ToAll("Message to ALL - ENGLISH or ДРУГОЙ ЯЗЫК", "Screen"); SendMessage.ToPlayers("Message to Players - ENGLISH or ДРУГОЙ ЯЗЫК", new Player[] { player }, "Screen"); SendMessage.ToArmy("Message to Army - ENGLISH or ДРУГОЙ ЯЗЫК", 1, "Screen"); SendMessage.ToAll("Message to ALL - ENGLISH or ДРУГОЙ ЯЗЫК", "ChatAndScreen"); SendMessage.ToPlayers("Message to Players - ENGLISH or ДРУГОЙ ЯЗЫК", new Player[] { player }, "ChatAndScreen"); SendMessage.ToArmy("Message to Army - ENGLISH or ДРУГОЙ ЯЗЫК", 1, "ChatAndScreen"); // Only translate, no send message //initTranslate.GetString("SendMessageSection", "GetTranslateText", "en"); //initTranslate.GetString("SendMessageSection", "GetTranslateText", "ru"); //initTranslate.GetString("SendMessageSection", "GetTranslateText", player.LanguageName()); // Examples for using translated text: /* SendMessage.ToAll(initTranslate.GetString("SendMessageSection", "GetTranslateText", "en"), "Chat"); SendMessage.ToAll(initTranslate.GetString("SendMessageSection", "GetTranslateText", player.LanguageName()), "Chat"); SendMessage.ToAll(initTranslate.GetString("SendMessageSection", "GetTranslateText", "de"), "Chat"); */ // Using parameters in messages int number1 = 1000; int number2 = 500; SendMessage.ToAll("SendMessageSection", "============NO TRANSLATE LINE whith xml-file===========", "Chat"); SendMessage.ToAll("Parameters", "useParametersLabel", "Chat", number1, number2); SendMessage.ToAll("Parameters", "useParametersLabel", "Screen", number1, number2); SendMessage.ToAll("Parameters", "useParametersLabel", "ChatAndScreen", number1, number2); SendMessage.ToAll("Number1 = {0}, Number2 = {1}", "Chat", number1, number2); SendMessage.ToAll("Number1 = {0}, Number2 = {1}", "Screen", number1, number2); SendMessage.ToAll("Number1 = {0}, Number2 = {1}", "ChatAndScreen", number1, number2); SendMessage.ToAll("============NO TRANSLATE LINE whithout xml-file===========", "Chat"); } } Code:
<?xml version="1.0" encoding="utf-8"?> <!-- Language dictionary--> <SMP> <LanguageSection name="SendMessageSection"> <Text key="SendToChatToALLtranslate"> <en>Send To Chat To ALL translate ENGLISH</en> <ru>Send To Chat To ALL translate РУССКИЙ</ru> </Text> <Text key="SendToChatToPlayertranslate"> <en>Send To Chat To Player translate ENGLISH</en> <ru>Send To Chat To Player translate РУССКИЙ</ru> </Text> <Text key="SendToChatToArmytranslate"> <en>Send To Chat To Army translate ENGLISH</en> <ru>Send To Chat To Army translate РУССКИЙ</ru> </Text> <Text key="SendToScreenToALLtranslate"> <en>Send To Screen To ALL translate ENGLISH</en> <ru>Send To Screen To ALL translate РУССКИЙ</ru> </Text> <Text key="SendToScreenToPlayertranslate"> <en>Send To Screen To Player translate ENGLISH</en> <ru>Send To Screen To Player translate РУССКИЙ</ru> </Text> <Text key="SendToScreenToArmytranslate"> <en>Send To Screen To Army translate ENGLISH</en> <ru>Send To Screen To Army translate РУССКИЙ</ru> </Text> <Text key="SendToChatAndScreenToALLtranslate"> <en>Send To Chat And Screen To ALL translate ENGLISH</en> <ru>Send To Chat And Screen To ALL translate РУССКИЙ</ru> </Text> <Text key="SendToChatAndScreenToPlayertranslate"> <en>Send To Chat And Screen To Player translate ENGLISH</en> <ru>Send To Chat And Screen To Player translate РУССКИЙ</ru> </Text> <Text key="SendToChatAndScreenToArmytranslate"> <en>Send To Chat And Screen To Army translate ENGLISH</en> <ru>Send To Chat And Screen To Army translate РУССКИЙ</ru> </Text> <Text key="GetTranslateText"> <en>Get Translate Text ENGLISH</en> <ru>Get Translate Text РУССКИЙ</ru> </Text> <Text key="useParametersLabel"> <en>Number1: {0}, Number2: {1}</en> <ru>Число 1: {0}, Число 2: {1}</ru> </Text> </LanguageSection> <LanguageSection name="Parameters"> <Text key="useParametersLabel"> <en>Number1: {0}, Number2: {1}</en> <ru>Число 1: {0}, Число 2: {1}</ru> </Text> </LanguageSection> </SMP> Last edited by podvoxx; 07-06-2012 at 06:15 AM. |
|
|