diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 0da6c47..e84ab1b 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -23,6 +23,11 @@ jobs: - name: Build project # This would actually build your project, using zip for an example artifact id: build run: | + sudo python3 -m pip install virtualenv + virtualenv venv + . venv/bin/activate + python3 -m pip install Babel + pybabel compile -D racetime-obs -d src/locales -f cp requirements.txt src/ sed -i s/xxVERSIONxx/${GITHUB_REF/refs\/tags\//}/ src/racetime_obs.py mv src racetime-obs diff --git a/src/clients/racetime_client.py b/src/clients/racetime_client.py index 5d29bda..79599f7 100644 --- a/src/clients/racetime_client.py +++ b/src/clients/racetime_client.py @@ -1,5 +1,6 @@ from typing import Any import requests +import gettext from models.category import category_from_dict from models.category_past_races import category_past_races_from_dict @@ -10,11 +11,18 @@ from models.user_search import user_search_from_dict +def script_path(): + pass + + def script_description(): - return ( + localedir = script_path() + "locales" + lang = gettext.translation("racetime-obs", localedir=localedir) + _ = lang.gettext + return (_( "

You've loaded the incorrect script.

Please remove this file" "and add 'racetime_obs.py' instead

" - ) + )) base_url = "https://racetime.gg/" diff --git a/src/locales/de/LC_MESSAGES/racetime-obs.po b/src/locales/de/LC_MESSAGES/racetime-obs.po new file mode 100644 index 0000000..687310c --- /dev/null +++ b/src/locales/de/LC_MESSAGES/racetime-obs.po @@ -0,0 +1,354 @@ +# German translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-12-29 07:01-0500\n" +"PO-Revision-Date: 2020-12-28 15:51-0500\n" +"Last-Translator: FULL NAME \n" +"Language: de\n" +"Language-Team: de \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.9.0\n" + +#: src/racetime_client.py:22 src/rtgg_obs.py:24 +msgid "" +"

You've loaded the incorrect script.

Please remove this fileand " +"add 'racetime_obs.py' instead

" +msgstr "" +"

Sie haben das falsche Skript geladen.

Bitte entfernen Sie " +"diese Datei und fügen Sie stattdessen 'racetime_obs.py' hinzu " + +#: src/racetime_obs.py:29 +msgid "" +"Select a text source to use as your timer and enter your full username on" +" racetime.gg (including discriminator). This only needs to be done once." +" Then select the race room each race you join and stop worrying about " +"whether you started your timer or not." +msgstr "" +"Wählen Sie eine Textquelle als Timer und geben Sie Ihren vollständigen " +"Benutzernamen unter racetime.gg (einschließlich Diskriminator). Dies muss " +"nur einmal durchgeführt werden. Wählen Sie dann bei jedem Rennen, an dem " +"Sie teilnehmen, den Rennraum aus und machen Sie sich keine Sorgen mehr. ob " +"Sie Ihren Timer gestartet haben oder nicht." + +#: src/racetime_obs.py:85 +msgid "Race info" +msgstr "Renninfo" + +#: src/racetime_obs.py:107 +msgid "Refresh" +msgstr "Aktualisierung" + +#: src/racetime_obs.py:161 +msgid "Race not found" +msgstr "Rennen nicht gefunden" + +#: src/scripting/__init__.py:33 +msgid "All" +msgstr "Alle" + +#: src/scripting/__init__.py:35 +msgid "Keiner" +msgstr "" + +#: src/scripting/coop_scripting.py:15 +msgid "Display coop information?" +msgstr "Koop-Informationen anzeigen?" + +#: src/scripting/coop_scripting.py:19 +msgid "Co-op Mode" +msgstr "Koop-Modus" + +#: src/scripting/coop_scripting.py:24 +msgid "Co-op Partner" +msgstr "Koop-Partner" + +#: src/scripting/coop_scripting.py:28 +msgid "Co-op Rival 1" +msgstr "Koop-Rivale 1" + +#: src/scripting/coop_scripting.py:32 +msgid "Co-op Rival 2" +msgstr "Koop-Rivale 2" + +#: src/scripting/coop_scripting.py:37 +msgid "Our Team's Timer" +msgstr "Der Timer unseres Teams" + +#: src/scripting/coop_scripting.py:41 +msgid "This text source will display your team's timer when you finish." +msgstr "Diese Textquelle zeigt den Timer Ihres Teams an, wenn Sie fertig sind." + +#: src/scripting/coop_scripting.py:48 +msgid "" +"This text source will be use to display your rival's timer when they " +"finish" +msgstr "" +"Diese Textquelle wird verwendet, um den Timer Ihres Rivalen anzuzeigen, " +"wenn er fertig ist" + +#: src/scripting/coop_scripting.py:53 +msgid "Winner Color:" +msgstr "Gewinner Farbe:" + +#: src/scripting/coop_scripting.py:55 +msgid "Loser Color:" +msgstr "Verlierer Farbe:" + +#: src/scripting/coop_scripting.py:57 +msgid "Winner Undetermined Color" +msgstr "Gewinner Unbestimmte Farbe" + +#: src/scripting/media_player_scripting.py:37 +msgid "Enable sounds?" +msgstr "Töne anschalten?" + +#: src/scripting/media_player_scripting.py:42 +msgid "Media Player Mode" +msgstr "Media Player-Modus" + +#: src/scripting/media_player_scripting.py:50 +#: src/scripting/media_trigger_scripting.py:37 +msgid "Monitoring Type" +msgstr "Überwachungstyp" + +#: src/scripting/media_player_scripting.py:53 +msgid "Listen Only" +msgstr "Nur zuhören" + +#: src/scripting/media_player_scripting.py:57 +msgid "Stream Only" +msgstr "Nur Stream" + +#: src/scripting/media_player_scripting.py:59 +#: src/scripting/media_trigger_scripting.py:44 +msgid "Listen and Stream" +msgstr "Hören und streamen" + +#: src/scripting/media_player_scripting.py:62 +msgid "Chat Pings" +msgstr "Chat-Pings" + +#: src/scripting/media_player_scripting.py:64 +msgid "" +"Enable this and set choose a sound file to play when a bot posts or when " +"someone @s you in racetime.gg chat" +msgstr "" +"Aktivieren Sie diese Option und wählen Sie eine Audiodatei aus, die " +"abgespielt werden soll, wenn ein Bot Beiträge veröffentlicht oder wenn " +"jemand Sie im racetime.gg-Chat @s" + +#: src/scripting/media_player_scripting.py:69 +msgid "Chat media file" +msgstr "Chat-Mediendatei" + +#: src/scripting/media_player_scripting.py:74 +msgid "First Place Sound" +msgstr "Erster Platz Sound" + +#: src/scripting/media_player_scripting.py:78 +msgid "Sound file to play when you finish first." +msgstr "Sounddatei, die abgespielt werden soll, wenn Sie fertig sind." + +#: src/scripting/media_trigger_scripting.py:16 +msgid "Media Trigger #" +msgstr "Medientrigger #" + +#: src/scripting/media_trigger_scripting.py:25 +msgid "Sound File" +msgstr "Audiodatei" + +#: src/scripting/media_trigger_scripting.py:29 +msgid "Type of Trigger" +msgstr "Art des Auslösers" + +#: src/scripting/media_trigger_scripting.py:32 +msgid "Chat" +msgstr "Chat" + +#: src/scripting/media_trigger_scripting.py:33 +msgid "Finish Place" +msgstr "Platz beenden" + +#: src/scripting/media_trigger_scripting.py:34 +msgid "Timer" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:40 +msgid "Only Listen" +msgstr "Nur zuhören" + +#: src/scripting/media_trigger_scripting.py:42 +msgid "Only Stream" +msgstr "Nur Stream" + +#: src/scripting/media_trigger_scripting.py:56 +msgid "Bot?" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:58 +msgid "Highlighted?" +msgstr "Hervorgehoben" + +#: src/scripting/media_trigger_scripting.py:60 +msgid "System?" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:72 +msgid "Finish Place <=" +msgstr "Platz beenden <=" + +#: src/scripting/media_trigger_scripting.py:75 +msgid "Num. Entrants >=" +msgstr "Num. Teilnehmer> =" + +#: src/scripting/media_trigger_scripting.py:85 +msgid "Start playing at " +msgstr "Anfangen bei" + +#: src/scripting/qualifier_scripting.py:16 +msgid "Display race results as tournament qualifier?" +msgstr "Rennergebnisse als Turnierqualifikation anzeigen?" + +#: src/scripting/qualifier_scripting.py:21 +msgid "Qualifier Mode" +msgstr "Qualifizierungsmodus" + +#: src/scripting/qualifier_scripting.py:30 +msgid "Use Top X as par time, where X=" +msgstr "Verwenden Sie Top X als Par-Zeit, wobei X =" + +#: src/scripting/qualifier_scripting.py:35 +msgid "Qualifier Par Time Source" +msgstr "Nach Zeitquelle qualifizieren" + +#: src/scripting/qualifier_scripting.py:43 +msgid "Qualifier Score Source" +msgstr "Qualifier Score Source" + +#: src/scripting/setup_scripting.py:25 +msgid "Initial setup - Check to make changes" +msgstr "Ersteinrichtung - Überprüfen Sie, ob Änderungen vorgenommen wurden" + +#: src/scripting/setup_scripting.py:29 +msgid "Text Source" +msgstr "Textquelle" + +#: src/scripting/setup_scripting.py:34 +msgid "Username" +msgstr "Nutzername" + +#: src/scripting/setup_scripting.py:36 +msgid "Enable logging" +msgstr "Aktiviere das Logging" + +#: src/scripting/setup_scripting.py:38 +msgid "Log level" +msgstr "Protokollstufe" + +#: src/scripting/setup_scripting.py:41 +msgid "Error" +msgstr "" + +#: src/scripting/setup_scripting.py:42 +msgid "Debug" +msgstr "Debuggen" + +#: src/scripting/setup_scripting.py:43 +msgid "Info" +msgstr "" + +#: src/scripting/setup_scripting.py:45 +msgid "" +"Generally, only log errors unless you are developing or are trying to " +"find a specific problem." +msgstr "" +"Im Allgemeinen werden nur Fehler protokolliert, es sei denn, Sie entwickeln " +"oder versuchen, ein bestimmtes Problem zu finden." + +#: src/scripting/setup_scripting.py:49 +msgid "Log to file?" +msgstr "In Datei anmelden?" + +#: src/scripting/setup_scripting.py:51 +msgid "Log File" +msgstr "Logdatei" + +#: src/scripting/setup_scripting.py:55 +msgid "Filter by Category" +msgstr "Nach Kategorie filtern" + +#: src/scripting/setup_scripting.py:59 +msgid "Race" +msgstr "Rennen" + +#: src/scripting/setup_scripting.py:69 +msgid "Race Desc" +msgstr "Rennbeschreibung" + +#: src/scripting/timer_scripting.py:33 +msgid "Use custom color for podium finishes?" +msgstr "Benutzerdefinierte Farbe für Podestplätze verwenden?" + +#: src/scripting/timer_scripting.py:37 +msgid "Podium Colors" +msgstr "Podiumsfarben" + +#: src/scripting/timer_scripting.py:42 +msgid "Pre-race:" +msgstr "Vor dem Rennen:" + +#: src/scripting/timer_scripting.py:44 +msgid "Still racing:" +msgstr "Noch Rennen:" + +#: src/scripting/timer_scripting.py:45 +msgid "1st place:" +msgstr "Platz 1:" + +#: src/scripting/timer_scripting.py:46 +msgid "2nd place:" +msgstr "Platz 2:" + +#: src/scripting/timer_scripting.py:47 +msgid "3rd place:" +msgstr "Platz 3:" + +#: src/scripting/timer_scripting.py:49 +msgid "After podium:" +msgstr "Nach dem Podium:" + +#~ msgid "" +#~ "Select a text source to use as " +#~ "your timer and enter yourfull username" +#~ " on racetime.gg (including discriminator). " +#~ "This only needs to be done once." +#~ "\n" +#~ "\n" +#~ "Then select the race room each " +#~ "race you join and stop worrying " +#~ "about whether you started your timer " +#~ "or not." +#~ msgstr "" + +#~ msgid "" +#~ "Select a text source to use as " +#~ "your timer and enter your full " +#~ "username on racetime.gg (including " +#~ "discriminator). This only needs to be" +#~ " done once.\n" +#~ "\n" +#~ "Then select the race room each " +#~ "race you join and stop worrying " +#~ "about whether you started your timer " +#~ "or not." +#~ msgstr "" + diff --git a/src/locales/en/LC_MESSAGES/racetime-obs.po b/src/locales/en/LC_MESSAGES/racetime-obs.po new file mode 100644 index 0000000..49c3ec0 --- /dev/null +++ b/src/locales/en/LC_MESSAGES/racetime-obs.po @@ -0,0 +1,340 @@ +# English translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-12-29 07:01-0500\n" +"PO-Revision-Date: 2020-12-28 15:50-0500\n" +"Last-Translator: FULL NAME \n" +"Language: en\n" +"Language-Team: en \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.9.0\n" + +#: src/racetime_client.py:22 src/rtgg_obs.py:24 +msgid "" +"

