(77c9efbf8) Display the language names in the respective languages in the initial language selection screen. Closes #1467
This commit is contained in:
@@ -16,7 +16,7 @@ namespace Barotrauma
|
|||||||
private RenderTarget2D renderTarget;
|
private RenderTarget2D renderTarget;
|
||||||
|
|
||||||
private Sprite languageSelectionCursor;
|
private Sprite languageSelectionCursor;
|
||||||
private ScalableFont languageSelectionFont;
|
private ScalableFont languageSelectionFont, languageSelectionFontCJK;
|
||||||
|
|
||||||
private Video currSplashScreen;
|
private Video currSplashScreen;
|
||||||
private DateTime videoStartTime;
|
private DateTime videoStartTime;
|
||||||
@@ -220,7 +220,13 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
if (languageSelectionFont == null)
|
if (languageSelectionFont == null)
|
||||||
{
|
{
|
||||||
languageSelectionFont = new ScalableFont("Content/Fonts/BebasNeue-Regular.otf", (uint)(30 * (GameMain.GraphicsHeight / 1080.0f)), graphicsDevice);
|
languageSelectionFont = new ScalableFont("Content/Fonts/NotoSans/NotoSans-Bold.ttf",
|
||||||
|
(uint)(30 * (GameMain.GraphicsHeight / 1080.0f)), graphicsDevice);
|
||||||
|
}
|
||||||
|
if (languageSelectionFontCJK == null)
|
||||||
|
{
|
||||||
|
languageSelectionFontCJK = new ScalableFont("Content/Fonts/NotoSans/NotoSansCJKsc-Bold.otf",
|
||||||
|
(uint)(30 * (GameMain.GraphicsHeight / 1080.0f)), graphicsDevice, dynamicLoading: true);
|
||||||
}
|
}
|
||||||
if (languageSelectionCursor == null)
|
if (languageSelectionCursor == null)
|
||||||
{
|
{
|
||||||
@@ -231,13 +237,15 @@ namespace Barotrauma
|
|||||||
Vector2 textSpacing = new Vector2(0.0f, (GameMain.GraphicsHeight * 0.5f) / TextManager.AvailableLanguages.Count());
|
Vector2 textSpacing = new Vector2(0.0f, (GameMain.GraphicsHeight * 0.5f) / TextManager.AvailableLanguages.Count());
|
||||||
foreach (string language in TextManager.AvailableLanguages)
|
foreach (string language in TextManager.AvailableLanguages)
|
||||||
{
|
{
|
||||||
Vector2 textSize = languageSelectionFont.MeasureString(language);
|
string localizedLanguageName = TextManager.GetTranslatedLanguageName(language);
|
||||||
|
var font = TextManager.IsCJK(localizedLanguageName) ? languageSelectionFontCJK : languageSelectionFont;
|
||||||
|
|
||||||
|
Vector2 textSize = font.MeasureString(localizedLanguageName);
|
||||||
bool hover =
|
bool hover =
|
||||||
Math.Abs(PlayerInput.MousePosition.X - textPos.X) < textSize.X / 2 &&
|
Math.Abs(PlayerInput.MousePosition.X - textPos.X) < textSize.X / 2 &&
|
||||||
Math.Abs(PlayerInput.MousePosition.Y - textPos.Y) < textSpacing.Y / 2;
|
Math.Abs(PlayerInput.MousePosition.Y - textPos.Y) < textSpacing.Y / 2;
|
||||||
|
|
||||||
//TODO: display the name of the language in the target language?
|
font.DrawString(spriteBatch, localizedLanguageName, textPos - textSize / 2,
|
||||||
languageSelectionFont.DrawString(spriteBatch, language, textPos - textSize / 2,
|
|
||||||
hover ? Color.White : Color.White * 0.6f);
|
hover ? Color.White : Color.White * 0.6f);
|
||||||
if (hover && PlayerInput.LeftButtonClicked())
|
if (hover && PlayerInput.LeftButtonClicked())
|
||||||
{
|
{
|
||||||
@@ -247,12 +255,15 @@ namespace Barotrauma
|
|||||||
GameMain.Config.SetDefaultBindings(legacy: false);
|
GameMain.Config.SetDefaultBindings(legacy: false);
|
||||||
GameMain.Config.CheckBindings(useDefaults: true);
|
GameMain.Config.CheckBindings(useDefaults: true);
|
||||||
WaitForLanguageSelection = false;
|
WaitForLanguageSelection = false;
|
||||||
|
languageSelectionFont?.Dispose(); languageSelectionFont = null;
|
||||||
|
languageSelectionFontCJK?.Dispose(); languageSelectionFontCJK = null;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
textPos += textSpacing;
|
textPos += textSpacing;
|
||||||
}
|
}
|
||||||
|
|
||||||
languageSelectionCursor.Draw(spriteBatch, PlayerInput.LatestMousePosition);
|
languageSelectionCursor.Draw(spriteBatch, PlayerInput.LatestMousePosition, scale: 0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DrawSplashScreen(SpriteBatch spriteBatch, GraphicsDevice graphics)
|
private void DrawSplashScreen(SpriteBatch spriteBatch, GraphicsDevice graphics)
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ namespace Barotrauma
|
|||||||
string currWord = "";
|
string currWord = "";
|
||||||
for (int i = 0; i < text.Length; i++)
|
for (int i = 0; i < text.Length; i++)
|
||||||
{
|
{
|
||||||
if (isCJK.IsMatch(text[i].ToString()))
|
if (TextManager.IsCJK(text[i].ToString()))
|
||||||
{
|
{
|
||||||
if (currWord.Length > 0)
|
if (currWord.Length > 0)
|
||||||
{
|
{
|
||||||
@@ -200,7 +200,7 @@ namespace Barotrauma
|
|||||||
linePos = size.X + spaceSize.X;
|
linePos = size.X + spaceSize.X;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i < words.Count - 1 && !isCJK.IsMatch(words[i]) && !isCJK.IsMatch(words[i + 1]))
|
if (i < words.Count - 1 && !TextManager.IsCJK(words[i]) && !TextManager.IsCJK(words[i + 1]))
|
||||||
{
|
{
|
||||||
wrappedText.Append(" ");
|
wrappedText.Append(" ");
|
||||||
}
|
}
|
||||||
@@ -208,16 +208,5 @@ namespace Barotrauma
|
|||||||
|
|
||||||
return wrappedText.ToString().Replace(" \n ", "\n");
|
return wrappedText.ToString().Replace(" \n ", "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static Regex isCJK = new Regex(
|
|
||||||
@"\p{IsHangulJamo}|" +
|
|
||||||
@"\p{IsCJKRadicalsSupplement}|" +
|
|
||||||
@"\p{IsCJKSymbolsandPunctuation}|" +
|
|
||||||
@"\p{IsEnclosedCJKLettersandMonths}|" +
|
|
||||||
@"\p{IsCJKCompatibility}|" +
|
|
||||||
@"\p{IsCJKUnifiedIdeographsExtensionA}|" +
|
|
||||||
@"\p{IsCJKUnifiedIdeographs}|" +
|
|
||||||
@"\p{IsHangulSyllables}|" +
|
|
||||||
@"\p{IsCJKCompatibilityForms}");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -337,79 +337,6 @@ namespace Barotrauma
|
|||||||
keyMapping[(int)InputType.SelectNextCharacter] = new KeyOrMouse(Keys.Z);
|
keyMapping[(int)InputType.SelectNextCharacter] = new KeyOrMouse(Keys.Z);
|
||||||
keyMapping[(int)InputType.SelectPreviousCharacter] = new KeyOrMouse(Keys.X);
|
keyMapping[(int)InputType.SelectPreviousCharacter] = new KeyOrMouse(Keys.X);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void CheckBindings(bool useDefaults)
|
|
||||||
{
|
|
||||||
foreach (InputType inputType in Enum.GetValues(typeof(InputType)))
|
|
||||||
{
|
|
||||||
var binding = keyMapping[(int)inputType];
|
|
||||||
if (binding == null)
|
|
||||||
{
|
|
||||||
switch (inputType)
|
|
||||||
{
|
|
||||||
case InputType.Deselect:
|
|
||||||
if (useDefaults)
|
|
||||||
{
|
|
||||||
binding = new KeyOrMouse(1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Legacy support
|
|
||||||
var selectKey = keyMapping[(int)InputType.Select];
|
|
||||||
if (selectKey != null && selectKey.Key != Keys.None)
|
|
||||||
{
|
|
||||||
binding = new KeyOrMouse(selectKey.Key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case InputType.Shoot:
|
|
||||||
if (useDefaults)
|
|
||||||
{
|
|
||||||
binding = new KeyOrMouse(0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Legacy support
|
|
||||||
var useKey = keyMapping[(int)InputType.Use];
|
|
||||||
if (useKey != null && useKey.MouseButton.HasValue)
|
|
||||||
{
|
|
||||||
binding = new KeyOrMouse(useKey.MouseButton.Value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (binding == null)
|
|
||||||
{
|
|
||||||
DebugConsole.ThrowError("Key binding for the input type \"" + inputType + " not set!");
|
|
||||||
binding = new KeyOrMouse(Keys.D1);
|
|
||||||
}
|
|
||||||
keyMapping[(int)inputType] = binding;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Load DefaultConfig
|
|
||||||
private void LoadDefaultConfig(bool setLanguage = true)
|
|
||||||
{
|
|
||||||
XDocument doc = XMLExtensions.TryLoadXml(savePath);
|
|
||||||
|
|
||||||
if (setLanguage || string.IsNullOrEmpty(Language))
|
|
||||||
{
|
|
||||||
Language = doc.Root.GetAttributeString("language", "English");
|
|
||||||
}
|
|
||||||
|
|
||||||
MasterServerUrl = doc.Root.GetAttributeString("masterserverurl", "");
|
|
||||||
|
|
||||||
AutoCheckUpdates = doc.Root.GetAttributeBool("autocheckupdates", true);
|
|
||||||
WasGameUpdated = doc.Root.GetAttributeBool("wasgameupdated", false);
|
|
||||||
|
|
||||||
VerboseLogging = doc.Root.GetAttributeBool("verboselogging", false);
|
|
||||||
SaveDebugConsoleLogs = doc.Root.GetAttributeBool("savedebugconsolelogs", false);
|
|
||||||
|
|
||||||
QuickStartSubmarineName = doc.Root.GetAttributeString("quickstartsub", "");
|
|
||||||
|
|
||||||
if (legacy)
|
if (legacy)
|
||||||
{
|
{
|
||||||
@@ -962,19 +889,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
foreach (XElement subElement in doc.Root.Elements())
|
foreach (XElement subElement in doc.Root.Elements())
|
||||||
{
|
{
|
||||||
DebugConsole.ThrowError(TextManager.Get("ContentPackageNotFound").Replace("[packagepath]", missingPackagePath));
|
switch (subElement.Name.ToString().ToLowerInvariant())
|
||||||
}
|
|
||||||
foreach (ContentPackage incompatiblePackage in incompatiblePackages)
|
|
||||||
{
|
|
||||||
DebugConsole.ThrowError(TextManager.Get(incompatiblePackage.GameVersion <= new Version(0, 0, 0, 0) ? "IncompatibleContentPackageUnknownVersion" : "IncompatibleContentPackage")
|
|
||||||
.Replace("[packagename]", incompatiblePackage.Name)
|
|
||||||
.Replace("[packageversion]", incompatiblePackage.GameVersion.ToString())
|
|
||||||
.Replace("[gameversion]", GameMain.Version.ToString()));
|
|
||||||
}
|
|
||||||
foreach (ContentPackage contentPackage in SelectedContentPackages)
|
|
||||||
{
|
|
||||||
bool packageOk = contentPackage.VerifyFiles(out List<string> errorMessages);
|
|
||||||
if (!packageOk)
|
|
||||||
{
|
{
|
||||||
case "contentpackage":
|
case "contentpackage":
|
||||||
string path = System.IO.Path.GetFullPath(subElement.GetAttributeString("path", ""));
|
string path = System.IO.Path.GetFullPath(subElement.GetAttributeString("path", ""));
|
||||||
@@ -1088,7 +1003,6 @@ namespace Barotrauma
|
|||||||
new XAttribute("autocheckupdates", AutoCheckUpdates),
|
new XAttribute("autocheckupdates", AutoCheckUpdates),
|
||||||
new XAttribute("musicvolume", musicVolume),
|
new XAttribute("musicvolume", musicVolume),
|
||||||
new XAttribute("soundvolume", soundVolume),
|
new XAttribute("soundvolume", soundVolume),
|
||||||
new XAttribute("voicechatvolume", voiceChatVolume),
|
|
||||||
new XAttribute("verboselogging", VerboseLogging),
|
new XAttribute("verboselogging", VerboseLogging),
|
||||||
new XAttribute("savedebugconsolelogs", SaveDebugConsoleLogs),
|
new XAttribute("savedebugconsolelogs", SaveDebugConsoleLogs),
|
||||||
new XAttribute("enablesplashscreen", EnableSplashScreen),
|
new XAttribute("enablesplashscreen", EnableSplashScreen),
|
||||||
@@ -1115,6 +1029,7 @@ namespace Barotrauma
|
|||||||
gMode = new XElement("graphicsmode");
|
gMode = new XElement("graphicsmode");
|
||||||
doc.Root.Add(gMode);
|
doc.Root.Add(gMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GraphicsWidth == 0 || GraphicsHeight == 0)
|
if (GraphicsWidth == 0 || GraphicsHeight == 0)
|
||||||
{
|
{
|
||||||
gMode.ReplaceAttributes(new XAttribute("displaymode", windowMode));
|
gMode.ReplaceAttributes(new XAttribute("displaymode", windowMode));
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
namespace Barotrauma
|
namespace Barotrauma
|
||||||
{
|
{
|
||||||
@@ -43,6 +44,26 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the name of the language in the respective language
|
||||||
|
/// </summary>
|
||||||
|
public static string GetTranslatedLanguageName(string language)
|
||||||
|
{
|
||||||
|
if (!textPacks.ContainsKey(language))
|
||||||
|
{
|
||||||
|
return language;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var textPack in textPacks[language])
|
||||||
|
{
|
||||||
|
if (textPack.Language == language)
|
||||||
|
{
|
||||||
|
return textPack.TranslatedName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return language;
|
||||||
|
}
|
||||||
|
|
||||||
public static void LoadTextPacks(IEnumerable<ContentPackage> selectedContentPackages)
|
public static void LoadTextPacks(IEnumerable<ContentPackage> selectedContentPackages)
|
||||||
{
|
{
|
||||||
availableLanguages.Clear();
|
availableLanguages.Clear();
|
||||||
@@ -372,6 +393,25 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Regex isCJK = new Regex(
|
||||||
|
@"\p{IsHangulJamo}|" +
|
||||||
|
@"\p{IsCJKRadicalsSupplement}|" +
|
||||||
|
@"\p{IsCJKSymbolsandPunctuation}|" +
|
||||||
|
@"\p{IsEnclosedCJKLettersandMonths}|" +
|
||||||
|
@"\p{IsCJKCompatibility}|" +
|
||||||
|
@"\p{IsCJKUnifiedIdeographsExtensionA}|" +
|
||||||
|
@"\p{IsCJKUnifiedIdeographs}|" +
|
||||||
|
@"\p{IsHangulSyllables}|" +
|
||||||
|
@"\p{IsCJKCompatibilityForms}");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Does the string contain symbols from Chinese, Japanese or Korean languages
|
||||||
|
/// </summary>
|
||||||
|
public static bool IsCJK(string text)
|
||||||
|
{
|
||||||
|
return isCJK.IsMatch(text);
|
||||||
|
}
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
public static void CheckForDuplicates(string lang)
|
public static void CheckForDuplicates(string lang)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -10,6 +10,11 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
public readonly string Language;
|
public readonly string Language;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The name of the language in the language this pack is written in
|
||||||
|
/// </summary>
|
||||||
|
public readonly string TranslatedName;
|
||||||
|
|
||||||
private Dictionary<string, List<string>> texts;
|
private Dictionary<string, List<string>> texts;
|
||||||
|
|
||||||
private readonly string filePath;
|
private readonly string filePath;
|
||||||
@@ -23,6 +28,7 @@ namespace Barotrauma
|
|||||||
if (doc == null || doc.Root == null) return;
|
if (doc == null || doc.Root == null) return;
|
||||||
|
|
||||||
Language = doc.Root.GetAttributeString("language", "Unknown");
|
Language = doc.Root.GetAttributeString("language", "Unknown");
|
||||||
|
TranslatedName = doc.Root.GetAttributeString("translatedname", Language);
|
||||||
|
|
||||||
foreach (XElement subElement in doc.Root.Elements())
|
foreach (XElement subElement in doc.Root.Elements())
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user