From 5a2068f50544363f1f3f6bf7654545ed366a9dde Mon Sep 17 00:00:00 2001
From: Alwin Esch <alwin.esch@web.de>
Date: Mon, 27 Dec 2021 07:59:07 +0100
Subject: [PATCH 1/3] sync translations with Matrix version

---
 visualization.shadertoy/addon.xml.in          |  4 +
 .../resource.language.da_dk/strings.po        | 55 ++++++++++----
 .../resource.language.de_de/strings.po        | 51 ++++++++++---
 .../resource.language.zh_cn/strings.po        | 76 +++++++++----------
 4 files changed, 124 insertions(+), 62 deletions(-)

diff --git a/visualization.shadertoy/addon.xml.in b/visualization.shadertoy/addon.xml.in
index 826ec49..cd94fe0 100644
--- a/visualization.shadertoy/addon.xml.in
+++ b/visualization.shadertoy/addon.xml.in
@@ -26,9 +26,13 @@
       <screenshot>resources/screenshot-05.jpg</screenshot>
       <screenshot>resources/screenshot-06.jpg</screenshot>
     </assets>
+    <summary lang="da_DK">Visualiseringer fra Shadertoy</summary>
     <summary lang="de_DE">Visualisierungen von Shadertoy</summary>
     <summary lang="en_GB">Visualizations from Shadertoy</summary>
+    <summary lang="zh_CN">来自ShaderToy的可视化效果</summary>
+    <description lang="da_DK">Denne musikvisualisering er baseret på Shadertoy-baserede GPU-programmer.</description>
     <description lang="de_DE">Diese Musikvisualisierung basiert auf Shadertoy-basierten GPU-Programmen.</description>
     <description lang="en_GB">This music visualization is based on Shadertoy based GPU programs.</description>
+    <description lang="zh_CN">次音乐可视化是基于基于Shadertoy的GPU程序。</description>
   </extension>
 </addon>
diff --git a/visualization.shadertoy/resources/language/resource.language.da_dk/strings.po b/visualization.shadertoy/resources/language/resource.language.da_dk/strings.po
index 21458d6..1be1bf7 100644
--- a/visualization.shadertoy/resources/language/resource.language.da_dk/strings.po
+++ b/visualization.shadertoy/resources/language/resource.language.da_dk/strings.po
@@ -5,9 +5,9 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: KODI Addons\n"
-"Report-Msgid-Bugs-To: https://github.com/xbmc/visualization.shadertoy/issues\n"
+"Report-Msgid-Bugs-To: translations@kodi.tv\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: 2021-08-04 13:29+0000\n"
+"PO-Revision-Date: 2021-12-08 12:13+0000\n"
 "Last-Translator: Christian Gade <gade@kodi.tv>\n"
 "Language-Team: Danish <https://kodi.weblate.cloud/projects/kodi-add-ons-look-and-feel/visualization-shadertoy/da_dk/>\n"
 "Language: da_dk\n"
@@ -15,15 +15,15 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.7.2\n"
+"X-Generator: Weblate 4.9.1\n"
 
 msgctxt "Addon Summary"
 msgid "Visualizations from Shadertoy"
-msgstr ""
+msgstr "Visualiseringer fra Shadertoy"
 
 msgctxt "Addon Description"
 msgid "This music visualization is based on Shadertoy based GPU programs."
-msgstr ""
+msgstr "Denne musikvisualisering er baseret på Shadertoy-baserede GPU-programmer."
 
 #. Settings category
 msgctxt "#30000"
@@ -153,42 +153,42 @@ msgstr "Kanal 3 som *.png"
 #. Header text shown on notification dialog and on file selection dialog
 msgctxt "#30030"
 msgid "Shadertoy Visualization"
-msgstr ""
+msgstr "Shadertoy Visualisering"
 
 #. Notification message shown on the screen when an incorrect preset list is given
 msgctxt "#30031"
 msgid "Cannot read the JSON file. Please check the formatting is correct and the file is available."
-msgstr ""
+msgstr "Kan ikke læse JSON-filen. Kontroller at formateringen er korrekt, og at filen er tilgængelig."
 
 #. Settings value to open dialog for file selection
 msgctxt "#30032"
 msgid "Path to custom preset list"
-msgstr ""
+msgstr "Sti til brugerdefineret liste med forudindstillinger"
 
 #. Help text related to setting string with id 30032
 msgctxt "#30033"
 msgid "Set the path to your custom JSON-formatted preset file. If no path is configured, the add-on will use the default preset file."
-msgstr ""
+msgstr "Indstil stien til din brugerdefinerede JSON-formaterede fil med forudindstillinger. Hvis der ikke er konfigureret nogen sti, bruger add-on'et standardfilen med forudindstillinger."
 
 #. Settings group name
 msgctxt "#30034"
 msgid "Configure a single shader"
-msgstr ""
+msgstr "Konfigurer en enkelt shader"
 
 #. Settings value to open a dialog for showing help about the preset file
 msgctxt "#30035"
 msgid "Show help about preset file"
-msgstr ""
+msgstr "Vis hjælp til den forudindstillede fil"
 
 #. Help text related to setting string with id 30035
 msgctxt "#30036"
 msgid "Open to read about creating the JSON-formatted preset file."
