Files
SecMPS/api_sqlsugar/VolPro.Core/Language/LanguageContainer.cs
2026-05-15 23:22:48 +08:00

310 lines
11 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Microsoft.Extensions.Primitives;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using VolPro.Core.Utilities;
namespace VolPro.Core
{
public static class LanguageContainer
{
private static readonly Dictionary<string, Dictionary<string, string>> LanguagePacks = new Dictionary<string, Dictionary<string, string>>();
public static void Add(string lang, Dictionary<string, string> dic)
{
LanguagePacks[lang] = dic;
}
public static void AddEnglish(Dictionary<string, string> dic)
{
LanguagePacks[LangConst.] = dic;
}
public static void AddDeutsch(Dictionary<string, string> dic)
{
LanguagePacks[LangConst.] = dic;
}
public static void AddIndonesian(Dictionary<string, string> dic)
{
LanguagePacks[LangConst.西] = dic;
}
/// <summary>
/// 普通字符串翻译
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static string Translator(this string key)
{
if (key == null) return key;
if (HttpContext.Current.Request.Headers.TryGetValue("lang", out StringValues langType))
{
if (langType != LangConst. && LanguagePacks.TryGetValue(langType.ToString(), out Dictionary<string, string> lang))
{
if (lang.TryGetValue(key, out string value))
{
return value;
}
}
}
return key;
}
public static string TranslatorLang(this string key, string langType)
{
if (key == null) return key;
if (langType != LangConst. && LanguagePacks.TryGetValue(langType.ToString(), out Dictionary<string, string> lang))
{
if (lang.TryGetValue(key, out string value))
{
return value;
}
}
return key;
}
/// <summary>
///
/// </summary>
/// <param name="keys"></param>
/// <returns></returns>
public static string TranslatorArray(this IEnumerable<string> keys, string langType)
{
if (keys == null || keys.Count() == 0) return "";
if (langType != LangConst.)
{
if (LanguagePacks.TryGetValue(langType.ToString(), out Dictionary<string, string> lang))
{
StringBuilder stringBuilder = new StringBuilder();
foreach (var str in keys)
{
if (str != null)
{
if (lang.TryGetValue(str, out string value))
{
stringBuilder.Append(" " + value);
}
else
{
stringBuilder.Append(" " + str);
}
}
}
return stringBuilder.ToString();
}
}
return string.Join("", keys);
}
/// <summary>
/// 对整个数组内容进行翻译
/// </summary>
/// <param name="keys"></param>
/// <returns></returns>
public static string TranslatorArray(this IEnumerable<string> keys)
{
if (keys == null || keys.Count() == 0) return "";
if (HttpContext.Current.Request.Headers.TryGetValue("lang", out StringValues langType) && langType != LangConst.)
{
if (LanguagePacks.TryGetValue(langType.ToString(), out Dictionary<string, string> lang))
{
StringBuilder stringBuilder = new StringBuilder();
foreach (var str in keys)
{
if (lang.TryGetValue(str, out string value))
{
stringBuilder.Append(" " + value);
}
else
{
stringBuilder.Append(" " + str);
}
}
return stringBuilder.ToString();
}
}
return string.Join("", keys);
}
/// <summary>
/// 翻译替换内容,如:第{$ts}行,{$ts}不能为空param=["1","xxx"]
/// 翻译结果第1行,xxx不能为空
/// </summary>
/// <param name="key"></param>
/// <param name="param"></param>
/// <returns></returns>
public static string TranslatorFormat(this string key, params object[] param)
{
if (key == null || param == null || param.Length == 0) return key;
bool zh = false;
if (HttpContext.Current.Request.Headers.TryGetValue("lang", out StringValues langType))
{
if (langType != LangConst.)
{
if (LanguagePacks.TryGetValue(langType.ToString(), out Dictionary<string, string> lang))
{
if (lang.TryGetValue(key, out string value))
{
return value.Format(false, param);
}
}
}
else
{
zh = true;
}
}
return key.Format(zh, param);
}
public static string TranslatorLangFormat(this string key, string langType, params object[] param)
{
if (key == null || param == null || param.Length == 0) return key;
bool zh = false;
if (langType != LangConst.)
{
if (LanguagePacks.TryGetValue(langType, out Dictionary<string, string> lang))
{
if (lang.TryGetValue(key, out string value))
{
return value.Format(false, param);
}
}
}
else
{
zh = true;
}
return key.Format(zh, param);
}
/// <summary>
/// 翻译替换内容,如:第{$ts}行翻译成Line{$ts}
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="tsValue">是否翻译value值</param>
/// <returns></returns>
public static string TranslatorReplace(this string key, object value, bool tsValue = false)
{
if (key == null) return key;
if (HttpContext.Current.Request.Headers.TryGetValue("lang", out StringValues langType))
{
return key.TranslatorReplace(value, langType.ToString(), tsValue);
}
return key.Replace("{$ts}", tsValue ? value?.ToString().Translator() : value?.ToString());
}
public static string TranslatorReplace(this string key, object value, string langType, bool tsValue = false)
{
if (key == null) return key;
if (langType == LangConst.)
{
return key.Replace("{$ts}", value.ToString());
}
if (LanguagePacks.TryGetValue(langType, out Dictionary<string, string> lang))
{
if (lang.TryGetValue(key, out string _value))
{
return _value.Replace("{$ts}", tsValue ? value?.ToString().Translator() : value?.ToString());
}
}
return key.Replace("{$ts}", tsValue ? value?.ToString().Translator() : value?.ToString());
}
private static string Format(this string key, bool zh, params object[] param)
{
if (key == null) return key;
string[] template = key.Split("{$ts}");
StringBuilder builder = new StringBuilder();
for (int i = 0; i < template.Length - 1; i++)
{
if (zh)
{
builder.Append(template[i] + param[i]?.ToString());
}
else
{
builder.Append(" " + template[i] + " " + param[i]?.ToString()?.Translator() + " ");
}
}
builder.Append(template[template.Length - 1]);
return builder.ToString();
}
public static LangType GetCurrentLangType(this Microsoft.AspNetCore.Http.HttpContext httpContext)
{
if (HttpContext.Current.Request.Headers.TryGetValue("lang", out StringValues langType))
{
if (langType == LangConst.)
{
return LangType.;
}
else if (langType == LangConst.西)
{
return LangType.西;
}
else if (langType == LangConst.)
{
return LangType.;
}
};
return LangType.;
}
public static string GetCurrentLangTypeString(this Microsoft.AspNetCore.Http.HttpContext httpContext)
{
if (HttpContext.Current.Request.Headers.TryGetValue("lang", out StringValues langType))
{
if (langType == LangConst.)
{
return LangConst.;
}
if (langType == LangConst.西)
{
return LangConst.西;
}
if (langType == LangConst.)
{
return LangConst.;
}
if (langType == LangConst.)
{
return LangConst.;
}
};
return LangConst.;
}
}
public struct LangConst
{
public const string = "zh-cn";
public const string = "zh-tw";
public const string = "en";
public const string = "fr";
public const string 西 = "es";
public const string = "ar";
public const string = "ru";
}
public enum LangType
{
= 1,
,
,
,
西,
,
}
}