Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[TEST] Translate Again #29

Merged
merged 6 commits into from
Sep 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
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 @@ -11,4 +11,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
Loading