You've loaded the incorrect script.

Please remove this fileand " +"add 'racetime_obs.py' instead

" +msgstr "" + +#: src/racetime_obs.py:29 +msgid "" +"Select a text source to use as your timer and enter your full username on" +" racetime.gg (including discriminator). This only needs to be done once." +" Then select the race room each race you join and stop worrying about " +"whether you started your timer or not." +msgstr "" + +#: src/racetime_obs.py:85 +msgid "Race info" +msgstr "" + +#: src/racetime_obs.py:107 +msgid "Refresh" +msgstr "" + +#: src/racetime_obs.py:161 +msgid "Race not found" +msgstr "" + +#: src/scripting/__init__.py:33 +msgid "All" +msgstr "" + +#: src/scripting/__init__.py:35 +msgid "None" +msgstr "" + +#: src/scripting/coop_scripting.py:15 +msgid "Display coop information?" +msgstr "" + +#: src/scripting/coop_scripting.py:19 +msgid "Co-op Mode" +msgstr "" + +#: src/scripting/coop_scripting.py:24 +msgid "Co-op Partner" +msgstr "" + +#: src/scripting/coop_scripting.py:28 +msgid "Co-op Rival 1" +msgstr "" + +#: src/scripting/coop_scripting.py:32 +msgid "Co-op Rival 2" +msgstr "" + +#: src/scripting/coop_scripting.py:37 +msgid "Our Team's Timer" +msgstr "" + +#: src/scripting/coop_scripting.py:41 +msgid "This text source will display your team's timer when you finish." +msgstr "" + +#: src/scripting/coop_scripting.py:48 +msgid "" +"This text source will be use to display your rival's timer when they " +"finish" +msgstr "" + +#: src/scripting/coop_scripting.py:53 +msgid "Winner Color:" +msgstr "" + +#: src/scripting/coop_scripting.py:55 +msgid "Loser Color:" +msgstr "" + +#: src/scripting/coop_scripting.py:57 +msgid "Winner Undetermined Color" +msgstr "" + +#: src/scripting/media_player_scripting.py:37 +msgid "Enable sounds?" +msgstr "" + +#: src/scripting/media_player_scripting.py:42 +msgid "Media Player Mode" +msgstr "" + +#: src/scripting/media_player_scripting.py:50 +#: src/scripting/media_trigger_scripting.py:37 +msgid "Monitoring Type" +msgstr "" + +#: src/scripting/media_player_scripting.py:53 +msgid "Listen Only" +msgstr "" + +#: src/scripting/media_player_scripting.py:57 +msgid "Stream Only" +msgstr "" + +#: src/scripting/media_player_scripting.py:59 +#: src/scripting/media_trigger_scripting.py:44 +msgid "Listen and Stream" +msgstr "" + +#: src/scripting/media_player_scripting.py:62 +msgid "Chat Pings" +msgstr "" + +#: src/scripting/media_player_scripting.py:64 +msgid "" +"Enable this and set choose a sound file to play when a bot posts or when " +"someone @s you in racetime.gg chat" +msgstr "" + +#: src/scripting/media_player_scripting.py:69 +msgid "Chat media file" +msgstr "" + +#: src/scripting/media_player_scripting.py:74 +msgid "First Place Sound" +msgstr "" + +#: src/scripting/media_player_scripting.py:78 +msgid "Sound file to play when you finish first." +msgstr "" + +#: src/scripting/media_trigger_scripting.py:16 +msgid "Media Trigger #" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:25 +msgid "Sound File" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:29 +msgid "Type of Trigger" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:32 +msgid "Chat" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:33 +msgid "Finish Place" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:34 +msgid "Timer" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:40 +msgid "Only Listen" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:42 +msgid "Only Stream" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:56 +msgid "Bot?" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:58 +msgid "Highlighted?" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:60 +msgid "System?" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:72 +msgid "Finish Place <=" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:75 +msgid "Num. Entrants >=" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:85 +msgid "Start playing at " +msgstr "" + +#: src/scripting/qualifier_scripting.py:16 +msgid "Display race results as tournament qualifier?" +msgstr "" + +#: src/scripting/qualifier_scripting.py:21 +msgid "Qualifier Mode" +msgstr "" + +#: src/scripting/qualifier_scripting.py:30 +msgid "Use Top X as par time, where X=" +msgstr "" + +#: src/scripting/qualifier_scripting.py:35 +msgid "Qualifier Par Time Source" +msgstr "" + +#: src/scripting/qualifier_scripting.py:43 +msgid "Qualifier Score Source" +msgstr "" + +#: src/scripting/setup_scripting.py:25 +msgid "Initial setup - Check to make changes" +msgstr "" + +#: src/scripting/setup_scripting.py:29 +msgid "Text Source" +msgstr "" + +#: src/scripting/setup_scripting.py:34 +msgid "Username" +msgstr "" + +#: src/scripting/setup_scripting.py:36 +msgid "Enable logging" +msgstr "" + +#: src/scripting/setup_scripting.py:38 +msgid "Log level" +msgstr "" + +#: src/scripting/setup_scripting.py:41 +msgid "Error" +msgstr "" + +#: src/scripting/setup_scripting.py:42 +msgid "Debug" +msgstr "" + +#: src/scripting/setup_scripting.py:43 +msgid "Info" +msgstr "" + +#: src/scripting/setup_scripting.py:45 +msgid "" +"Generally, only log errors unless you are developing or are trying to " +"find a specific problem." +msgstr "" + +#: src/scripting/setup_scripting.py:49 +msgid "Log to file?" +msgstr "" + +#: src/scripting/setup_scripting.py:51 +msgid "Log File" +msgstr "" + +#: src/scripting/setup_scripting.py:55 +msgid "Filter by Category" +msgstr "" + +#: src/scripting/setup_scripting.py:59 +msgid "Race" +msgstr "" + +#: src/scripting/setup_scripting.py:69 +msgid "Race Desc" +msgstr "" + +#: src/scripting/timer_scripting.py:33 +msgid "Use custom color for podium finishes?" +msgstr "" + +#: src/scripting/timer_scripting.py:37 +msgid "Podium Colors" +msgstr "" + +#: src/scripting/timer_scripting.py:42 +msgid "Pre-race:" +msgstr "" + +#: src/scripting/timer_scripting.py:44 +msgid "Still racing:" +msgstr "" + +#: src/scripting/timer_scripting.py:45 +msgid "1st place:" +msgstr "" + +#: src/scripting/timer_scripting.py:46 +msgid "2nd place:" +msgstr "" + +#: src/scripting/timer_scripting.py:47 +msgid "3rd place:" +msgstr "" + +#: src/scripting/timer_scripting.py:49 +msgid "After podium:" +msgstr "" + +#~ msgid "" +#~ "Select a text source to use as " +#~ "your timer and enter yourfull username" +#~ " on racetime.gg (including discriminator). " +#~ "This only needs to be done once." +#~ "\n" +#~ "\n" +#~ "Then select the race room each " +#~ "race you join and stop worrying " +#~ "about whether you started your timer " +#~ "or not." +#~ msgstr "" + +#~ msgid "" +#~ "Select a text source to use as " +#~ "your timer and enter your full " +#~ "username on racetime.gg (including " +#~ "discriminator). This only needs to be" +#~ " done once.\n" +#~ "\n" +#~ "Then select the race room each " +#~ "race you join and stop worrying " +#~ "about whether you started your timer " +#~ "or not." +#~ msgstr "" + diff --git a/src/locales/es/LC_MESSAGES/racetime-obs.po b/src/locales/es/LC_MESSAGES/racetime-obs.po new file mode 100644 index 0000000..d39b639 --- /dev/null +++ b/src/locales/es/LC_MESSAGES/racetime-obs.po @@ -0,0 +1,328 @@ +# Spanish translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-12-29 07:01-0500\n" +"PO-Revision-Date: 2020-12-28 16:01-0500\n" +"Last-Translator: FULL NAME \n" +"Language: es\n" +"Language-Team: es \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.9.0\n" + +#: src/racetime_client.py:22 src/rtgg_obs.py:24 +msgid "" +"

