Skip to content

Commit

Permalink
[TEST] Translate Again (#29)
Browse files Browse the repository at this point in the history
* [Feature] RU Locale

* Culture

* Ебала спавн, теперь не ебёт и работает.

* feat: fetch locale from cvars

* feat: allow cyrillic symbols in character name

* fix: random translation fix

---------

Co-authored-by: PuroSlavKing <[email protected]>
Co-authored-by: Remuchi <[email protected]>
  • Loading branch information
3 people authored Sep 1, 2024
1 parent eae3e14 commit 86ccb49
Show file tree
Hide file tree
Showing 1,834 changed files with 37,091 additions and 6 deletions.
1 change: 1 addition & 0 deletions Content.Server/GameTicking/GameTicker.Spawning.cs
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,7 @@ private void SpawnPlayer(ICommonSession player, HumanoidCharacterProfile charact
Loc.GetString(
"latejoin-arrival-announcement",
("character", MetaData(mob).EntityName),
("gender", character.Gender), // WD-EDIT
("job", CultureInfo.CurrentCulture.TextInfo.ToTitleCase(jobName))
), Loc.GetString("latejoin-arrival-sender"),
playDefaultSound: false);
Expand Down
33 changes: 28 additions & 5 deletions Content.Shared/Localizations/ContentLocalizationManager.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
using System.Globalization;
using System.Linq;
using System.Text.RegularExpressions;
using Robust.Shared.Utility;
using Content.Shared._White;
using Robust.Shared.Configuration;

namespace Content.Shared.Localizations
{
Expand All @@ -10,7 +11,9 @@ public sealed class ContentLocalizationManager
[Dependency] private readonly ILocalizationManager _loc = default!;

// If you want to change your codebase's language, do it here.
private const string Culture = "en-US";

// WD-EDIT
private const string FallbackCulture = "en-US";

/// <summary>
/// Custom format strings used for parsing and displaying minutes:seconds timespans.
Expand All @@ -23,11 +26,22 @@ public sealed class ContentLocalizationManager
@"mm"
};

// WD-EDIT
private string _culture = FallbackCulture;

public void Initialize()
{
var culture = new CultureInfo(Culture);
// White Dream
var cfgManager = IoCManager.Resolve<IConfigurationManager>();
_culture = cfgManager.GetCVar(WhiteCVars.ServerCulture);

var culture = new CultureInfo(_culture);
var fallbackCulture = new CultureInfo(FallbackCulture);

_loc.LoadCulture(culture);
_loc.LoadCulture(fallbackCulture);
_loc.SetFallbackCluture(fallbackCulture);

_loc.AddFunction(culture, "PRESSURE", FormatPressure);
_loc.AddFunction(culture, "POWERWATTS", FormatPowerWatts);
_loc.AddFunction(culture, "POWERJOULES", FormatPowerJoules);
Expand All @@ -37,6 +51,14 @@ public void Initialize()
_loc.AddFunction(culture, "NATURALFIXED", FormatNaturalFixed);
_loc.AddFunction(culture, "NATURALPERCENT", FormatNaturalPercent);

_loc.AddFunction(fallbackCulture, "PRESSURE", FormatPressure);
_loc.AddFunction(fallbackCulture, "POWERWATTS", FormatPowerWatts);
_loc.AddFunction(fallbackCulture, "POWERJOULES", FormatPowerJoules);
_loc.AddFunction(fallbackCulture, "UNITS", FormatUnits);
_loc.AddFunction(fallbackCulture, "TOSTRING", args => FormatToString(culture, args));
_loc.AddFunction(fallbackCulture, "LOC", FormatLoc);
_loc.AddFunction(fallbackCulture, "NATURALFIXED", FormatNaturalFixed);
_loc.AddFunction(fallbackCulture, "NATURALPERCENT", FormatNaturalPercent);

/*
* The following language functions are specific to the english localization. When working on your own
Expand All @@ -47,6 +69,7 @@ public void Initialize()

_loc.AddFunction(cultureEn, "MAKEPLURAL", FormatMakePlural);
_loc.AddFunction(cultureEn, "MANY", FormatMany);
// White Dream End
}

private ILocValue FormatMany(LocArgs args)
Expand All @@ -67,7 +90,7 @@ private ILocValue FormatNaturalPercent(LocArgs args)
{
var number = ((LocValueNumber) args.Args[0]).Value * 100;
var maxDecimals = (int)Math.Floor(((LocValueNumber) args.Args[1]).Value);
var formatter = (NumberFormatInfo)NumberFormatInfo.GetInstance(CultureInfo.GetCultureInfo(Culture)).Clone();
var formatter = (NumberFormatInfo)NumberFormatInfo.GetInstance(CultureInfo.GetCultureInfo(_culture)).Clone();
formatter.NumberDecimalDigits = maxDecimals;
return new LocValueString(string.Format(formatter, "{0:N}", number).TrimEnd('0').TrimEnd('.') + "%");
}
Expand All @@ -76,7 +99,7 @@ private ILocValue FormatNaturalFixed(LocArgs args)
{
var number = ((LocValueNumber) args.Args[0]).Value;
var maxDecimals = (int)Math.Floor(((LocValueNumber) args.Args[1]).Value);
var formatter = (NumberFormatInfo)NumberFormatInfo.GetInstance(CultureInfo.GetCultureInfo(Culture)).Clone();
var formatter = (NumberFormatInfo)NumberFormatInfo.GetInstance(CultureInfo.GetCultureInfo(_culture)).Clone();
formatter.NumberDecimalDigits = maxDecimals;
return new LocValueString(string.Format(formatter, "{0:N}", number).TrimEnd('0').TrimEnd('.'));
}
Expand Down
4 changes: 3 additions & 1 deletion Content.Shared/Preferences/HumanoidCharacterProfile.cs
Original file line number Diff line number Diff line change
Expand Up @@ -495,7 +495,8 @@ public void EnsureValid(ICommonSession session, IDependencyCollection collection

if (configManager.GetCVar(CCVars.RestrictedNames))
{
name = Regex.Replace(name, @"[^\u0030-\u0039,\u0041-\u005A,\u0061-\u007A,\u00C0-\u00D6,\u00D8-\u00F6,\u00F8-\u00FF,\u0100-\u017F, '.,-]", string.Empty);
// White Dream: Added Cyrillic support
name = Regex.Replace(name, @"[^\u0030-\u0039,\u0041-\u005A,\u0061-\u007A,\u00C0-\u00D6,\u00D8-\u00F6,\u00F8-\u00FF,\u0100-\u017F,\u0410-\u044F, '.,-]", string.Empty);
/*
* 0030-0039 Basic Latin: ASCII Digits
* 0041-005A Basic Latin: Uppercase Latin Alphabet
Expand All @@ -504,6 +505,7 @@ public void EnsureValid(ICommonSession session, IDependencyCollection collection
* 00D8-00F6 Latin-1 Supplement: Letters II
* 00F8-00FF Latin-1 Supplement: Letters III
* 0100-017F Latin Extended A: European Latin
* 0410-044F Cyrillic Alphabet
*/
}

Expand Down
7 changes: 7 additions & 0 deletions Content.Shared/_White/CVars.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,11 @@ public sealed class WhiteCVars
CVarDef.Create("white.hold_look_up", false, CVar.CLIENT | CVar.ARCHIVE);

#endregion

#region Locale

public static readonly CVarDef<string>
ServerCulture = CVarDef.Create("white.culture", "ru-RU", CVar.REPLICATED | CVar.SERVER);

#endregion
}
1 change: 1 addition & 0 deletions Resources/Locale/ru-RU/GPS/handheld-gps.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
handheld-gps-coordinates-title = Координаты: { $coordinates }
9 changes: 9 additions & 0 deletions Resources/Locale/ru-RU/HUD/game-hud.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
game-hud-open-escape-menu-button-tooltip = Открыть меню паузы.
game-hud-open-guide-menu-button-tooltip = Открыть руководство.
game-hud-open-character-menu-button-tooltip = Открыть меню персонажа.
game-hud-open-emotions-menu-button-tooltip = Открыть меню эмоций.
game-hud-open-inventory-menu-button-tooltip = Открыть меню инвентаря.
game-hud-open-crafting-menu-button-tooltip = Открыть меню создания.
game-hud-open-actions-menu-button-tooltip = Открыть меню действий.
game-hud-open-admin-menu-button-tooltip = Открыть меню администратора.
game-hud-open-sandbox-menu-button-tooltip = Открыть меню песочницы.
6 changes: 6 additions & 0 deletions Resources/Locale/ru-RU/Languages/commands.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
command-list-langs-desc = Список языков, на которых существо умеет говорить.
command-list-langs-help = Использование: {$command}
command-saylang-desc = Отправьте сообщение на определенном языке.
command-saylang-help = Использование: {$command} <language id> <message>. Пример: {$command} GalacticCommon "Hello World!"
command-language-select-desc = Выберите язык, на котором в данный момент говорит ваш объект.
command-language-select-help = Использование: {$command} <language id>. Пример: {$command} GalacticCommon
4 changes: 4 additions & 0 deletions Resources/Locale/ru-RU/Languages/language-menu.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
language-menu-window-title = Меню языков
language-menu-current-language = Язык: {$language}
language-menu-description-header = Описание
ui-options-function-open-language-menu = Открыть меню языков
71 changes: 71 additions & 0 deletions Resources/Locale/ru-RU/Languages/languages.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
language-Universal-name = Универсальный
language-Universal-description = Что ты такое?
language-GalacticCommon-name = Общегалактический
language-GalacticCommon-description = Стандартный галактический язык, часто используемый для межвидового общения и юридической работы.
language-Bubblish-name = Пузырчатый
language-Bubblish-description = Язык слаймов. Поскольку он представляет собой смесь булькающих звуков и хлопков, людям очень трудно говорить на нем без использования механических приспособлений.
language-RootSpeak-name = Песнь корней
language-RootSpeak-description = Скрипучий субголосый язык, на котором инстинктивно говорят дионы. Из-за уникального состава средней дионы фразы песни корней могут представлять собой комбинацию от одного до двенадцати отдельных голосов и нот.
language-Nekomimetic-name = Мурчащий
language-Nekomimetic-description = Язык таяран и фелинидов. По большей части, для общения на нем используется хвост.
language-Draconic-name = Драконий
language-Draconic-description = Общий язык ящеров, состоящий из щипящих звуков и стрекотаний.
language-SolCommon-name = Общесолнечный
language-SolCommon-description = Язык, общий для видов из Солнечной системы.
language-Canilunzt-name = Гортанный
language-Canilunzt-description = Гортанный язык, состоящий из рычания, лая, тявканья и интенсивного использования движений ушами и хвостом. Различные антропоморфы легко говорят на этом языке.
language-Moffic-name = Жужжащий
language-Moffic-description = Язык жуков и мотыльков, граничит с полной неразборчивостью.
language-RobotTalk-name = Бинарный
language-RobotTalk-description = Бип-Буп.
language-Cat-name = Кошачий
language-Cat-description = МИАУ!
language-Dog-name = Собачий
language-Dog-description = Гаф!
language-Fox-name = Лисий
language-Fox-description = Йифф!
language-Xeno-name = Ксеноморф
language-Xeno-description = Хисссс!
language-Monkey-name = Примитивный
language-Monkey-description = Бананы!
language-Mouse-name = Мышиный
language-Mouse-description = Сквик!
language-Chicken-name = Куриный
language-Chicken-description = Кудах!
language-Duck-name = Утиный
language-Duck-description = Ква!
language-Cow-name = Коровьий
language-Cow-description = Мууу!
language-Sheep-name = Бараньий
language-Sheep-description = Бееее!
language-Kangaroo-name = Кенгуру
language-Kangaroo-description = Кия!
language-Pig-name = Свининный
language-Pig-description = Хрю!
language-Crab-name = Крабьий
language-Crab-description = Чоп-чоп!
language-Kobold-name = Кобольдовый
language-Kobold-description = Хс!
2 changes: 2 additions & 0 deletions Resources/Locale/ru-RU/Languages/technologies.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
research-technology-basic-translation = Примитивный перевод
research-technology-advanced-translation = Продвинутый перевод
8 changes: 8 additions & 0 deletions Resources/Locale/ru-RU/Languages/translator.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
translator-component-shutoff = {$translator} выключается.
translator-component-turnon = {$translator} включается.
translator-enabled = Похоже он активен.
translator-disabled = Похоже он отключен.
translator-implanter-refuse = {$implanter} не даёт никакого эффекта на {$target}.
translator-implanter-success = {$implanter} успешно введён в {$target}.
translator-implanter-ready = Этот имплантант, по-видимому, готов к использованию.
translator-implanter-used = Имплант выглядит пустым.
71 changes: 71 additions & 0 deletions Resources/Locale/ru-RU/White/accessories/human-hair.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
marking-HumanHairAfricanPigtails = Хвостики (Африканские)
marking-HumanHairAfropuffdouble = Aфро-пуф, Двойной
marking-HumanHairAfropuffleft = Aфро-пуф, Левый
marking-HumanHairAfropuffright = Aфро-пуф, Правый
marking-HumanHairAmazon = Амазон
marking-HumanHairAstolfo = Астольфо
marking-HumanHairBaum = Баум
marking-HumanHairBeachwave = Бич-вейв
marking-HumanHairBluntbangs = Прямая челка
marking-HumanHairBluntbangsAlt = Прямая челка (Альт.)
marking-HumanHairBobcutAlt = Каре (Альт.)
marking-HumanHairBunhead4 = Пучок 4
marking-HumanHairCombed = Зачёс
marking-HumanHairCombedbob = Зачёс (Боб)
marking-HumanHairCotton = Хлопок
marking-HumanHairCurly = Кудрявая
marking-HumanHairDave = Дэйв
marking-HumanHairDiagonalBangs = Диагональная чёлка
marking-HumanHairEmolong = Эмо (Длинная)
marking-HumanHairEmoshort = Эмо (Короткая)
marking-HumanHairFingerwave = Фингервейв
marking-HumanHairFluffyShort = Пушистая короткая
marking-HumanHairFortuneteller = Гадалка
marking-HumanHairFortunetellerAlt = Гадалка (Альт.)
marking-HumanHairFroofylong = Фруфи (Длинная)
marking-HumanHairGeisha = Гейша
marking-HumanHairGentle21 = Аккуратно расчесанная
marking-HumanHairGlammetal = Глэм-металл
marking-HumanHairGloomyLong = Длинная мрачная чёлка
marking-HumanHairGloomyMedium = Средняя мрачная чёлка
marking-HumanHairGrande = Гранде
marking-HumanHairHalfshave = Наполовину выбритая 2
marking-HumanHairHalfshaveglamorous = Наполовину выбритая (Гламурная)
marking-HumanHairHalfshaveLong = Наполовину выбритая (Длинная)
marking-HumanHairHalfshaveMessy = Наполовину выбритая (Растрёпанная)
marking-HumanHairHalfshaveMessyLong = Наполовину выбритая (Длинная растрёпанная)
marking-HumanHairHalfshaveSnout = Наполовину выбритая 2 (Обрезанная)
marking-HumanHairHightight = Хай-тайт
marking-HumanHairHyenamane = Грива гиены
marking-HumanHairJessica = Джессика
marking-HumanHairLong4 = Длинная 4
marking-HumanHairLongdtails = Длинные хвосты
marking-HumanHairLongerAlt = Длинная (Альт.)
marking-HumanHairLongovereyeAlt = Длинная (Через глаз альт.)
marking-HumanHairLongsidepartstraight = Длинная сайд-парт прямая
marking-HumanHairLooseSlicked = Зализанная свободная
marking-HumanHairMediumbraid = Плетение (Среднее)
marking-HumanHairNewyou = Новый ты
marking-HumanHairPonytailAlt = Хвостик (Альт.)
marking-HumanHairPonytailF = Хвостик (Женственный)
marking-HumanHairPoofy2 = Пышная 2
marking-HumanHairQuadcurls = Завитки (Квадро)
marking-HumanHairSabitsuki = Сабицуки
marking-HumanHairScully = Скалли
marking-HumanHairShorthair4 = Короткая 4
marking-HumanHairShy = Скромная
marking-HumanHairSimplePonytail = Хвостик (Простой)
marking-HumanHairSleaze = Дешёвая
marking-HumanHairSlightlyMessy = Слегка растрёпанная
marking-HumanHairSlimedroplet = Слайм (Капля)
marking-HumanHairSlimedropletAlt = Слайм (Капля альт.)
marking-HumanHairSlimespikes = Слайм (Шипы)
marking-HumanHairSlimetendrils = Слайм (Струйки)
marking-HumanHairSlimetendrilsAlt = Слайм (Струйки альт.)
marking-HumanHairSpicy = Спайси
marking-HumanHairTwintailFloor = Два хвостика (До пола)
marking-HumanHairVeryshortovereye = Очень короткая (Через глаз)
marking-HumanHairVictory = Победа
marking-HumanHairViper = Гадюка
marking-HumanHairWife = Жена
marking-HumanHairZiegler = Циглер
6 changes: 6 additions & 0 deletions Resources/Locale/ru-RU/White/accessories/skrell_hair.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
marking-SkrellHairMale = Обычные ки'рэи
marking-SkrellHairFemale = Удлинённые ки'рэи
marking-SkrellHairLong = Длинные ки'рэи
marking-SkrellHairShort = Короткие ки'рэи
marking-SkrellHairVeryLong = Вытянутые ки'рэи
marking-SkrellHairVeryShort = Укороченные ки'рэи
13 changes: 13 additions & 0 deletions Resources/Locale/ru-RU/White/accessories/sponsor.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
marking-SponsorPulsingPurple = Пульсация (Фиолетовый)
ent-ClothingOuterSuitGlamorous = гламурный костюм
.desc = Гламурный розовый костюм на случай показа мод. На скафандре подписан владелец: Алина Бэккен
.suffix = { "Fluff" }
ent-Sledgebar = мьёльнир
.desc = Отлично ломает кости ассистентам и клоуну.
.suffix = { "Fluff" }
ent-BibleNya = няко-библия
.desc = книга является заметками кошко богини. Её потомки используют эту книгу как Библию.
.suffix = { "Fluff" }
marking-TajaranTailCommisar = Кошачий хвост
marking-TajaranTailCommisar-tajaran-tail = Кошачий хвост
2 changes: 2 additions & 0 deletions Resources/Locale/ru-RU/White/actions/thermal-vision.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ent-ToggleThermalVision = Переключить термальное зрение
.desc = Переключает термальное зрение
23 changes: 23 additions & 0 deletions Resources/Locale/ru-RU/White/auth-panel.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
ent-AuthPanel = Панель авторизации
.desc = Если что-то пойдёт не так...
ert-description = Вы - член Отряда Быстрого Реагирования Нанотразен.
Вам поручено попасть на станцию и вернуть её в рабочее состояние. Мы не можем сказать, с какими угрозами и проблемами вы там столкнетесь.
Удачи, она вам понадобится. Вы подчиняетесь непосредственно только ЦК. Особое распоряжение может это изменить.
ert-reason = Причина вызова: { $reason }
auth-panel-no-reason = Пожалуйста, заполните причину
auth-panel-no-access = Нет доступа
auth-panel-wait = Пожалуйста, подождите прежде чем активировать кнопку
auth-panel-used-ID = Похоже, вы уже использовали данную ID карту
auth-panel-pressed = Вы уже нажали на эту кнопку
auth-panel-attention = Внимание!
auth-panel-critical-only = Используйте эту панель ТОЛЬКО в крайнем случае!
auth-panel-reason-write = Снизу опишите причину вызова.
auth-panel-reason = Причина:
auth-panel-red-button = Красная кнопка
auth-panel-access-button = Аварийный доступ к техническим тоннелям
auth-panel-unlock-weapon = Разблокировка блюспейс артилерии
Loading

0 comments on commit 86ccb49

Please sign in to comment.