-msgstr ""
+msgstr "Åben for at læse om oprettelse af den JSON-formaterede forudindstillede fil."
 
 #. Header text on the help dialog within settings, related to the help text of string ID 30038
 msgctxt "#30037"
 msgid "Help about defining your own shaders in the JSON file"
-msgstr ""
+msgstr "Hjælp til at definere dine egne shaders i JSON-filen"
 
 #. Help text about showing the JSON-formatted preset file in a text window.
 #. Same text also on visualization.shadertoy/resources/presets.json.md, for here
@@ -225,3 +225,32 @@ msgid ""
 "[ [COLOR red]\"Fractal Land by Kali\"[/COLOR], [COLOR red]\"fractalland.frag.glsl\"[/COLOR], [COLOR red]\"tex02.png\"[/COLOR], [COLOR red]\"tex15.png\"[/COLOR], [COLOR red]\"audio\"[/COLOR], [COLOR red]\"\"[/COLOR] ]\n"
 "][COLOR green]}[/COLOR][/COLOR]"
 msgstr ""
+"[B][I]JSON-fil til brugerdefinerede shaderlister[/I][/B]\n"
+"\n"
+"Filen [B]presets.json[/B] bruges til at præcisere brugerdefinerede shadere.\n"
+"En brugerdefineret sti til shaderfilerne (GLSL) kan indtastes i indstillinger for dette add-on.\n"
+"\n"
+"Indholdet i [B]presets.json[/B] skal være:\n"
+"[I]  1.[/I] Navn på forudindstilling. Enten direkte indtastet navn eller defineret i [I]resources/language/.../strings.po[/I]\n"
+"[I]  2.[/I] GLSL shader der bruges. Hvis ingen brugerdefineret sti er indtastet, bruges standarden [B]resources/[/B]. Indstil brugerdefineret sti til './' for at bruge shaders fra samme stil som din [B]presets.json[/B]-fil.\n"
+"[I]  3.[/I] Kanalværdi value 0. Definerer den brugte tekstur (f.eks.. PNG-fil). Det kan også indstilles til \"audio\" for at sende relateret streamdata til teksturen. PNG- og GLSL-filerne skal placeres i samme mappe.\n"
+"[I]  4.[/I] Defination af kanalværdi 1.\n"
+"[I]  5.[/I] Defination af kanalværdi 2.\n"
+"[I]  6.[/I] Defination af kanalværdi 3.\n"
+"[I]  7.[/I] [I][Valgfri][/I] tilføj teksten [B]\"gl_only\"[/B] for kun at gøre denne forudindstilling tilgængelig for OpenGL.\n"
+"\n"
+"[B]Eksempel:[/B]\n"
+"[COLOR white][COLOR green]{[/COLOR] [COLOR blue]\"forudindstillinger\"[/COLOR]:[\n"
+"[COLOR gray]/* Standard metode brugt af selve add-on'et */[/COLOR]\n"
+"[ [COLOR red]\"The Disco Tunnel af poljere\"[/COLOR], [COLOR red]\"discotunnel.frag.glsl\"[/COLOR], [COLOR red]\"tex02.png\"[/COLOR], [COLOR red]\"tex15.png\"[/COLOR], [COLOR red]\"audio\"[/COLOR], [COLOR red]\"\"[/COLOR] ],\n"
+"[COLOR gray]/* Beskrivelse defineret i strings.po */[/COLOR]\n"
+"[ 30100, [COLOR red]\"audioeclipse.frag.glsl\"[/COLOR], [COLOR red]\"audio\"[/COLOR], [COLOR red]\"\"[/COLOR], [COLOR red]\"\"[/COLOR], [COLOR red]\"\"[/COLOR] ],\n"
+"[COLOR gray]/* Præciser brugerdefinerede filstier */[/COLOR]\n"
+"[ [COLOR red]\"Min egen\"[/COLOR], [COLOR red]\"/sti/til/glsl/min.frag.glsl\"[/COLOR], [COLOR red]\"audio\"[/COLOR], [COLOR red]\"/sti/til/png-filer/mit_billede.png\"[/COLOR], [COLOR red]\"\"[/COLOR], [COLOR red]\"\"[/COLOR] ],\n"
+"[COLOR gray]/* >Forudindstilling kun tilgængelig for OpenGL (se 7) */[/COLOR]\n"
+"[ [COLOR red]\"Polar Beats af sauj123\"[/COLOR], [COLOR red]\"polarbeats.frag.glsl\"[/COLOR], [COLOR red]\"audio\"[/COLOR], [COLOR red]\"\"[/COLOR], [COLOR red]\"\"[/COLOR], [COLOR red]\"\"[/COLOR], [COLOR red]\"gl_only\"[/COLOR] ],\n"
+"[COLOR gray]/* GLSL- og PNG-filer er i samme mappe som presets.json */[/COLOR]\n"
+"[ [COLOR red]\"En mere\"[/COLOR], [COLOR red]\"./another.frag.glsl\"[/COLOR], [COLOR red]\"./min_01.png\"[/COLOR], [COLOR red]\"./min_02.png\"[/COLOR], [COLOR red]\"audio\"[/COLOR], [COLOR red]\"\"[/COLOR] ],\n"
+"[COLOR gray]/* Vælg teksturbillede efter filnavn, brug standard \"resources/\"-mappe */[/COLOR]\n"
+"[ [COLOR red]\"Fractal Land af Kali\"[/COLOR], [COLOR red]\"fractalland.frag.glsl\"[/COLOR], [COLOR red]\"tex02.png\"[/COLOR], [COLOR red]\"tex15.png\"[/COLOR], [COLOR red]\"audio\"[/COLOR], [COLOR red]\"\"[/COLOR] ]\n"
+"][COLOR green]}[/COLOR][/COLOR]"
diff --git a/visualization.shadertoy/resources/language/resource.language.de_de/strings.po b/visualization.shadertoy/resources/language/resource.language.de_de/strings.po
index 57d283d..be6152b 100644
--- a/visualization.shadertoy/resources/language/resource.language.de_de/strings.po
+++ b/visualization.shadertoy/resources/language/resource.language.de_de/strings.po
@@ -5,9 +5,9 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: KODI Addons\n"
-"Report-Msgid-Bugs-To: https://github.com/xbmc/visualization.shadertoy/issues\n"
+"Report-Msgid-Bugs-To: translations@kodi.tv\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: 2021-07-26 17:33+0000\n"
+"PO-Revision-Date: 2021-10-03 10:01+0000\n"
 "Last-Translator: Kai Sommerfeld <kai.sommerfeld@gmx.com>\n"
 "Language-Team: German <https://kodi.weblate.cloud/projects/kodi-add-ons-look-and-feel/visualization-shadertoy/de_de/>\n"
 "Language: de_de\n"