You've loaded the incorrect script.

Please remove this fileand " +"add 'racetime_obs.py' instead

" +msgstr "" +"

Cargó la secuencia de comandos incorrecta.

Elimine este " +"archivo y agregue 'racetime_obs.py' en su lugar

" + +#: src/racetime_obs.py:29 +#, fuzzy +msgid "" +"Select a text source to use as your timer and enter your full username on" +" racetime.gg (including discriminator). This only needs to be done once." +" Then select the race room each race you join and stop worrying about " +"whether you started your timer or not." +msgstr "" +"Seleccione una fuente de texto para usar como su temporizador e ingrese " +"su nombre de usuario completo enracetime.gg (incluido el discriminador). " +"Esto solo debe hacerse una vez." +"Luego, selecciona la sala de carreras en cada carrera a la que te unes y " +"deja de preocuparteya sea que haya iniciado el temporizador o no." + +#: src/racetime_obs.py:85 +msgid "Race info" +msgstr "Info de carrera" + +#: src/racetime_obs.py:107 +msgid "Refresh" +msgstr "Actualizar" + +#: src/racetime_obs.py:161 +msgid "Race not found" +msgstr "Carrera no encontrada" + +#: src/scripting/__init__.py:33 +msgid "All" +msgstr "Todos" + +#: src/scripting/__init__.py:35 +msgid "None" +msgstr "Ninguna" + +#: src/scripting/coop_scripting.py:15 +msgid "Display coop information?" +msgstr "¿Mostrar información de la cooperativa?" + +#: src/scripting/coop_scripting.py:19 +msgid "Co-op Mode" +msgstr "Modo cooperativo" + +#: src/scripting/coop_scripting.py:24 +msgid "Co-op Partner" +msgstr "Socio cooperativo" + +#: src/scripting/coop_scripting.py:28 +msgid "Co-op Rival 1" +msgstr "" + +#: src/scripting/coop_scripting.py:32 +msgid "Co-op Rival 2" +msgstr "" + +#: src/scripting/coop_scripting.py:37 +msgid "Our Team's Timer" +msgstr "Temporizador de nuestro equipo" + +#: src/scripting/coop_scripting.py:41 +msgid "This text source will display your team's timer when you finish." +msgstr "Esta fuente de texto mostrará el cronómetro de tu equipo cuando termines." + +#: src/scripting/coop_scripting.py:48 +msgid "" +"This text source will be use to display your rival's timer when they " +"finish" +msgstr "" +"Esta fuente de texto se utilizará para mostrar el temporizador de tu " +"rival cuando termine" + +#: src/scripting/coop_scripting.py:53 +msgid "Winner Color:" +msgstr "Color del ganador" + +#: src/scripting/coop_scripting.py:55 +msgid "Loser Color:" +msgstr "Color del perdedor" + +#: src/scripting/coop_scripting.py:57 +msgid "Winner Undetermined Color" +msgstr "Color del ganador indeterminado" + +#: src/scripting/media_player_scripting.py:37 +msgid "Enable sounds?" +msgstr "¿Activar sonidos?" + +#: src/scripting/media_player_scripting.py:42 +msgid "Media Player Mode" +msgstr "Modo de reproductor multimedia" + +#: src/scripting/media_player_scripting.py:50 +#: src/scripting/media_trigger_scripting.py:37 +msgid "Monitoring Type" +msgstr "Tipo de monitorización" + +#: src/scripting/media_player_scripting.py:53 +msgid "Listen Only" +msgstr "Escuchar solo" + +#: src/scripting/media_player_scripting.py:57 +msgid "Stream Only" +msgstr "Solo transmitir" + +#: src/scripting/media_player_scripting.py:59 +#: src/scripting/media_trigger_scripting.py:44 +msgid "Listen and Stream" +msgstr "Escuchar y transmitir" + +#: src/scripting/media_player_scripting.py:62 +msgid "Chat Pings" +msgstr "Pings de chat" + +#: src/scripting/media_player_scripting.py:64 +msgid "" +"Enable this and set choose a sound file to play when a bot posts or when " +"someone @s you in racetime.gg chat" +msgstr "" +"Habilite esto y configure elija un archivo de sonido para reproducir " +"cuando un bot publique o cuando alguien lo @ en el chat racetime.gg" + +#: src/scripting/media_player_scripting.py:69 +msgid "Chat media file" +msgstr "Archivo multimedia de chat" + +#: src/scripting/media_player_scripting.py:74 +msgid "First Place Sound" +msgstr "Sonido de primer lugar" + +#: src/scripting/media_player_scripting.py:78 +msgid "Sound file to play when you finish first." +msgstr "Archivo de sonido para reproducir cuando termines primero." + +#: src/scripting/media_trigger_scripting.py:16 +msgid "Media Trigger #" +msgstr "Activador de medios #" + +#: src/scripting/media_trigger_scripting.py:25 +msgid "Sound File" +msgstr "Archivo de sonido" + +#: src/scripting/media_trigger_scripting.py:29 +msgid "Type of Trigger" +msgstr "Tipo de disparador" + +#: src/scripting/media_trigger_scripting.py:32 +msgid "Chat" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:33 +msgid "Finish Place" +msgstr "Lugar de finalización" + +#: src/scripting/media_trigger_scripting.py:34 +msgid "Timer" +msgstr "Temporizador" + +#: src/scripting/media_trigger_scripting.py:40 +msgid "Only Listen" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:42 +msgid "Only Stream" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:56 +msgid "Bot?" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:58 +msgid "Highlighted?" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:60 +msgid "System?" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:72 +msgid "Finish Place <=" +msgstr "Lugar de finalización <=" + +#: src/scripting/media_trigger_scripting.py:75 +msgid "Num. Entrants >=" +msgstr "Num. Participantes >=" + +#: src/scripting/media_trigger_scripting.py:85 +msgid "Start playing at " +msgstr "Empieza en" + +#: src/scripting/qualifier_scripting.py:16 +msgid "Display race results as tournament qualifier?" +msgstr "¿Mostrar los resultados de la carrera como clasificatorio para el torneo?" + +#: src/scripting/qualifier_scripting.py:21 +msgid "Qualifier Mode" +msgstr "Modo de calificación" + +#: src/scripting/qualifier_scripting.py:30 +msgid "Use Top X as par time, where X=" +msgstr "Utilice Top X como tiempo par, donde X =" + +#: src/scripting/qualifier_scripting.py:35 +msgid "Qualifier Par Time Source" +msgstr "Calificar por fuente de tiempo" + +#: src/scripting/qualifier_scripting.py:43 +msgid "Qualifier Score Source" +msgstr "Fuente de puntuación del calificador" + +#: src/scripting/setup_scripting.py:25 +msgid "Initial setup - Check to make changes" +msgstr "Configuración inicial: marque para realizar cambios" + +#: src/scripting/setup_scripting.py:29 +msgid "Text Source" +msgstr "Fuente de texto" + +#: src/scripting/setup_scripting.py:34 +msgid "Username" +msgstr "Nombre de usuario" + +#: src/scripting/setup_scripting.py:36 +msgid "Enable logging" +msgstr "Habilitar el registro" + +#: src/scripting/setup_scripting.py:38 +msgid "Log level" +msgstr "Nivel de registro" + +#: src/scripting/setup_scripting.py:41 +msgid "Error" +msgstr "" + +#: src/scripting/setup_scripting.py:42 +msgid "Debug" +msgstr "Depurar" + +#: src/scripting/setup_scripting.py:43 +msgid "Info" +msgstr "" + +#: src/scripting/setup_scripting.py:45 +msgid "" +"Generally, only log errors unless you are developing or are trying to " +"find a specific problem." +msgstr "" +"Por lo general, solo registre errores a menos que esté desarrollando o " +"tratando de encontrar un problema específico." + +#: src/scripting/setup_scripting.py:49 +msgid "Log to file?" +msgstr "¿Unido al expediente?" + +#: src/scripting/setup_scripting.py:51 +msgid "Log File" +msgstr "Archivo de registro" + +#: src/scripting/setup_scripting.py:55 +msgid "Filter by Category" +msgstr "Filtrar por categoría" + +#: src/scripting/setup_scripting.py:59 +msgid "Race" +msgstr "Carrera" + +#: src/scripting/setup_scripting.py:69 +msgid "Race Desc" +msgstr "Descripción de la carrera" + +#: src/scripting/timer_scripting.py:33 +msgid "Use custom color for podium finishes?" +msgstr "¿Usar colores personalizados para los acabados del podio?" + +#: src/scripting/timer_scripting.py:37 +msgid "Podium Colors" +msgstr "Colores del podio" + +#: src/scripting/timer_scripting.py:42 +msgid "Pre-race:" +msgstr "Antes de la carrera:" + +#: src/scripting/timer_scripting.py:44 +msgid "Still racing:" +msgstr "Todavía corriendo:" + +#: src/scripting/timer_scripting.py:45 +msgid "1st place:" +msgstr "1er lugar" + +#: src/scripting/timer_scripting.py:46 +msgid "2nd place:" +msgstr "2er lugar" + +#: src/scripting/timer_scripting.py:47 +msgid "3rd place:" +msgstr "3er lugar" + +#: src/scripting/timer_scripting.py:49 +msgid "After podium:" +msgstr "Después del podio:" + diff --git a/src/locales/fr/LC_MESSAGES/racetime-obs.po b/src/locales/fr/LC_MESSAGES/racetime-obs.po new file mode 100644 index 0000000..ff7bc62 --- /dev/null +++ b/src/locales/fr/LC_MESSAGES/racetime-obs.po @@ -0,0 +1,355 @@ +# French translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-12-29 07:01-0500\n" +"PO-Revision-Date: 2020-12-28 15:51-0500\n" +"Last-Translator: FULL NAME \n" +"Language: fr\n" +"Language-Team: fr \n" +"Plural-Forms: nplurals=2; plural=(n > 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.9.0\n" + +#: src/racetime_client.py:22 src/rtgg_obs.py:24 +msgid "" +"

