mirror of
https://github.com/P3D-Legacy/P3D-Legacy.git
synced 2025-09-26 19:38:56 +02:00
193 lines
7.7 KiB
VB.net
193 lines
7.7 KiB
VB.net
Imports Newtonsoft.Json.Linq
|
|
|
|
Public Class Localization
|
|
Public Shared CurrentLanguage As String = "en"
|
|
Public Shared LocalizationTokens As Dictionary(Of String, Token) = New Dictionary(Of String, Token)
|
|
|
|
Public Shared Sub Load(ByVal CurrentLanguage As String)
|
|
LocalizationTokens.Clear()
|
|
|
|
Localization.CurrentLanguage = CurrentLanguage
|
|
|
|
Logger.Debug("Loaded language [" & CurrentLanguage & "]")
|
|
|
|
LoadTokenFile(GameMode.DefaultLocalizationsPath, False)
|
|
|
|
If GameModeManager.GameModeCount > 0 Then
|
|
Dim GameModeLocalizationPath As String = GameModeManager.ActiveGameMode.LocalizationsPath
|
|
If GameModeLocalizationPath <> GameMode.DefaultLocalizationsPath Then
|
|
LoadTokenFile(GameModeLocalizationPath, True)
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Public Shared Sub ReloadGameModeTokens()
|
|
For i = 0 To LocalizationTokens.Count - 1
|
|
If i <= LocalizationTokens.Count - 1 Then
|
|
Dim Token As Token = LocalizationTokens.Values(i)
|
|
|
|
If Token.IsGameModeToken = True Then
|
|
LocalizationTokens.Remove(LocalizationTokens.Keys(i))
|
|
i -= 1
|
|
End If
|
|
End If
|
|
Next
|
|
|
|
If GameModeManager.GameModeCount > 0 Then
|
|
Dim GameModeLocalizationPath As String = GameModeManager.ActiveGameMode.LocalizationsPath
|
|
If GameModeLocalizationPath <> GameMode.DefaultLocalizationsPath Then
|
|
LoadTokenFile(GameModeLocalizationPath, True)
|
|
End If
|
|
End If
|
|
|
|
Logger.Debug("---Reloaded GameMode Tokens---")
|
|
End Sub
|
|
|
|
Private Shared Sub LoadTokenFile(ByVal path As String, ByVal IsGameModeFile As Boolean)
|
|
Dim FullPath As String = GameController.GamePath & path
|
|
Dim LocaleFilePath As String = FullPath & CurrentLanguage & ".json"
|
|
Dim DefaultLanguagePath As String = FullPath & "en.json"
|
|
|
|
Logger.Debug("Token filepath: " & LocaleFilePath)
|
|
|
|
If System.IO.Directory.GetFiles(FullPath).Count > 0 Then
|
|
If System.IO.File.Exists(LocaleFilePath) = False Then
|
|
Logger.Debug("Did NOT find token file for suffix: " & CurrentLanguage)
|
|
CurrentLanguage = "en"
|
|
End If
|
|
|
|
If System.IO.File.Exists(LocaleFilePath) = True Then
|
|
Logger.Debug("Found token file for suffix: " & CurrentLanguage)
|
|
Dim TokensFile As JObject = JObject.Parse(System.IO.File.ReadAllText(DefaultLanguagePath))
|
|
Dim SelectedLanguage As String = TokensFile.SelectToken("language_name").ToString
|
|
Logger.Debug("Loaded Language file and its name is: " & SelectedLanguage)
|
|
For Each tokens In TokensFile.SelectToken("tokens").Values
|
|
If tokens.HasValues Then
|
|
For Each token In tokens
|
|
If token.HasValues Then
|
|
For Each subtoken In token
|
|
AddToken(token.Path, token.First.ToString, SelectedLanguage, IsGameModeFile)
|
|
Next
|
|
End If
|
|
AddToken(token.Path, token.First.ToString, SelectedLanguage, IsGameModeFile)
|
|
Next
|
|
Else
|
|
AddToken(tokens.Path, tokens.First.ToString, SelectedLanguage, IsGameModeFile)
|
|
End If
|
|
Next
|
|
End If
|
|
|
|
If CurrentLanguage IsNot "en" Then
|
|
If System.IO.File.Exists(DefaultLanguagePath) Then
|
|
Dim FallbackTokensFile As JObject = JObject.Parse(System.IO.File.ReadAllText(DefaultLanguagePath))
|
|
Dim SelectedLanguage As String = FallbackTokensFile.SelectToken("language_name").ToString
|
|
Logger.Debug("Loaded Fallback Language file and its name is: " & SelectedLanguage)
|
|
For Each tokens In FallbackTokensFile.SelectToken("tokens").Values
|
|
If tokens.HasValues Then
|
|
For Each token In tokens
|
|
If token.HasValues Then
|
|
For Each subtoken In token
|
|
AddToken(token.Path, token.First.ToString, SelectedLanguage, IsGameModeFile)
|
|
Next
|
|
End If
|
|
AddToken(token.Path, token.First.ToString, SelectedLanguage, IsGameModeFile)
|
|
Next
|
|
Else
|
|
AddToken(tokens.Path, tokens.First.ToString, SelectedLanguage, IsGameModeFile)
|
|
End If
|
|
Next
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
For Each lt In LocalizationTokens
|
|
If lt.Key.StartsWith("press_start") Then
|
|
Logger.Debug(lt.Key.ToString)
|
|
End If
|
|
Next
|
|
|
|
End Sub
|
|
|
|
Public Shared Function GetString(ByVal s As String, Optional ByVal DefaultValue As String = "") As String
|
|
Dim resultToken As Token = Nothing
|
|
s = s.Replace(" ", "_").Replace("'", "").ToLower() ' Lets format the string before finding it
|
|
If LocalizationTokens.ContainsKey(s) = True Then
|
|
Logger.Debug("GetString: " + s)
|
|
If LocalizationTokens.TryGetValue(s, resultToken) = False Then
|
|
Return s
|
|
Else
|
|
Dim result As String = resultToken.TokenContent
|
|
If Core.Player IsNot Nothing Then
|
|
result = result.Replace("<playername>", Core.Player.Name)
|
|
result = result.Replace("<rivalname>", Core.Player.RivalName)
|
|
End If
|
|
Return result
|
|
End If
|
|
Else
|
|
If DefaultValue = "" Then
|
|
Return s
|
|
Else
|
|
Return DefaultValue
|
|
End If
|
|
End If
|
|
End Function
|
|
|
|
Private Shared Function GetTokenName(ByVal s As String) As String
|
|
s = s.Replace("tokens.", "").ToLower() ' Lets format the string before finding it
|
|
Return s
|
|
End Function
|
|
|
|
Private Shared Function AddToken(ByVal key As String, ByVal value As String, ByVal lang As String, ByVal gmfile As Boolean) As String
|
|
key = GetTokenName(key)
|
|
If LocalizationTokens.ContainsKey(key) = False Then
|
|
LocalizationTokens.Add(key, New Token(value, lang, gmfile))
|
|
End If
|
|
End Function
|
|
|
|
Public Shared Function TokenExists(ByVal TokenName As String) As Boolean
|
|
Return LocalizationTokens.ContainsKey(TokenName)
|
|
End Function
|
|
|
|
End Class
|
|
|
|
Public Class Token
|
|
|
|
Private _TokenContent As String = ""
|
|
Private _TokenCurrentLanguage As String = "en"
|
|
Private _IsGameModeToken As Boolean = False
|
|
|
|
Public Sub New(ByVal TokenContent As String, ByVal TokenCurrentLanguage As String, ByVal IsGameModeToken As Boolean)
|
|
Me._IsGameModeToken = IsGameModeToken
|
|
Me._TokenContent = TokenContent
|
|
Me._TokenCurrentLanguage = TokenCurrentLanguage
|
|
End Sub
|
|
|
|
Public Property TokenContent() As String
|
|
Get
|
|
Return Me._TokenContent
|
|
End Get
|
|
Set(value As String)
|
|
Me._TokenContent = value
|
|
End Set
|
|
End Property
|
|
|
|
Public Property TokenCurrentLanguage() As String
|
|
Get
|
|
Return Me._TokenCurrentLanguage
|
|
End Get
|
|
Set(value As String)
|
|
Me._TokenCurrentLanguage = value
|
|
End Set
|
|
End Property
|
|
|
|
Public Property IsGameModeToken() As Boolean
|
|
Get
|
|
Return Me._IsGameModeToken
|
|
End Get
|
|
Set(value As Boolean)
|
|
Me._IsGameModeToken = value
|
|
End Set
|
|
End Property
|
|
|
|
End Class
|