@@ -15,7 +15,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.7.2\n"
+"X-Generator: Weblate 4.8\n"
 
 msgctxt "Addon Summary"
 msgid "Visualizations from Shadertoy"
@@ -153,42 +153,42 @@ msgstr "Kanal 3 als *.png"
 #. Header text shown on notification dialog and on file selection dialog
 msgctxt "#30030"
 msgid "Shadertoy Visualization"
-msgstr ""
+msgstr "Shadertoy-Visualisierung"
 
 #. Notification message shown on the screen when an incorrect preset list is given
 msgctxt "#30031"
 msgid "Cannot read the JSON file. Please check the formatting is correct and the file is available."
-msgstr ""
+msgstr "JSON-Datei kann nicht gelesen werden. Bitte prüfen, ob die Formatierung korrekt und dass die Datei verfügabr ist."
 
 #. Settings value to open dialog for file selection
 msgctxt "#30032"
 msgid "Path to custom preset list"
-msgstr ""
+msgstr "Pfad zur benutzerdefinierten Voreinstellungsliste"
 
 #. Help text related to setting string with id 30032
 msgctxt "#30033"
 msgid "Set the path to your custom JSON-formatted preset file. If no path is configured, the add-on will use the default preset file."
-msgstr ""
+msgstr "Pfad für eine benutzerdefinierte JSON-formatierte Voreinstellungsdatei. Wenn kein Pfad konfiguriert ist, wird das Addon die Standard-Voreinstellungsdatei verwenden."
 
 #. Settings group name
 msgctxt "#30034"
 msgid "Configure a single shader"
-msgstr ""
+msgstr "Einen einzelnen Shader konfigurieren"
 
 #. Settings value to open a dialog for showing help about the preset file
 msgctxt "#30035"
 msgid "Show help about preset file"
-msgstr ""
+msgstr "Hilfe zu Voreinstellungsdatei anzeigen"
 
 #. Help text related to setting string with id 30035
 msgctxt "#30036"
 msgid "Open to read about creating the JSON-formatted preset file."
-msgstr ""
+msgstr "Öffnen, um mehr über die Erstellung der JSON-formatierten Voreinstellungsdatei zu erfahren."
 
 #. Header text on the help dialog within settings, related to the help text of string ID 30038
 msgctxt "#30037"
 msgid "Help about defining your own shaders in the JSON file"
-msgstr ""
+msgstr "Hilfe zur Definition eines benutzerdefinierten Shaders in der JSON-Datei"
 
 #. Help text about showing the JSON-formatted preset file in a text window.
 #. Same text also on visualization.shadertoy/resources/presets.json.md, for here
@@ -225,3 +225,32 @@ msgid ""
 "[ [COLOR red]\"Fractal Land by Kali\"[/COLOR], [COLOR red]\"fractalland.frag.glsl\"[/COLOR], [COLOR red]\"tex02.png\"[/COLOR], [COLOR red]\"tex15.png\"[/COLOR], [COLOR red]\"audio\"[/COLOR], [COLOR red]\"\"[/COLOR] ]\n"
 "][COLOR green]}[/COLOR][/COLOR]"
 msgstr ""