You've loaded the incorrect script.

Please remove this fileand " +"add 'racetime_obs.py' instead

" +msgstr "" +"

Vous avez chargé le script incorrect.

Veuillez supprimer ce " +"fichier et ajouter \"racetime_obs.py\" à la place

" + +#: src/racetime_obs.py:29 +msgid "" +"Select a text source to use as your timer and enter your full username on" +" racetime.gg (including discriminator). This only needs to be done once." +" Then select the race room each race you join and stop worrying about " +"whether you started your timer or not." +msgstr "" +"Sélectionnez une source de texte à utiliser comme minuterie et entrez votre " +"nom d'utilisateur complet sur racetime.gg (y compris le discriminateur). " +"Cela a seulement besoin d'être fait une fois. Ensuite, sélectionnez la " +"salle de course à chaque course que vous rejoignez et arrêtez de vous " +"soucier de savoir si vous avez démarré votre chronomètre ou non." + +#: src/racetime_obs.py:85 +msgid "Race info" +msgstr "Infos course" + +#: src/racetime_obs.py:107 +msgid "Refresh" +msgstr "Rafraîchir" + +#: src/racetime_obs.py:161 +msgid "Race not found" +msgstr "Race introuvable" + +#: src/scripting/__init__.py:33 +msgid "All" +msgstr "Toute" + +#: src/scripting/__init__.py:35 +msgid "None" +msgstr "Aucune" + +#: src/scripting/coop_scripting.py:15 +msgid "Display coop information?" +msgstr "Afficher les informations sur la coopérative" + +#: src/scripting/coop_scripting.py:19 +msgid "Co-op Mode" +msgstr "Mode coopératif" + +#: src/scripting/coop_scripting.py:24 +msgid "Co-op Partner" +msgstr "Partenaire coop" + +#: src/scripting/coop_scripting.py:28 +msgid "Co-op Rival 1" +msgstr "" + +#: src/scripting/coop_scripting.py:32 +msgid "Co-op Rival 2" +msgstr "" + +#: src/scripting/coop_scripting.py:37 +msgid "Our Team's Timer" +msgstr "Le chronomètre de notre équipe" + +#: src/scripting/coop_scripting.py:41 +msgid "This text source will display your team's timer when you finish." +msgstr "" +"Cette source de texte affichera le chronomètre de votre équipe lorsque " +"vous aurez terminé." + +#: src/scripting/coop_scripting.py:48 +msgid "" +"This text source will be use to display your rival's timer when they " +"finish" +msgstr "" +"Cette source de texte sera utilisée pour afficher le chronomètre de votre " +"rival lorsqu'il aura terminé" + +#: src/scripting/coop_scripting.py:53 +msgid "Winner Color:" +msgstr "Couleur du gagnant:" + +#: src/scripting/coop_scripting.py:55 +msgid "Loser Color:" +msgstr "Couleur du perdant:" + +#: src/scripting/coop_scripting.py:57 +msgid "Winner Undetermined Color" +msgstr "Couleur indéterminée du gagnant" + +#: src/scripting/media_player_scripting.py:37 +msgid "Enable sounds?" +msgstr "Activer les sons?" + +#: src/scripting/media_player_scripting.py:42 +msgid "Media Player Mode" +msgstr "Mode lecteur multimédia" + +#: src/scripting/media_player_scripting.py:50 +#: src/scripting/media_trigger_scripting.py:37 +msgid "Monitoring Type" +msgstr "Type de surveillance" + +#: src/scripting/media_player_scripting.py:53 +msgid "Listen Only" +msgstr "Écoutez seulement" + +#: src/scripting/media_player_scripting.py:57 +msgid "Stream Only" +msgstr "Diffuser uniquement" + +#: src/scripting/media_player_scripting.py:59 +#: src/scripting/media_trigger_scripting.py:44 +msgid "Listen and Stream" +msgstr "Écoutez et diffusez" + +#: src/scripting/media_player_scripting.py:62 +msgid "Chat Pings" +msgstr "" + +#: src/scripting/media_player_scripting.py:64 +msgid "" +"Enable this and set choose a sound file to play when a bot posts or when " +"someone @s you in racetime.gg chat" +msgstr "" +"Activez cette option et choisissez un fichier son à lire lorsqu'un bot " +"publie ou lorsque quelqu'un vous @s dans le chat racetime.gg" + +#: src/scripting/media_player_scripting.py:69 +msgid "Chat media file" +msgstr "Fichier multimédia de chat" + +#: src/scripting/media_player_scripting.py:74 +msgid "First Place Sound" +msgstr "Premier son" + +#: src/scripting/media_player_scripting.py:78 +msgid "Sound file to play when you finish first." +msgstr "Fichier son à lire lorsque vous avez terminé en premier." + +#: src/scripting/media_trigger_scripting.py:16 +msgid "Media Trigger #" +msgstr "Déclencheur multimédia #" + +#: src/scripting/media_trigger_scripting.py:25 +msgid "Sound File" +msgstr "Fichier audio" + +#: src/scripting/media_trigger_scripting.py:29 +msgid "Type of Trigger" +msgstr "Type de déclencheur" + +#: src/scripting/media_trigger_scripting.py:32 +msgid "Chat" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:33 +msgid "Finish Place" +msgstr "Endroit d'arrivée" + +#: src/scripting/media_trigger_scripting.py:34 +msgid "Timer" +msgstr "chronomètre" + +#: src/scripting/media_trigger_scripting.py:40 +msgid "Only Listen" +msgstr "Écoutez seulement" + +#: src/scripting/media_trigger_scripting.py:42 +msgid "Only Stream" +msgstr "Écoutez et diffusez" + +#: src/scripting/media_trigger_scripting.py:56 +msgid "Bot?" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:58 +msgid "Highlighted?" +msgstr "Souligné?" + +#: src/scripting/media_trigger_scripting.py:60 +msgid "System?" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:72 +msgid "Finish Place <=" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:75 +msgid "Num. Entrants >=" +msgstr "Nombre de participants> =" + +#: src/scripting/media_trigger_scripting.py:85 +msgid "Start playing at " +msgstr "Commencer à " + +#: src/scripting/qualifier_scripting.py:16 +msgid "Display race results as tournament qualifier?" +msgstr "Afficher les résultats de la course comme qualification du tournoi?" + +#: src/scripting/qualifier_scripting.py:21 +msgid "Qualifier Mode" +msgstr "Mode qualificatif" + +#: src/scripting/qualifier_scripting.py:30 +msgid "Use Top X as par time, where X=" +msgstr "Utilisez Top X comme temps par, où X =" + +#: src/scripting/qualifier_scripting.py:35 +msgid "Qualifier Par Time Source" +msgstr "Source de temps par qualificatif" + +#: src/scripting/qualifier_scripting.py:43 +msgid "Qualifier Score Source" +msgstr "Source du score du qualificatif" + +#: src/scripting/setup_scripting.py:25 +msgid "Initial setup - Check to make changes" +msgstr "Configuration initiale - Cochez pour apporter des modifications" + +#: src/scripting/setup_scripting.py:29 +msgid "Text Source" +msgstr "Source du texte" + +#: src/scripting/setup_scripting.py:34 +msgid "Username" +msgstr "Nom d'utilisateur" + +#: src/scripting/setup_scripting.py:36 +msgid "Enable logging" +msgstr "Activer la journalisation" + +#: src/scripting/setup_scripting.py:38 +msgid "Log level" +msgstr "Niveau de journal" + +#: src/scripting/setup_scripting.py:41 +msgid "Error" +msgstr "Erreur" + +#: src/scripting/setup_scripting.py:42 +msgid "Debug" +msgstr "Déboguer" + +#: src/scripting/setup_scripting.py:43 +msgid "Info" +msgstr "" + +#: src/scripting/setup_scripting.py:45 +msgid "" +"Generally, only log errors unless you are developing or are trying to " +"find a specific problem." +msgstr "" +"En règle générale, enregistrez uniquement les erreurs, sauf si vous " +"développez ou essayez de trouver un problème spécifique." + +#: src/scripting/setup_scripting.py:49 +msgid "Log to file?" +msgstr "Connectez-vous au fichier?" + +#: src/scripting/setup_scripting.py:51 +msgid "Log File" +msgstr "Fichier journal" + +#: src/scripting/setup_scripting.py:55 +msgid "Filter by Category" +msgstr "" + +#: src/scripting/setup_scripting.py:59 +msgid "Race" +msgstr "Course" + +#: src/scripting/setup_scripting.py:69 +msgid "Race Desc" +msgstr "Desc de course" + +#: src/scripting/timer_scripting.py:33 +msgid "Use custom color for podium finishes?" +msgstr "Utiliser une couleur personnalisée pour les podiums?" + +#: src/scripting/timer_scripting.py:37 +msgid "Podium Colors" +msgstr "Couleurs du podium" + +#: src/scripting/timer_scripting.py:42 +msgid "Pre-race:" +msgstr "Avant la course:" + +#: src/scripting/timer_scripting.py:44 +msgid "Still racing:" +msgstr "Toujours en course:" + +#: src/scripting/timer_scripting.py:45 +msgid "1st place:" +msgstr "1ère place:" + +#: src/scripting/timer_scripting.py:46 +msgid "2nd place:" +msgstr "2ème place:" + +#: src/scripting/timer_scripting.py:47 +msgid "3rd place:" +msgstr "3ème place:" + +#: src/scripting/timer_scripting.py:49 +msgid "After podium:" +msgstr "Après le podium:" + +#~ msgid "" +#~ "Select a text source to use as " +#~ "your timer and enter yourfull username" +#~ " on racetime.gg (including discriminator). " +#~ "This only needs to be done once." +#~ "\n" +#~ "\n" +#~ "Then select the race room each " +#~ "race you join and stop worrying " +#~ "about whether you started your timer " +#~ "or not." +#~ msgstr "" + +#~ msgid "" +#~ "Select a text source to use as " +#~ "your timer and enter your full " +#~ "username on racetime.gg (including " +#~ "discriminator). This only needs to be" +#~ " done once.\n" +#~ "\n" +#~ "Then select the race room each " +#~ "race you join and stop worrying " +#~ "about whether you started your timer " +#~ "or not." +#~ msgstr "" + diff --git a/src/locales/pt/LC_MESSAGES/racetime-obs.po b/src/locales/pt/LC_MESSAGES/racetime-obs.po new file mode 100644 index 0000000..25e7e81 --- /dev/null +++ b/src/locales/pt/LC_MESSAGES/racetime-obs.po @@ -0,0 +1,354 @@ +# Portuguese translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-12-29 07:01-0500\n" +"PO-Revision-Date: 2020-12-28 15:51-0500\n" +"Last-Translator: FULL NAME \n" +"Language: pt\n" +"Language-Team: pt \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.9.0\n" + +#: src/racetime_client.py:22 src/rtgg_obs.py:24 +msgid "" +"

