mirror of
https://github.com/bitwarden/android.git
synced 2025-01-01 05:48:34 +03:00
147 lines
5.1 KiB
C#
147 lines
5.1 KiB
C#
using Bit.App.Resources;
|
|
using Bit.Core.Abstractions;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Globalization;
|
|
using System.Reflection;
|
|
using System.Resources;
|
|
using System.Threading;
|
|
|
|
namespace Bit.App.Services
|
|
{
|
|
public class MobileI18nService : II18nService
|
|
{
|
|
private const string ResourceId = "Bit.App.Resources.AppResources";
|
|
|
|
private static readonly Lazy<ResourceManager> _resourceManager = new Lazy<ResourceManager>(() =>
|
|
new ResourceManager(ResourceId, IntrospectionExtensions.GetTypeInfo(typeof(MobileI18nService)).Assembly));
|
|
|
|
private readonly CultureInfo _defaultCulture = new CultureInfo("en-US");
|
|
private bool _inited;
|
|
private StringComparer _stringComparer;
|
|
private Dictionary<string, string> _localeNames;
|
|
|
|
public MobileI18nService(CultureInfo systemCulture)
|
|
{
|
|
Culture = systemCulture;
|
|
}
|
|
|
|
public CultureInfo Culture { get; set; }
|
|
public StringComparer StringComparer
|
|
{
|
|
get
|
|
{
|
|
if (_stringComparer == null)
|
|
{
|
|
_stringComparer = StringComparer.Create(Culture, false);
|
|
}
|
|
return _stringComparer;
|
|
}
|
|
}
|
|
public Dictionary<string, string> LocaleNames
|
|
{
|
|
get
|
|
{
|
|
if (_localeNames == null)
|
|
{
|
|
_localeNames = new Dictionary<string, string>
|
|
{
|
|
["af"] = "Afrikaans",
|
|
["be"] = "Беларуская",
|
|
["bg"] = "български",
|
|
["ca"] = "català",
|
|
["cs"] = "čeština",
|
|
["da"] = "dansk",
|
|
["de"] = "Deutsch",
|
|
["el"] = "Ελληνικά",
|
|
["en"] = "English",
|
|
["en-GB"] = "English (British)",
|
|
["eo"] = "Esperanto",
|
|
["es"] = "español",
|
|
["et"] = "eesti",
|
|
["fa"] = "فارسی",
|
|
["fi"] = "suomi",
|
|
["fr"] = "français",
|
|
["he"] = "עברית",
|
|
["hi"] = "हिन्दी",
|
|
["hr"] = "hrvatski",
|
|
["hu"] = "magyar",
|
|
["id"] = "Bahasa Indonesia",
|
|
["it"] = "italiano",
|
|
["ja"] = "日本語",
|
|
["ko"] = "한국어",
|
|
["lv"] = "Latvietis",
|
|
["ml"] = "മലയാളം",
|
|
["nb"] = "norsk (bokmål)",
|
|
["nl"] = "Nederlands",
|
|
["pl"] = "polski",
|
|
["pt-BR"] = "português do Brasil",
|
|
["pt-PT"] = "português",
|
|
["ro"] = "română",
|
|
["ru"] = "русский",
|
|
["sk"] = "slovenčina",
|
|
["sv"] = "svenska",
|
|
["th"] = "ไทย",
|
|
["tr"] = "Türkçe",
|
|
["uk"] = "українська",
|
|
["vi"] = "Tiếng Việt",
|
|
["zh-CN"] = "中文(中国大陆)",
|
|
["zh-TW"] = "中文(台灣)"
|
|
};
|
|
}
|
|
return _localeNames;
|
|
}
|
|
}
|
|
|
|
public void Init(CultureInfo culture = null)
|
|
{
|
|
if (_inited)
|
|
{
|
|
throw new Exception("I18n already inited.");
|
|
}
|
|
_inited = true;
|
|
if (culture != null)
|
|
{
|
|
Culture = culture;
|
|
}
|
|
AppResources.Culture = Culture;
|
|
Thread.CurrentThread.CurrentCulture = Culture;
|
|
Thread.CurrentThread.CurrentUICulture = Culture;
|
|
}
|
|
|
|
public string T(string id, string p1 = null, string p2 = null, string p3 = null)
|
|
{
|
|
return Translate(id, p1, p2, p3);
|
|
}
|
|
|
|
public string Translate(string id, string p1 = null, string p2 = null, string p3 = null)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(id))
|
|
{
|
|
return string.Empty;
|
|
}
|
|
var result = _resourceManager.Value.GetString(id, Culture);
|
|
if (result == null)
|
|
{
|
|
result = _resourceManager.Value.GetString(id, _defaultCulture);
|
|
if (result == null)
|
|
{
|
|
result = $"{{{id}}}";
|
|
}
|
|
}
|
|
if (p1 == null && p2 == null && p3 == null)
|
|
{
|
|
return result;
|
|
}
|
|
else if (p2 == null && p3 == null)
|
|
{
|
|
return string.Format(result, p1);
|
|
}
|
|
else if (p3 == null)
|
|
{
|
|
return string.Format(result, p1, p2);
|
|
}
|
|
return string.Format(result, p1, p2, p3);
|
|
}
|
|
}
|
|
}
|