+"[B][I]JSON-Datei für benutzerdefinierte Shader-Listen[/I][/B]\n"
+"\n"
+"Benutzerdefinierte Shader werden in der Datei [B]presets.json[/B] definiert.\n"
+"In den Addon-Einstellungen kann ein benutzdefinierter Pfad für Shader-Dateien (GLSL) hinterlegt werden.\n"
+"\n"
+"Inhalt von  [B]presets.json[/B] sollte sein:\n"
+"[I]  1.[/I] Name der Voreinstellung. Entweder fixe Zeichenkette oder definiert in [I]resources/language/.../strings.po[/I]\n"
+"[I]  2.[/I] Zu verwendender GLSL-Shader. Wenn kein benutzerdefinierter Pfad festgelegt ist, wird standardmässig [B]resources/[/B] verwendet. Benutzerdefinierten Pfad auf ‚./‘ setzen, um Shader aus dem Pfad zu nutzen, in dem die Datei [B]presets.json[/B] sich befindet.\n"
+"[I]  3.[/I] Kanalwert 0. Legt die zu nutzende Textur fest (e.g. PNG file). Kann auch auf „audio“ gesetzt werden, um in der Textur enthaltene Stream-Daten weiterzugeben. Die PNG- und GLSL-Dateien sollten sich im gleichen Verzeichnis befinden.\n"
+"[I]  4.[/I] Definition für Kanalwert 1.\n"
+"[I]  5.[/I] Definition für Kanalwert 2.\n"
+"[I]  6.[/I] Definition für Kanalwert 3.\n"
+"[I]  7.[/I] [I][Optional][/I] die Zeichenkette  [B]„gl_only“[/B] anhängen, um diese Voreinstellung nur für OpenGL zu nutzen.\n"
+"\n"
+"[B]Beispiel:[/B]\n"
+"[COLOR white][COLOR green]{[/COLOR] [COLOR blue]\"presets\"[/COLOR]:[\n"
+"[COLOR gray]/* Default way used by the addon itself */[/COLOR]\n"
+"[ [COLOR red]\"The Disco Tunnel by poljere\"[/COLOR],  [COLOR red]\"discotunnel.frag.glsl\"[/COLOR], [COLOR red]\"tex02.png\"[/COLOR], [COLOR red]\"tex15.png\"[/COLOR], [COLOR red]\"audio\"[/COLOR], [COLOR red]\"\"[/COLOR] ],\n"
+"[COLOR gray]/* Description defined in strings.po */[/COLOR]\n"
+"[ 30100, [COLOR red]\"audioeclipse.frag.glsl\"[/COLOR], [COLOR red]\"audio\"[/COLOR], [COLOR red]\"\"[/COLOR], [COLOR red]\"\"[/COLOR], [COLOR red]\"\"[/COLOR] ],\n"
+"[COLOR gray]/* Define custom file paths */[/COLOR]\n"
+"[ [COLOR red]\"My own one\"[/COLOR], [COLOR red]\"/path/to/glsl/my.frag.glsl\"[/COLOR], [COLOR red]\"audio\"[/COLOR], [COLOR red]\"/path/to/pngs/my_image.png\"[/COLOR], [COLOR red]\"\"[/COLOR], [COLOR red]\"\"[/COLOR] ],\n"
+"[COLOR gray]/* Preset only available to OpenGL (see 7)  */[/COLOR]\n"
+"[ [COLOR red]\"Polar Beats by sauj123\"[/COLOR], [COLOR red]\"polarbeats.frag.glsl\"[/COLOR], [COLOR red]\"audio\"[/COLOR], [COLOR red]\"\"[/COLOR], [COLOR red]\"\"[/COLOR], [COLOR red]\"\"[/COLOR], [COLOR red]\"gl_only\"[/COLOR] ],\n"
+"[COLOR gray]/* GLSL and PNG files are in the same folder as presets.json */[/COLOR]\n"
+"[ [COLOR red]\"Another one\"[/COLOR], [COLOR red]\"./another.frag.glsl\"[/COLOR], [COLOR red]\"./my_01.png\"[/COLOR], [COLOR red]\"./my_02.png\"[/COLOR], [COLOR red]\"audio\"[/COLOR], [COLOR red]\"\"[/COLOR] ],\n"
+"[COLOR gray]/* Select texture image by file name, use default \"resources/\" dir */[/COLOR]\n"
+"[ [COLOR red]\"Fractal Land by Kali\"[/COLOR], [COLOR red]\"fractalland.frag.glsl\"[/COLOR], [COLOR red]\"tex02.png\"[/COLOR], [COLOR red]\"tex15.png\"[/COLOR], [COLOR red]\"audio\"[/COLOR], [COLOR red]\"\"[/COLOR] ]\n"
+"][COLOR green]}[/COLOR][/COLOR]"
diff --git a/visualization.shadertoy/resources/language/resource.language.zh_cn/strings.po b/visualization.shadertoy/resources/language/resource.language.zh_cn/strings.po
index e87dae9..2c2145b 100644
--- a/visualization.shadertoy/resources/language/resource.language.zh_cn/strings.po
+++ b/visualization.shadertoy/resources/language/resource.language.zh_cn/strings.po
@@ -5,25 +5,25 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: KODI Addons\n"
-"Report-Msgid-Bugs-To: https://github.com/xbmc/visualization.shadertoy/issues\n"
+"Report-Msgid-Bugs-To: translations@kodi.tv\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: 2021-09-12 21:39+0000\n"
-"Last-Translator: taxigps <taxigps@sina.com>\n"
+"PO-Revision-Date: 2021-11-04 08:45+0000\n"
+"Last-Translator: 撷星芒 <mofa2020@qq.com>\n"
 "Language-Team: Chinese (China) <https://kodi.weblate.cloud/projects/kodi-add-ons-look-and-feel/visualization-shadertoy/zh_cn/>\n"
 "Language: zh_cn\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.8\n"