You've loaded the incorrect script.

Please remove this fileand " +"add 'racetime_obs.py' instead

" +msgstr "" +"

Você carregou o script incorreto.

Remova este arquivo e " +"adicione 'racetime_obs.py' em seu lugar

" + +#: src/racetime_obs.py:29 +msgid "" +"Select a text source to use as your timer and enter your full username on" +" racetime.gg (including discriminator). This only needs to be done once." +" Then select the race room each race you join and stop worrying about " +"whether you started your timer or not." +msgstr "" +"Selecione uma fonte de texto para usar como seu cronômetro e digite seu " +"nome de usuário completo em racetime.gg (incluindo discriminador). Isso só " +"precisa ser feito uma vez. Em seguida, selecione a sala de corrida de cada " +"corrida em que você participa e pare de se preocupar se você iniciou o " +"cronômetro ou não." + +#: src/racetime_obs.py:85 +msgid "Race info" +msgstr "Informação da corrida" + +#: src/racetime_obs.py:107 +msgid "Refresh" +msgstr "Atualizar" + +#: src/racetime_obs.py:161 +msgid "Race not found" +msgstr "Raça não encontrada" + +#: src/scripting/__init__.py:33 +msgid "All" +msgstr "Todos" + +#: src/scripting/__init__.py:35 +msgid "None" +msgstr "Nenhum" + +#: src/scripting/coop_scripting.py:15 +msgid "Display coop information?" +msgstr "Exibir informações da cooperativa?" + +#: src/scripting/coop_scripting.py:19 +msgid "Co-op Mode" +msgstr "Modo Co-op" + +#: src/scripting/coop_scripting.py:24 +msgid "Co-op Partner" +msgstr "Parceiro Co-op" + +#: src/scripting/coop_scripting.py:28 +msgid "Co-op Rival 1" +msgstr "Rival Co-op 1" + +#: src/scripting/coop_scripting.py:32 +msgid "Co-op Rival 2" +msgstr "Rival Co-op 2" + +#: src/scripting/coop_scripting.py:37 +msgid "Our Team's Timer" +msgstr "Cronômetro de nossa equipe" + +#: src/scripting/coop_scripting.py:41 +msgid "This text source will display your team's timer when you finish." +msgstr "" +"Esta fonte de texto exibirá o cronômetro de sua equipe quando você terminar." + +#: src/scripting/coop_scripting.py:48 +msgid "" +"This text source will be use to display your rival's timer when they " +"finish" +msgstr "" +"Esta fonte de texto será usada para exibir o cronômetro do seu rival quando " +"ele terminar" + +#: src/scripting/coop_scripting.py:53 +msgid "Winner Color:" +msgstr "Cor do vencedor:" + +#: src/scripting/coop_scripting.py:55 +msgid "Loser Color:" +msgstr "Cor do perdedor:" + +#: src/scripting/coop_scripting.py:57 +msgid "Winner Undetermined Color" +msgstr "Cor Indeterminada do Vencedor" + +#: src/scripting/media_player_scripting.py:37 +msgid "Enable sounds?" +msgstr "Habilitar sons?" + +#: src/scripting/media_player_scripting.py:42 +msgid "Media Player Mode" +msgstr "Modo Media Player" + +#: src/scripting/media_player_scripting.py:50 +#: src/scripting/media_trigger_scripting.py:37 +msgid "Monitoring Type" +msgstr "Tipo de Monitoramento" + +#: src/scripting/media_player_scripting.py:53 +msgid "Listen Only" +msgstr "Ouvir apenas" + +#: src/scripting/media_player_scripting.py:57 +msgid "Stream Only" +msgstr "Transmitir apenas" + +#: src/scripting/media_player_scripting.py:59 +#: src/scripting/media_trigger_scripting.py:44 +msgid "Listen and Stream" +msgstr "Ouça e transmita" + +#: src/scripting/media_player_scripting.py:62 +msgid "Chat Pings" +msgstr "" + +#: src/scripting/media_player_scripting.py:64 +msgid "" +"Enable this and set choose a sound file to play when a bot posts or when " +"someone @s you in racetime.gg chat" +msgstr "" +"Habilite isso e defina a escolha de um arquivo de som para tocar quando um " +"bot postar ou quando alguém falar com você no chat racetime.gg" + +#: src/scripting/media_player_scripting.py:69 +msgid "Chat media file" +msgstr "Arquivo de mídia de bate-papo" + +#: src/scripting/media_player_scripting.py:74 +msgid "First Place Sound" +msgstr "Primeiro lugar de som" + +#: src/scripting/media_player_scripting.py:78 +msgid "Sound file to play when you finish first." +msgstr "Arquivo de som a ser reproduzido quando você terminar primeiro." + +#: src/scripting/media_trigger_scripting.py:16 +msgid "Media Trigger #" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:25 +msgid "Sound File" +msgstr "Arquivo de Som" + +#: src/scripting/media_trigger_scripting.py:29 +msgid "Type of Trigger" +msgstr "Tipo de gatilho" + +#: src/scripting/media_trigger_scripting.py:32 +msgid "Chat" +msgstr "Bate-papo" + +#: src/scripting/media_trigger_scripting.py:33 +msgid "Finish Place" +msgstr "Terminar lugar" + +#: src/scripting/media_trigger_scripting.py:34 +msgid "Timer" +msgstr "Cronômetro" + +#: src/scripting/media_trigger_scripting.py:40 +msgid "Only Listen" +msgstr "Apenas escute" + +#: src/scripting/media_trigger_scripting.py:42 +msgid "Only Stream" +msgstr "Apenas transmita" + +#: src/scripting/media_trigger_scripting.py:56 +msgid "Bot?" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:58 +msgid "Highlighted?" +msgstr "Em destaque?" + +#: src/scripting/media_trigger_scripting.py:60 +msgid "System?" +msgstr "" + +#: src/scripting/media_trigger_scripting.py:72 +msgid "Finish Place <=" +msgstr "Terminar Lugar <=" + +#: src/scripting/media_trigger_scripting.py:75 +msgid "Num. Entrants >=" +msgstr "Número de participantes >=" + +#: src/scripting/media_trigger_scripting.py:85 +msgid "Start playing at " +msgstr "Começa ás" + +#: src/scripting/qualifier_scripting.py:16 +msgid "Display race results as tournament qualifier?" +msgstr "Exibir os resultados da corrida como qualificação do torneio?" + +#: src/scripting/qualifier_scripting.py:21 +msgid "Qualifier Mode" +msgstr "Modo Qualificador" + +#: src/scripting/qualifier_scripting.py:30 +msgid "Use Top X as par time, where X=" +msgstr "Use o Top X como tempo nominal, onde X =" + +#: src/scripting/qualifier_scripting.py:35 +msgid "Qualifier Par Time Source" +msgstr "Fonte de tempo par do qualificador" + +#: src/scripting/qualifier_scripting.py:43 +msgid "Qualifier Score Source" +msgstr "Fonte de pontuação do qualificador" + +#: src/scripting/setup_scripting.py:25 +msgid "Initial setup - Check to make changes" +msgstr "Configuração inicial - marque para fazer alterações" + +#: src/scripting/setup_scripting.py:29 +msgid "Text Source" +msgstr "Fonte do Texto" + +#: src/scripting/setup_scripting.py:34 +msgid "Username" +msgstr "Nome do usuário" + +#: src/scripting/setup_scripting.py:36 +msgid "Enable logging" +msgstr "Habilitar registro" + +#: src/scripting/setup_scripting.py:38 +msgid "Log level" +msgstr "Nível de registro" + +#: src/scripting/setup_scripting.py:41 +msgid "Error" +msgstr "Erro" + +#: src/scripting/setup_scripting.py:42 +msgid "Debug" +msgstr "Depurar" + +#: src/scripting/setup_scripting.py:43 +msgid "Info" +msgstr "Informações" + +#: src/scripting/setup_scripting.py:45 +msgid "" +"Generally, only log errors unless you are developing or are trying to " +"find a specific problem." +msgstr "" +"Geralmente, apenas registre os erros, a menos que você esteja desenvolvendo " +"ou tentando encontrar um problema específico." + +#: src/scripting/setup_scripting.py:49 +msgid "Log to file?" +msgstr "Entrar no arquivo?" + +#: src/scripting/setup_scripting.py:51 +msgid "Log File" +msgstr "Arquivo de log" + +#: src/scripting/setup_scripting.py:55 +msgid "Filter by Category" +msgstr "Filtrar por categoria" + +#: src/scripting/setup_scripting.py:59 +msgid "Race" +msgstr "Corrida" + +#: src/scripting/setup_scripting.py:69 +msgid "Race Desc" +msgstr "Descrição da corrida" + +#: src/scripting/timer_scripting.py:33 +msgid "Use custom color for podium finishes?" +msgstr "Usar cores personalizadas para acabamentos de pódio?" + +#: src/scripting/timer_scripting.py:37 +msgid "Podium Colors" +msgstr "Cores do Pódio" + +#: src/scripting/timer_scripting.py:42 +msgid "Pre-race:" +msgstr "Pré-corrida:" + +#: src/scripting/timer_scripting.py:44 +msgid "Still racing:" +msgstr "Ainda correndo:" + +#: src/scripting/timer_scripting.py:45 +msgid "1st place:" +msgstr "1 º lugar:" + +#: src/scripting/timer_scripting.py:46 +msgid "2nd place:" +msgstr "2 º lugar:" + +#: src/scripting/timer_scripting.py:47 +msgid "3rd place:" +msgstr "3 º lugar:" + +#: src/scripting/timer_scripting.py:49 +msgid "After podium:" +msgstr "Depois do pódio:" + +#~ msgid "" +#~ "Select a text source to use as " +#~ "your timer and enter yourfull username" +#~ " on racetime.gg (including discriminator). " +#~ "This only needs to be done once." +#~ "\n" +#~ "\n" +#~ "Then select the race room each " +#~ "race you join and stop worrying " +#~ "about whether you started your timer " +#~ "or not." +#~ msgstr "" + +#~ msgid "" +#~ "Select a text source to use as " +#~ "your timer and enter your full " +#~ "username on racetime.gg (including " +#~ "discriminator). This only needs to be" +#~ " done once.\n" +#~ "\n" +#~ "Then select the race room each " +#~ "race you join and stop worrying " +#~ "about whether you started your timer " +#~ "or not." +#~ msgstr "" + diff --git a/src/racetime_obs.py b/src/racetime_obs.py index 89509af..d2e1054 100644 --- a/src/racetime_obs.py +++ b/src/racetime_obs.py @@ -1,5 +1,7 @@ from threading import Thread from gadgets.ladder_timer import LadderTimer +import gettext +import os import obspython as obs import clients.racetime_client as racetime_client @@ -13,19 +15,30 @@ from scripting import fill_race_list, fill_source_list, set_source_text from scripting import ScriptProperties as sp +_ = None rtgg_obs = RacetimeObs() ladder_timer = LadderTimer(rtgg_obs.logger) ladder_scripting.ladder_timer = ladder_timer +def script_path(): + # PLACEHOLDER + # this function gets injected by OBS with actual script path + pass + + def script_description(): + set_locale() + message = _( + "Select a text source to use as your timer and enter your " + "full username on racetime.gg (including discriminator). This " + "only needs to be done once. Then select the race room each " + "race you join and stop worrying about whether you started your " + "timer or not." + ) return ( "
racetime-obs xxVERSIONxx
" - "