+"X-Generator: Weblate 4.8.1\n"
 
 msgctxt "Addon Summary"
 msgid "Visualizations from Shadertoy"
-msgstr ""
+msgstr "来自ShaderToy的可视化效果"
 
 msgctxt "Addon Description"
 msgid "This music visualization is based on Shadertoy based GPU programs."
-msgstr ""
+msgstr "次音乐可视化是基于基于Shadertoy的GPU程序。"
 
 #. Settings category
 msgctxt "#30000"
@@ -33,162 +33,162 @@ msgstr "常规"
 #. Settings category
 msgctxt "#30001"
 msgid "iChannel 0"
-msgstr ""
+msgstr "iChannel 0"
 
 #. Settings category
 msgctxt "#30002"
 msgid "iChannel 1"
-msgstr ""
+msgstr "iChannel 1"
 
 #. Settings category
 msgctxt "#30003"
 msgid "iChannel 2"
-msgstr ""
+msgstr "iChannel 2"
 
 #. Settings category
 msgctxt "#30004"
 msgid "iChannel 3"
-msgstr ""
+msgstr "iChannel 3"
 
 #. Boolean settings value to enable and allow selection of a ".glsl" file and related textures
 msgctxt "#30010"
 msgid "Choose one yourself"
-msgstr ""
+msgstr "自己选一个"
 
 #. Help text related to setting string with id 30010
 msgctxt "#30011"
 msgid "Use your own shadertoy. Attention: Some shaders are not supported by some GPU's in performance!"
-msgstr ""
+msgstr "使用自己的shadertoy。注意:一些GPU在性能中不支持一些着色器!"
 
 #. To open the file selection dialog about *.glsl files, if the setting "Choose one yourself"(30010) above is enabled.
 msgctxt "#30012"
 msgid "Shadertoy file"
-msgstr ""
+msgstr "Shadertoy文件"
 
 #. Help text related to setting string with id 30012
 msgctxt "#30013"
 msgid "Shader as *.glsl"
-msgstr ""
+msgstr "着色器为 *.glsl"
 
 #. Boolean value to use channel 0 as audio, if the setting "Choose one yourself"(30010) above is enabled.
 msgctxt "#30014"
 msgid "Channel 0 as audio"
-msgstr ""
+msgstr "通道0为音频"
 
 #. Help text related to setting string with id 30014
 msgctxt "#30015"
 msgid "Use audio stream data on channel 0"
-msgstr ""
+msgstr "在通道0上使用音频流数据"
 
 #. Texture image to use, if the setting "Choose one yourself"(30010) above is enabled.
 msgctxt "#30016"
 msgid "Channel 0 texture image"
-msgstr ""
+msgstr "通道0纹理图像"
 
 #. Help text related to setting string with id 30016
 msgctxt "#30017"
 msgid "Channel 0 as *.png"
-msgstr ""
+msgstr "通道0为* .png"
 
 #. Boolean value to use channel 1 as audio, if the setting "Choose one yourself"(30010) above is enabled.
 msgctxt "#30018"
 msgid "Channel 1 as audio"
-msgstr ""
+msgstr "通道1作为音频"
 
 #. Help text related to setting string with id 30018
 msgctxt "#30019"
 msgid "Use audio stream data on channel 1"
-msgstr ""
+msgstr "在通道1上使用音频流数据"
 
 #. Texture image to use, if the setting "Choose one yourself"(30010) above is enabled.
 msgctxt "#30020"
 msgid "Channel 1 texture image"
-msgstr ""
+msgstr "通道1纹理图像"
 
 #. Help text related to setting string with id 30020
 msgctxt "#30021"
 msgid "Channel 1 as *.png"
-msgstr ""
+msgstr "通道1为* .png"
 
 #. Boolean value to use channel 2 as audio, if the setting "Choose one yourself"(30010) above is enabled.
 msgctxt "#30022"
 msgid "Channel 2 as audio"
-msgstr ""
+msgstr "通道2作为音频"
 
 #. Help text related to setting string with id 30022
 msgctxt "#30023"
 msgid "Use audio stream data on channel 2"
-msgstr ""
+msgstr "在通道2上使用音频流数据"
 
 #. Texture image to use, if the setting "Choose one yourself"(30010) above is enabled.
 msgctxt "#30024"
 msgid "Channel 2 texture image"
-msgstr ""
+msgstr "通道2纹理图像"
 
 #. Help text related to setting string with id 30024
 msgctxt "#30025"
 msgid "Channel 2 as *.png"
-msgstr ""
+msgstr "通道2为* .png"
 
 #. Boolean value to use channel 3 as audio, if the setting "Choose one yourself"(30010) above is enabled.
 msgctxt "#30026"
 msgid "Channel 3 as audio"
-msgstr ""
+msgstr "通道3作为音频"
 
 #. Help text related to setting string with id 30026
 msgctxt "#30027"
 msgid "Use audio stream data on channel 3"
-msgstr ""
+msgstr "在通道3上使用音频流数据"
 
 #. Texture image to use, if the setting "Choose one yourself"(30010) above is enabled.
 msgctxt "#30028"
 msgid "Channel 3 texture image"
-msgstr ""
+msgstr "通道3纹理图像"
 
 #. Help text related to setting string with id 30028
 msgctxt "#30029"
 msgid "Channel 3 as *.png"
-msgstr ""
+msgstr "通道3为* .png"
 
 #. Header text shown on notification dialog and on file selection dialog
 msgctxt "#30030"
 msgid "Shadertoy Visualization"
-msgstr ""
+msgstr "Shadertoy可视化"
 
 #. Notification message shown on the screen when an incorrect preset list is given
 msgctxt "#30031"
 msgid "Cannot read the JSON file. Please check the formatting is correct and the file is available."
-msgstr ""
+msgstr "无法读取JSON文件。请检查格式是否正确,文件是否可用。"
 
 #. Settings value to open dialog for file selection
 msgctxt "#30032"
 msgid "Path to custom preset list"
-msgstr ""
+msgstr "定制预设列表的路径"
 
 #. Help text related to setting string with id 30032
 msgctxt "#30033"
 msgid "Set the path to your custom JSON-formatted preset file. If no path is configured, the add-on will use the default preset file."
-msgstr ""
+msgstr "设置自定义JSON格式预设文件的路径。如果未配置路径,加载项将使用默认预设文件。"
 
 #. Settings group name
 msgctxt "#30034"
 msgid "Configure a single shader"
-msgstr ""
+msgstr "配置单个着色器"
 
 #. Settings value to open a dialog for showing help about the preset file
 msgctxt "#30035"
 msgid "Show help about preset file"
-msgstr ""
+msgstr "显示有关预设文件的帮助"
 
 #. Help text related to setting string with id 30035
 msgctxt "#30036"
 msgid "Open to read about creating the JSON-formatted preset file."
-msgstr ""
+msgstr "打开阅读关于创建JSON格式预设文件的帮助。"
 
 #. Header text on the help dialog within settings, related to the help text of string ID 30038
 msgctxt "#30037"
 msgid "Help about defining your own shaders in the JSON file"
-msgstr ""
+msgstr "关于在JSON文件中定义自己的着色器的帮助"
 
 #. Help text about showing the JSON-formatted preset file in a text window.
 #. Same text also on visualization.shadertoy/resources/presets.json.md, for here

From d6a37aa2ea1f45623ec482bf042b03c55ed3f970 Mon Sep 17 00:00:00 2001
From: Alwin Esch <alwin.esch@web.de>
Date: Mon, 27 Dec 2021 08:29:58 +0100
Subject: [PATCH 2/3] API related update

---
 src/PresetsLoader.cpp | 12 +++++------
 src/main.cpp          | 48 +++++++++++++++++++++----------------------
 src/main.h            |  2 +-
 3 files changed, 31 insertions(+), 31 deletions(-)

diff --git a/src/PresetsLoader.cpp b/src/PresetsLoader.cpp
index 21727ac..b8b9f12 100644
--- a/src/PresetsLoader.cpp
+++ b/src/PresetsLoader.cpp
@@ -75,8 +75,8 @@ bool CPresetLoader::Load(const std::string& path)
         if (entry[0].isString())
           preset.name = entry[0].asString();
         else
-          preset.name = kodi::GetLocalizedString(entry[0].asInt(), "Unknown preset name " +
-                                                                       std::to_string(index + 1));
+          preset.name = kodi::addon::GetLocalizedString(entry[0].asInt(), "Unknown preset name " +
+                                                                            std::to_string(index + 1));
 
         // Check shader file included within addon or outside and set by user
         const std::string usedDirName = kodi::vfs::GetDirectoryName(entry[1].asString());
@@ -88,7 +88,7 @@ bool CPresetLoader::Load(const std::string& path)
         else if (!usedDirName.empty())
           preset.file = entry[1].asString();
         else