Select a text source to use as your timer and enter your" - "full username on racetime.gg (including discriminator). This only" - "needs to be done once.\n\nThen select the race room each race you " - "join and stop worrying about whether you started your timer or not." - "


" + "

" + message + "


" ) @@ -76,11 +89,22 @@ def script_update(settings): def script_defaults(settings): - obs.obs_data_set_default_string(settings, "race_info", "Race info") + set_locale() + obs.obs_data_set_default_string(settings, "race_info", _("Race info")) obs.obs_data_set_default_string(settings, "race", "None") obs.obs_data_set_default_int(settings, "qualifier_cutoff", 3) +def set_locale(): + global _ + if _ is None: + os.environ['LOCALEDIR'] = script_path() + "locales" + os.environ['LANGUAGE'] = obs.obs_get_locale()[0:2] + lang = gettext.translation( + "racetime-obs", localedir=os.environ['LOCALEDIR']) + _ = lang.gettext + + def script_properties(): props = obs.obs_properties_create() setup_scripting.script_setup( @@ -88,7 +112,7 @@ def script_properties(): ) refresh = obs.obs_properties_add_button( - props, "button", "Refresh", lambda *props: None) + props, "button", _("Refresh"), lambda *props: None) obs.obs_property_set_modified_callback(refresh, refresh_pressed) timer_scripting.script_timer_settings(props, rtgg_obs,) coop_scripting.script_coop_settings(props, rtgg_obs) @@ -121,6 +145,7 @@ def refresh_pressed(props, prop, *args, **kwargs): def new_race_selected(props, prop, settings): + set_locale() rtgg_obs.race_changed = True obs.timer_remove(update_sources) @@ -151,7 +176,7 @@ def new_race_selected(props, prop, settings): obs.timer_add(update_sources, 100) else: obs.obs_data_set_default_string( - settings, "race_info", "Race not found") + settings, "race_info", _("Race not found")) return True diff --git a/src/rtgg_obs.py b/src/rtgg_obs.py index de6eaa3..aabd353 100644 --- a/src/rtgg_obs.py +++ b/src/rtgg_obs.py @@ -3,6 +3,7 @@ import json import logging from datetime import datetime, timedelta, timezone +import gettext import dateutil import websockets @@ -18,11 +19,13 @@ from models.race import Race, race_from_dict from models.chat_message import chat_message_from_dict +_ = gettext.gettext + def script_description(): - return ( + return (_( "

You've loaded the incorrect script.

Please remove this file" - "and add 'racetime_obs.py' instead

" + "and add 'racetime_obs.py' instead