-          preset.file = kodi::GetAddonPath("resources/shaders/" + entry[1].asString());
+          preset.file = kodi::addon::GetAddonPath("resources/shaders/" + entry[1].asString());
 
         if (!kodi::vfs::FileExists(preset.file))
           throw kodi::tools::StringUtils::Format("On %s defined GLSL shader file '%s' not found",
@@ -108,7 +108,7 @@ bool CPresetLoader::Load(const std::string& path)
           else if (!usedDirName.empty())
             preset.channel[i] = entry[i + 2].asString();
           else if (!entry[i + 2].asString().empty())
-            preset.channel[i] = kodi::GetAddonPath("resources/" + entry[i + 2].asString());
+            preset.channel[i] = kodi::addon::GetAddonPath("resources/" + entry[i + 2].asString());
 
           if (!preset.channel[i].empty() && preset.channel[i] != "audio")
           {
@@ -151,8 +151,8 @@ bool CPresetLoader::Load(const std::string& path)
 
   // Inform user that maybe their own preset list is wrong
   if (!ret)
-    kodi::QueueNotification(QUEUE_OWN_STYLE, kodi::GetLocalizedString(30030),
-                            kodi::GetLocalizedString(30031), "", 5000, true, 20000);
+    kodi::QueueNotification(QUEUE_OWN_STYLE, kodi::addon::GetLocalizedString(30030),
+                            kodi::addon::GetLocalizedString(30031), "", 5000, true, 20000);
 
   return ret;
 }
diff --git a/src/main.cpp b/src/main.cpp
index efef80f..4de916e 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -118,22 +118,22 @@ CVisualizationShadertoy::CVisualizationShadertoy()
     m_magnitudeBuffer(new float[NUM_BANDS]()),
     m_pcm(new float[AUDIO_BUFFER]())
 {
-  m_settingsUseOwnshader = kodi::GetSettingBoolean("ownshader");
+  m_settingsUseOwnshader = kodi::addon::GetSettingBoolean("ownshader");
   if (m_settingsUseOwnshader)
     m_currentPreset = -1;
   else
-    m_currentPreset = kodi::GetSettingInt("lastpresetidx");
+    m_currentPreset = kodi::addon::GetSettingInt("lastpresetidx");
 
-  m_presetsJSONFile = kodi::GetSettingString("presetfile");
+  m_presetsJSONFile = kodi::addon::GetSettingString("presetfile");
   if (m_presetsJSONFile.empty() || !kodi::vfs::FileExists(m_presetsJSONFile))
-    m_presetsJSONFile = kodi::GetAddonPath("resources/presets.json");
+    m_presetsJSONFile = kodi::addon::GetAddonPath("resources/presets.json");
 
   /* In case of preset file change, set current selected preset to 0 */
-  if (kodi::GetSettingString("lastpresetfile") != m_presetsJSONFile)
+  if (kodi::addon::GetSettingString("lastpresetfile") != m_presetsJSONFile)
   {
     m_currentPreset = 0;
-    kodi::SetSettingInt("lastpresetidx", m_currentPreset);
-    kodi::SetSettingString("lastpresetfile", m_presetsJSONFile);
+    kodi::addon::SetSettingInt("lastpresetidx", m_currentPreset);
+    kodi::addon::SetSettingString("lastpresetfile", m_presetsJSONFile);
   }
 
   m_presets.Load(m_presetsJSONFile);
@@ -251,7 +251,7 @@ bool CVisualizationShadertoy::NextPreset()
   {
     m_currentPreset = (m_currentPreset + 1) % m_presets.GetPresetsAmount();
     Launch(m_currentPreset);
-    kodi::SetSettingInt("lastpresetidx", m_currentPreset);
+    kodi::addon::SetSettingInt("lastpresetidx", m_currentPreset);
   }
   return true;
 }
@@ -262,7 +262,7 @@ bool CVisualizationShadertoy::PrevPreset()
   {
     m_currentPreset = (m_currentPreset - 1) % m_presets.GetPresetsAmount();
     Launch(m_currentPreset);
-    kodi::SetSettingInt("lastpresetidx", m_currentPreset);
+    kodi::addon::SetSettingInt("lastpresetidx", m_currentPreset);
   }
   return true;
 }
@@ -273,7 +273,7 @@ bool CVisualizationShadertoy::LoadPreset(int select)
   {
     m_currentPreset = select % m_presets.GetPresetsAmount();
     Launch(m_currentPreset);
-    kodi::SetSettingInt("lastpresetidx", m_currentPreset);
+    kodi::addon::SetSettingInt("lastpresetidx", m_currentPreset);
   }
   return true;
 }
@@ -284,7 +284,7 @@ bool CVisualizationShadertoy::RandomPreset()
   {
     m_currentPreset = (int)((std::rand() / (float)RAND_MAX) * m_presets.GetPresetsAmount());
     Launch(m_currentPreset);
-    kodi::SetSettingInt("lastpresetidx", m_currentPreset);
+    kodi::addon::SetSettingInt("lastpresetidx", m_currentPreset);
   }
   return true;
 }