") ) diff --git a/src/scripting/__init__.py b/src/scripting/__init__.py index 88fdab4..f7e647a 100644 --- a/src/scripting/__init__.py +++ b/src/scripting/__init__.py @@ -1,5 +1,7 @@ from enum import Enum, auto +import os from typing import List +import gettext from models.race import Race import obspython as obs from helpers.obs_context_manager import data_ar, source_ar, source_list_ar @@ -33,11 +35,14 @@ def fill_source_list(p): def fill_race_list(rtgg_obs: RacetimeObs, race_list, category_list): + lang = gettext.translation( + "racetime-obs", localedir=os.environ['LOCALEDIR']) + _ = lang.gettext obs.obs_property_list_clear(race_list) obs.obs_property_list_clear(category_list) - obs.obs_property_list_add_string(category_list, "All", sp.all_category) + obs.obs_property_list_add_string(category_list, _("All"), sp.all_category) - obs.obs_property_list_add_string(race_list, "None", "None") + obs.obs_property_list_add_string(race_list, _("None"), "None") races = racetime_client.get_races() if races is not None: fill_category_list(category_list, races) diff --git a/src/scripting/coop_scripting.py b/src/scripting/coop_scripting.py index d9331f2..f24f09a 100644 --- a/src/scripting/coop_scripting.py +++ b/src/scripting/coop_scripting.py @@ -1,53 +1,60 @@ +import gettext +import os + import obspython as obs from rtgg_obs import RacetimeObs from . import fill_source_list def script_coop_settings(props, rtgg_obs: RacetimeObs): + lang = gettext.translation( + "racetime-obs", localedir=os.environ['LOCALEDIR']) + _ = lang.gettext + p = obs.obs_properties_add_bool( - props, "use_coop", "Display coop information?") + props, "use_coop", _("Display coop information?")) obs.obs_property_set_modified_callback(p, coop_toggled) coop_group = obs.obs_properties_create() obs.obs_properties_add_group( - props, "coop_group", "Co-op Mode", obs.OBS_GROUP_NORMAL, coop_group + props, "coop_group", _("Co-op Mode"), obs.OBS_GROUP_NORMAL, coop_group ) obs.obs_property_set_visible( obs.obs_properties_get(props, "coop_group"), rtgg_obs.coop.enabled) p = obs.obs_properties_add_list( - coop_group, "coop_partner", "Co-op Partner", + coop_group, "coop_partner", _("Co-op Partner"), obs.OBS_COMBO_TYPE_LIST, obs.OBS_COMBO_FORMAT_STRING ) p = obs.obs_properties_add_list( - coop_group, "coop_opponent1", "Co-op Rival 1", + coop_group, "coop_opponent1", _("Co-op Rival 1"), obs.OBS_COMBO_TYPE_LIST, obs.OBS_COMBO_FORMAT_STRING ) p = obs.obs_properties_add_list( - coop_group, "coop_opponent2", "Co-op Rival 2", + coop_group, "coop_opponent2", _("Co-op Rival 2"), obs.OBS_COMBO_TYPE_LIST, obs.OBS_COMBO_FORMAT_STRING ) fill_coop_entrant_lists(props, rtgg_obs) p = obs.obs_properties_add_list( - coop_group, "coop_our_source", "Our Team's Timer", + coop_group, "coop_our_source", _("Our Team's Timer"), obs.OBS_COMBO_TYPE_EDITABLE, obs.OBS_COMBO_FORMAT_STRING ) obs.obs_property_set_long_description(p, ( - "This text source will display your team's timer when you finish." + _("This text source will display your team's timer when you finish.") )) fill_source_list(p) p = obs.obs_properties_add_list( coop_group, "coop_opponent_source", "Rival Team's Timer", obs.OBS_COMBO_TYPE_EDITABLE, obs.OBS_COMBO_FORMAT_STRING ) - obs.obs_property_set_long_description(p, ( - "This text source will be use to display your rival's timer when they" - " finish" + obs.obs_property_set_long_description(p, (_( + "This text source will be use to display your rival's timer when " + "they finish") )) obs.obs_properties_add_color( - coop_group, "coop_winner_color", "Winner Color:") + coop_group, "coop_winner_color", _("Winner Color:")) obs.obs_properties_add_color( - coop_group, "coop_loser_color", "Loser Color:") + coop_group, "coop_loser_color", _("Loser Color:")) obs.obs_properties_add_color( - coop_group, "coop_undetermined_color", "Winner Undetermined Color") + coop_group, "coop_undetermined_color", _("Winner Undetermined Color")) fill_source_list(p) diff --git a/src/scripting/media_player_scripting.py b/src/scripting/media_player_scripting.py index d74f66e..fd7733e 100644 --- a/src/scripting/media_player_scripting.py +++ b/src/scripting/media_player_scripting.py @@ -1,7 +1,12 @@ +import gettext +import os + from helpers.obs_context_manager import media_source_ar import obspython as obs from rtgg_obs import RacetimeObs +_ = gettext.gettext + def script_update_media_player_settings(settings, rtgg_obs: RacetimeObs): rtgg_obs.media_player.play_media_callback = play_sound @@ -24,13 +29,17 @@ def script_update_media_player_settings(settings, rtgg_obs: RacetimeObs): def script_media_player_settings( props, rtgg_obs: RacetimeObs, media_player_toggled ): + lang = gettext.translation( + "racetime-obs", localedir=os.environ['LOCALEDIR']) + _ = lang.gettext + p = obs.obs_properties_add_bool( - props, "use_media_player", "Enable sounds?" + props, "use_media_player", _("Enable sounds?") ) obs.obs_property_set_modified_callback(p, media_player_toggled) media_player_group = obs.obs_properties_create() obs.obs_properties_add_group( - props, "media_player_group", "Media Player Mode", + props, "media_player_group", _("Media Player Mode"), obs.OBS_GROUP_NORMAL, media_player_group ) obs.obs_property_set_visible( @@ -38,32 +47,35 @@ def script_media_player_settings( rtgg_obs.media_player.enabled ) monitoring_list = obs.obs_properties_add_list( - media_player_group, "monitoring_type", "Monitoring Type", + media_player_group, "monitoring_type", _("Monitoring Type"), obs.OBS_COMBO_TYPE_LIST, obs.OBS_COMBO_FORMAT_INT) obs.obs_property_list_add_int( - monitoring_list, "Listen Only", obs.OBS_MONITORING_TYPE_MONITOR_ONLY) + monitoring_list, _("Listen Only"), + obs.OBS_MONITORING_TYPE_MONITOR_ONLY + ) obs.obs_property_list_add_int( - monitoring_list, "Stream Only", obs.OBS_MONITORING_TYPE_NONE) + monitoring_list, _("Stream Only"), obs.OBS_MONITORING_TYPE_NONE) obs.obs_property_list_add_int( - monitoring_list, "Listen and Stream", + monitoring_list, _("Listen and Stream"), obs.OBS_MONITORING_TYPE_MONITOR_AND_OUTPUT) p = obs.obs_properties_add_bool( - media_player_group, "use_chat_pings", "Chat Pings") + media_player_group, "use_chat_pings", _("Chat Pings")) obs.obs_property_set_long_description( - p, ("Enable this and set choose a sound file to play when a bot posts " - "or when someone @s you in racetime.gg chat")) + p, _("Enable this and set choose a sound file to play when a bot posts" + " or when someone @s you in racetime.gg chat") + ) p = obs.obs_properties_add_path( media_player_group, "chat_ping_sound", - "Chat media file", obs.OBS_PATH_FILE, + _("Chat media file"), obs.OBS_PATH_FILE, "Audio Files (*.mp3 *.aac *.wav *.wma)", None ) obs.obs_properties_add_path( media_player_group, "first_place_sound", - "First Place Sound", obs.OBS_PATH_FILE, + _("First Place Sound"), obs.OBS_PATH_FILE, "Audio Files (*.mp3 *.aac *.wav *.wma)", None ) obs.obs_property_set_long_description( - p, "Sound file to play when you finish first.") + p, _("Sound file to play when you finish first.")) def play_sound(media_path: str, diff --git a/src/scripting/media_trigger_scripting.py b/src/scripting/media_trigger_scripting.py index 1d89749..19ab671 100644 --- a/src/scripting/media_trigger_scripting.py +++ b/src/scripting/media_trigger_scripting.py @@ -1,12 +1,19 @@ +import gettext +import os + import obspython as obs from rtgg_obs import RacetimeObs def media_trigger_settings(props, rtgg_obs: RacetimeObs, index: int): + lang = gettext.translation( + "racetime-obs", localedir=os.environ['LOCALEDIR']) + _ = lang.gettext + media_player_group = obs.obs_properties_create() name = f"media_trigger_#{index}" obs.obs_properties_add_group( - props, name, f"Media Trigger #{index}", + props, name, _("Media Trigger #") + f"{index}", obs.OBS_GROUP_NORMAL, media_player_group ) obs.obs_property_set_visible( @@ -15,26 +22,26 @@ def media_trigger_settings(props, rtgg_obs: RacetimeObs, index: int): ) obs.obs_properties_add_path( media_player_group, f"media_path_#{index}", - "Sound File", obs.OBS_PATH_FILE, + _("Sound File"), obs.OBS_PATH_FILE, "Audio Files (*.mp3 *.aac *.wav *.wma)", None ) p = obs.obs_properties_add_list( - media_player_group, f"trigger_type_#{index}", "Type of Trigger", + media_player_group, f"trigger_type_#{index}", _("Type of Trigger"), obs.OBS_COMBO_TYPE_LIST, obs.OBS_COMBO_FORMAT_STRING) obs.obs_property_list_add_string(p, "", "") - obs.obs_property_list_add_string(p, "Chat", "chat") - obs.obs_property_list_add_string(p, "Finish Place", "finish") - obs.obs_property_list_add_string(p, "Timer", "time") + obs.obs_property_list_add_string(p, _("Chat"), "chat") + obs.obs_property_list_add_string(p, _("Finish Place"), "finish") + obs.obs_property_list_add_string(p, _("Timer"), "time") obs.obs_property_set_modified_callback(p, media_type_changed) p = obs.obs_properties_add_list( - media_player_group, f"monitoring_type_#{index}", "Monitoring Type", + media_player_group, f"monitoring_type_#{index}", _("Monitoring Type"), obs.OBS_COMBO_TYPE_LIST, obs.OBS_COMBO_FORMAT_INT) obs.obs_property_list_add_int( - p, "Only Listen", obs.OBS_MONITORING_TYPE_MONITOR_ONLY) + p, _("Only Listen"), obs.OBS_MONITORING_TYPE_MONITOR_ONLY) obs.obs_property_list_add_int( - p, "Only Stream", obs.OBS_MONITORING_TYPE_NONE) + p, _("Only Stream"), obs.OBS_MONITORING_TYPE_NONE) obs.obs_property_list_add_int( - p, "Listen and Stream", obs.OBS_MONITORING_TYPE_MONITOR_AND_OUTPUT) + p, _("Listen and Stream"), obs.OBS_MONITORING_TYPE_MONITOR_AND_OUTPUT) def media_type_changed(props, prop, settings): @@ -42,25 +49,38 @@ def media_type_changed(props, prop, settings): def chat_media_trigger_settings(props, index: int): - obs.obs_properties_add_bool(props, f"trigger_chat_bot_#{index}", "Bot?") + lang = gettext.translation( + "racetime-obs", localedir=os.environ['LOCALEDIR']) + _ = lang.gettext + + obs.obs_properties_add_bool(props, f"trigger_chat_bot_#{index}", _("Bot?")) obs.obs_properties_add_bool( - props, f"trigger_chat_highlight_#{index}", "Highlighted?") + props, f"trigger_chat_highlight_#{index}", _("Highlighted?")) obs.obs_properties_add_bool( - props, f"trigger_chat_system_#{index}", "System?") + props, f"trigger_chat_system_#{index}", _("System?")) def finish_media_trigger_settings(props, index: int): """ Settings for a media trigger based on what place the entrant finishes """ + lang = gettext.translation( + "racetime-obs", localedir=os.environ['LOCALEDIR']) + _ = lang.gettext + obs.obs_properties_add_int( - props, f"trigger_finish_place_#{index}", "Finish Place <=", 1, 10, 1) + props, f"trigger_finish_place_#{index}", _("Finish Place <="), + 1, 10, 1) obs.obs_properties_add_int( - props, f"trigger_finish_entrants_#{index}", "Num. Entrants >=", + props, f"trigger_finish_entrants_#{index}", _("Num. Entrants >="), 2, 255, 1) def timer_media_trigger_settings(props, index: int): + lang = gettext.translation( + "racetime-obs", localedir=os.environ['LOCALEDIR']) + _ = lang.gettext + obs.obs_properties_add_float_slider( - props, f"trigger_timer_time_#{index}", "Start playing at ", + props, f"trigger_timer_time_#{index}", _("Start playing at "), -15.0, 60, 0.1) diff --git a/src/scripting/qualifier_scripting.py b/src/scripting/qualifier_scripting.py index 3730c78..38af32d 100644 --- a/src/scripting/qualifier_scripting.py +++ b/src/scripting/qualifier_scripting.py @@ -1,17 +1,24 @@ +import gettext +import os + import obspython as obs from rtgg_obs import RacetimeObs from . import fill_source_list def script_qualifier_settings(props, rtgg_obs: RacetimeObs): + lang = gettext.translation( + "racetime-obs", localedir=os.environ['LOCALEDIR']) + _ = lang.gettext + p = obs.obs_properties_add_bool( props, "use_qualifier", - "Display race results as tournament qualifier?" + _("Display race results as tournament qualifier?") ) obs.obs_property_set_modified_callback(p, qualifier_toggled) qualifier_group = obs.obs_properties_create() obs.obs_properties_add_group( - props, "qualifier_group", "Qualifier Mode", + props, "qualifier_group", _("Qualifier Mode"), obs.OBS_GROUP_NORMAL, qualifier_group ) obs.obs_property_set_visible( @@ -20,12 +27,12 @@ def script_qualifier_settings(props, rtgg_obs: RacetimeObs): ) p = obs.obs_properties_add_int_slider( qualifier_group, "qualifier_cutoff", - "Use Top X as par time, where X=", 3, 10, 1 + _("Use Top X as par time, where X="), 3, 10, 1 ) p = obs.obs_properties_add_list( qualifier_group, "qualifier_par_source", - "Qualifier Par Time Source", + _("Qualifier Par Time Source"), obs.OBS_COMBO_TYPE_EDITABLE, obs.OBS_COMBO_FORMAT_STRING ) @@ -33,7 +40,7 @@ def script_qualifier_settings(props, rtgg_obs: RacetimeObs): p = obs.obs_properties_add_list( qualifier_group, "qualifier_score_source", - "Qualifier Score Source", + _("Qualifier Score Source"), obs.OBS_COMBO_TYPE_EDITABLE, obs.OBS_COMBO_FORMAT_STRING ) diff --git a/src/scripting/setup_scripting.py b/src/scripting/setup_scripting.py index 1623c2d..a03329b 100644 --- a/src/scripting/setup_scripting.py +++ b/src/scripting/setup_scripting.py @@ -1,3 +1,7 @@ +import gettext + +import os + import obspython as obs from rtgg_obs import RacetimeObs from scripting import fill_source_list @@ -14,34 +18,41 @@ def script_update_setup_settings(settings, rtgg_obs: RacetimeObs): def script_setup(props, new_race_selected, new_category_selected): + lang = gettext.translation( + "racetime-obs", localedir=os.environ['LOCALEDIR']) + _ = lang.gettext + setup_group = obs.obs_properties_create() obs.obs_properties_add_group( - props, "initial_setup", "Initial setup - Check to make changes", + props, "initial_setup", _("Initial setup - Check to make changes"), obs.OBS_GROUP_CHECKABLE, setup_group ) p = obs.obs_properties_add_list( - setup_group, "source", "Text Source", obs.OBS_COMBO_TYPE_EDITABLE, + setup_group, "source", _("Text Source"), obs.OBS_COMBO_TYPE_EDITABLE, obs.OBS_COMBO_FORMAT_STRING ) fill_source_list(p) obs.obs_properties_add_text( - setup_group, "username", "Username", obs.OBS_TEXT_DEFAULT) + setup_group, "username", _("Username"), obs.OBS_TEXT_DEFAULT) logging = obs.obs_properties_add_bool( - setup_group, "enable_log", "Enable logging") + setup_group, "enable_log", _("Enable logging")) log_levels = obs.obs_properties_add_list( - setup_group, "log_level", "Log lever", obs.OBS_COMBO_TYPE_LIST, + setup_group, "log_level", _("Log level"), obs.OBS_COMBO_TYPE_LIST, obs.OBS_COMBO_FORMAT_STRING ) - obs.obs_property_list_add_string(log_levels, "Error", "Error") - obs.obs_property_list_add_string(log_levels, "Debug", "Debug") - obs.obs_property_list_add_string(log_levels, "Info", "Info") + obs.obs_property_list_add_string(log_levels, _("Error"), "error") + obs.obs_property_list_add_string(log_levels, _("Debug"), "debug") + obs.obs_property_list_add_string(log_levels, _("Info"), "info") obs.obs_property_set_long_description( - logging, "Generally, only log errors unless you are developing or are " - "trying to find a specific problem." + logging, _( + "Generally, only log errors unless you are developing or are " + "trying to find a specific problem.") ) - obs.obs_properties_add_bool(setup_group, "log_to_file", "Log to file?") + obs.obs_properties_add_bool(setup_group, "log_to_file", _("Log to file?")) obs.obs_properties_add_path( - setup_group, "log_file", "Log File", obs.OBS_PATH_FILE_SAVE, "*", None) + setup_group, "log_file", _("Log File"), obs.OBS_PATH_FILE_SAVE, "*", + None + ) preview = obs.obs_properties_add_bool( setup_group, "preview_mode", "Preview Mode") @@ -50,11 +61,11 @@ def script_setup(props, new_race_selected, new_category_selected): "each component's text source to help arrange up your layout.") category_list = obs.obs_properties_add_list( - props, "category_filter", "Filter by Category", + props, "category_filter", _("Filter by Category"), obs.OBS_COMBO_TYPE_LIST, obs.OBS_COMBO_FORMAT_STRING ) race_list = obs.obs_properties_add_list( - props, "race", "Race", + props, "race", _("Race"), obs.OBS_COMBO_TYPE_EDITABLE, obs.OBS_COMBO_FORMAT_STRING ) obs.obs_property_set_modified_callback( @@ -64,5 +75,5 @@ def script_setup(props, new_race_selected, new_category_selected): category_list, new_category_selected) p = obs.obs_properties_add_text( - props, "race_info", "Race Desc", obs.OBS_TEXT_MULTILINE) + props, "race_info", _("Race Desc"), obs.OBS_TEXT_MULTILINE) obs.obs_property_set_enabled(p, False) diff --git a/src/scripting/timer_scripting.py b/src/scripting/timer_scripting.py index e6624b7..6cd02be 100644 --- a/src/scripting/timer_scripting.py +++ b/src/scripting/timer_scripting.py @@ -1,3 +1,6 @@ +import gettext +import os + import obspython as obs from rtgg_obs import RacetimeObs @@ -22,23 +25,28 @@ def script_update_timer_settings( def script_timer_settings(props, rtgg_obs: RacetimeObs): + lang = gettext.translation( + "racetime-obs", localedir=os.environ['LOCALEDIR']) + _ = lang.gettext + p = obs.obs_properties_add_bool( - props, "use_podium", "Use custom color for podium finishes?") + props, "use_podium", _("Use custom color for podium finishes?")) obs.obs_property_set_modified_callback(p, podium_toggled) podium_group = obs.obs_properties_create() obs.obs_properties_add_group( - props, "podium_group", "Podium Colors", + props, "podium_group", _("Podium Colors"), obs.OBS_GROUP_NORMAL, podium_group ) obs.obs_property_set_visible(obs.obs_properties_get( props, "podium_group"), rtgg_obs.timer.use_podium_colors) - obs.obs_properties_add_color(podium_group, "pre_color", "Pre-race:") - obs.obs_properties_add_color(podium_group, "racing_color", "Still racing:") - obs.obs_properties_add_color(podium_group, "first_color", "1st place:") - obs.obs_properties_add_color(podium_group, "second_color", "2nd place:") - obs.obs_properties_add_color(podium_group, "third_color", "3rd place:") + obs.obs_properties_add_color(podium_group, "pre_color", _("Pre-race:")) + obs.obs_properties_add_color( + podium_group, "racing_color", _("Still racing:")) + obs.obs_properties_add_color(podium_group, "first_color", _("1st place:")) + obs.obs_properties_add_color(podium_group, "second_color", _("2nd place:")) + obs.obs_properties_add_color(podium_group, "third_color", _("3rd place:")) obs.obs_properties_add_color( - podium_group, "finished_color", "After podium:") + podium_group, "finished_color", _("After podium:")) def podium_toggled(props, prop, settings):