@@ -438,15 +438,15 @@ void CVisualizationShadertoy::Launch(int preset)
 
   if (preset < 0)
   {
-    m_usedShaderFile = kodi::GetSettingString("shader");
-    m_shaderTextures[0].audio = kodi::GetSettingBoolean("texture0-sound");
-    m_shaderTextures[0].texture = kodi::GetSettingString("texture0");
-    m_shaderTextures[1].audio = kodi::GetSettingBoolean("texture1-sound");
-    m_shaderTextures[1].texture = kodi::GetSettingString("texture1");
-    m_shaderTextures[2].audio = kodi::GetSettingBoolean("texture2-sound");
-    m_shaderTextures[2].texture = kodi::GetSettingString("texture2");
-    m_shaderTextures[3].audio = kodi::GetSettingBoolean("texture3-sound");
-    m_shaderTextures[3].texture = kodi::GetSettingString("texture3");
+    m_usedShaderFile = kodi::addon::GetSettingString("shader");
+    m_shaderTextures[0].audio = kodi::addon::GetSettingBoolean("texture0-sound");
+    m_shaderTextures[0].texture = kodi::addon::GetSettingString("texture0");
+    m_shaderTextures[1].audio = kodi::addon::GetSettingBoolean("texture1-sound");
+    m_shaderTextures[1].texture = kodi::addon::GetSettingString("texture1");
+    m_shaderTextures[2].audio = kodi::addon::GetSettingBoolean("texture2-sound");
+    m_shaderTextures[2].texture = kodi::addon::GetSettingString("texture2");
+    m_shaderTextures[3].audio = kodi::addon::GetSettingBoolean("texture3-sound");
+    m_shaderTextures[3].texture = kodi::addon::GetSettingString("texture3");
   }
   else
   {
@@ -525,7 +525,7 @@ void CVisualizationShadertoy::UnloadTextures()
 void CVisualizationShadertoy::LoadPreset(const std::string& shaderPath)
 {
   UnloadPreset();
-  std::string vertShadertoyShader = kodi::GetAddonPath("resources/shaders/main_shadertoy_" GL_TYPE_STRING ".vert.glsl");
+  std::string vertShadertoyShader = kodi::addon::GetAddonPath("resources/shaders/main_shadertoy_" GL_TYPE_STRING ".vert.glsl");
   if (!m_shadertoyShader.LoadShaderFiles(vertShadertoyShader, shaderPath) ||
       !m_shadertoyShader.CompileAndLink("", "", fsHeader, fsFooter))
   {
@@ -550,8 +550,8 @@ void CVisualizationShadertoy::LoadPreset(const std::string& shaderPath)
   m_state.uScale = glGetUniformLocation(shadertoyShader, "uScale");
   m_state.attr_vertex_e = glGetAttribLocation(shadertoyShader,  "vertex");
 
-  std::string vertShader = kodi::GetAddonPath("resources/shaders/main_display_" GL_TYPE_STRING ".vert.glsl");
-  std::string fraqShader = kodi::GetAddonPath("resources/shaders/main_display_" GL_TYPE_STRING ".frag.glsl");
+  std::string vertShader = kodi::addon::GetAddonPath("resources/shaders/main_display_" GL_TYPE_STRING ".vert.glsl");
+  std::string fraqShader = kodi::addon::GetAddonPath("resources/shaders/main_display_" GL_TYPE_STRING ".frag.glsl");
   if (!m_displayShader.LoadShaderFiles(vertShader, fraqShader) ||
       !m_displayShader.CompileAndLink())
   {
@@ -683,7 +683,7 @@ float CVisualizationShadertoy::LinearToDecibels(float linear)
 int CVisualizationShadertoy::DetermineBitsPrecision()
 {
   m_state.fbwidth = 32, m_state.fbheight = 26*10;
-  LoadPreset(kodi::GetAddonPath("resources/shaders/main_test.frag.glsl"));
+  LoadPreset(kodi::addon::GetAddonPath("resources/shaders/main_test.frag.glsl"));
   RenderTo(m_shadertoyShader.ProgramHandle(), m_state.effect_fb);
   glFinish();
 
diff --git a/src/main.h b/src/main.h
index 55a894f..2f71574 100644
--- a/src/main.h
+++ b/src/main.h
@@ -17,7 +17,7 @@
 
 #include "kissfft/kiss_fft.h"
 
-class ATTRIBUTE_HIDDEN CVisualizationShadertoy
+class ATTR_DLL_LOCAL CVisualizationShadertoy
   : public kodi::addon::CAddonBase
   , public kodi::addon::CInstanceVisualization
 {

From 2b7c56b9425ee016755c76e638d4799139d89b76 Mon Sep 17 00:00:00 2001
From: Alwin Esch <alwin.esch@web.de>
Date: Mon, 27 Dec 2021 08:30:51 +0100
Subject: [PATCH 3/3] increase version to 20.2.0

---
 visualization.shadertoy/addon.xml.in  | 2 +-
 visualization.shadertoy/changelog.txt | 4 ++++
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/visualization.shadertoy/addon.xml.in b/visualization.shadertoy/addon.xml.in
index cd94fe0..72beebf 100644
--- a/visualization.shadertoy/addon.xml.in
+++ b/visualization.shadertoy/addon.xml.in
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <addon
   id="visualization.shadertoy"
-  version="20.1.1"
+  version="20.2.0"
   name="Shadertoy"
   provider-name="Team Kodi">
   <requires>@ADDON_DEPENDS@</requires>
diff --git a/visualization.shadertoy/changelog.txt b/visualization.shadertoy/changelog.txt
index 970a355..ef88735 100644
--- a/visualization.shadertoy/changelog.txt
+++ b/visualization.shadertoy/changelog.txt
@@ -1,3 +1,7 @@
+[B]20.2.0[/B]
+- Translation updates by Weblate
+- Kodi main API update to version 2.0.0
+
 [B]20.1.1[/B]
 - Fix possible compile error about missing jsoncpp include