Merge remote-tracking branch 'origin/main' into router-implementation

This commit is contained in:
Roberto Tonino 2020-09-15 17:59:15 +02:00
commit 7ea276992a
35 changed files with 895 additions and 420 deletions

File diff suppressed because one or more lines are too long

View File

@ -4,7 +4,7 @@
font-style: italic; font-style: italic;
font-weight: 300; font-weight: 300;
font-display: swap; font-display: swap;
src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKWyV9hmIqOjjg.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKWyV9hmIqOjjg.woff2') format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
} }
/* cyrillic */ /* cyrillic */
@ -13,7 +13,7 @@
font-style: italic; font-style: italic;
font-weight: 300; font-weight: 300;
font-display: swap; font-display: swap;
src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKWyV9hvIqOjjg.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKWyV9hvIqOjjg.woff2') format('woff2');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
} }
/* greek-ext */ /* greek-ext */
@ -22,7 +22,7 @@
font-style: italic; font-style: italic;
font-weight: 300; font-weight: 300;
font-display: swap; font-display: swap;
src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKWyV9hnIqOjjg.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKWyV9hnIqOjjg.woff2') format('woff2');
unicode-range: U+1F00-1FFF; unicode-range: U+1F00-1FFF;
} }
/* greek */ /* greek */
@ -31,7 +31,7 @@
font-style: italic; font-style: italic;
font-weight: 300; font-weight: 300;
font-display: swap; font-display: swap;
src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKWyV9hoIqOjjg.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKWyV9hoIqOjjg.woff2') format('woff2');
unicode-range: U+0370-03FF; unicode-range: U+0370-03FF;
} }
/* vietnamese */ /* vietnamese */
@ -40,7 +40,7 @@
font-style: italic; font-style: italic;
font-weight: 300; font-weight: 300;
font-display: swap; font-display: swap;
src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKWyV9hkIqOjjg.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKWyV9hkIqOjjg.woff2') format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
} }
/* latin-ext */ /* latin-ext */
@ -49,7 +49,7 @@
font-style: italic; font-style: italic;
font-weight: 300; font-weight: 300;
font-display: swap; font-display: swap;
src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKWyV9hlIqOjjg.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKWyV9hlIqOjjg.woff2') format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
} }
/* latin */ /* latin */
@ -58,7 +58,7 @@
font-style: italic; font-style: italic;
font-weight: 300; font-weight: 300;
font-display: swap; font-display: swap;
src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKWyV9hrIqM.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKWyV9hrIqM.woff2') format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
} }
/* cyrillic-ext */ /* cyrillic-ext */
@ -67,7 +67,7 @@
font-style: italic; font-style: italic;
font-weight: 400; font-weight: 400;
font-display: swap; font-display: swap;
src: local('Open Sans Italic'), local('OpenSans-Italic'), url(/public/fonts/OpenSans/mem6YaGs126MiZpBA-UFUK0Udc1UAw.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem6YaGs126MiZpBA-UFUK0Udc1UAw.woff2') format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
} }
/* cyrillic */ /* cyrillic */
@ -76,7 +76,7 @@
font-style: italic; font-style: italic;
font-weight: 400; font-weight: 400;
font-display: swap; font-display: swap;
src: local('Open Sans Italic'), local('OpenSans-Italic'), url(/public/fonts/OpenSans/mem6YaGs126MiZpBA-UFUK0ddc1UAw.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem6YaGs126MiZpBA-UFUK0ddc1UAw.woff2') format('woff2');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
} }
/* greek-ext */ /* greek-ext */
@ -85,7 +85,7 @@
font-style: italic; font-style: italic;
font-weight: 400; font-weight: 400;
font-display: swap; font-display: swap;
src: local('Open Sans Italic'), local('OpenSans-Italic'), url(/public/fonts/OpenSans/mem6YaGs126MiZpBA-UFUK0Vdc1UAw.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem6YaGs126MiZpBA-UFUK0Vdc1UAw.woff2') format('woff2');
unicode-range: U+1F00-1FFF; unicode-range: U+1F00-1FFF;
} }
/* greek */ /* greek */
@ -94,7 +94,7 @@
font-style: italic; font-style: italic;
font-weight: 400; font-weight: 400;
font-display: swap; font-display: swap;
src: local('Open Sans Italic'), local('OpenSans-Italic'), url(/public/fonts/OpenSans/mem6YaGs126MiZpBA-UFUK0adc1UAw.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem6YaGs126MiZpBA-UFUK0adc1UAw.woff2') format('woff2');
unicode-range: U+0370-03FF; unicode-range: U+0370-03FF;
} }
/* vietnamese */ /* vietnamese */
@ -103,7 +103,7 @@
font-style: italic; font-style: italic;
font-weight: 400; font-weight: 400;
font-display: swap; font-display: swap;
src: local('Open Sans Italic'), local('OpenSans-Italic'), url(/public/fonts/OpenSans/mem6YaGs126MiZpBA-UFUK0Wdc1UAw.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem6YaGs126MiZpBA-UFUK0Wdc1UAw.woff2') format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
} }
/* latin-ext */ /* latin-ext */
@ -112,7 +112,7 @@
font-style: italic; font-style: italic;
font-weight: 400; font-weight: 400;
font-display: swap; font-display: swap;
src: local('Open Sans Italic'), local('OpenSans-Italic'), url(/public/fonts/OpenSans/mem6YaGs126MiZpBA-UFUK0Xdc1UAw.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem6YaGs126MiZpBA-UFUK0Xdc1UAw.woff2') format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
} }
/* latin */ /* latin */
@ -121,7 +121,7 @@
font-style: italic; font-style: italic;
font-weight: 400; font-weight: 400;
font-display: swap; font-display: swap;
src: local('Open Sans Italic'), local('OpenSans-Italic'), url(/public/fonts/OpenSans/mem6YaGs126MiZpBA-UFUK0Zdc0.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem6YaGs126MiZpBA-UFUK0Zdc0.woff2') format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
} }
/* cyrillic-ext */ /* cyrillic-ext */
@ -130,7 +130,7 @@
font-style: italic; font-style: italic;
font-weight: 600; font-weight: 600;
font-display: swap; font-display: swap;
src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKXGUdhmIqOjjg.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKXGUdhmIqOjjg.woff2') format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
} }
/* cyrillic */ /* cyrillic */
@ -139,7 +139,7 @@
font-style: italic; font-style: italic;
font-weight: 600; font-weight: 600;
font-display: swap; font-display: swap;
src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKXGUdhvIqOjjg.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKXGUdhvIqOjjg.woff2') format('woff2');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
} }
/* greek-ext */ /* greek-ext */
@ -148,7 +148,7 @@
font-style: italic; font-style: italic;
font-weight: 600; font-weight: 600;
font-display: swap; font-display: swap;
src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKXGUdhnIqOjjg.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKXGUdhnIqOjjg.woff2') format('woff2');
unicode-range: U+1F00-1FFF; unicode-range: U+1F00-1FFF;
} }
/* greek */ /* greek */
@ -157,7 +157,7 @@
font-style: italic; font-style: italic;
font-weight: 600; font-weight: 600;
font-display: swap; font-display: swap;
src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKXGUdhoIqOjjg.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKXGUdhoIqOjjg.woff2') format('woff2');
unicode-range: U+0370-03FF; unicode-range: U+0370-03FF;
} }
/* vietnamese */ /* vietnamese */
@ -166,7 +166,7 @@
font-style: italic; font-style: italic;
font-weight: 600; font-weight: 600;
font-display: swap; font-display: swap;
src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKXGUdhkIqOjjg.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKXGUdhkIqOjjg.woff2') format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
} }
/* latin-ext */ /* latin-ext */
@ -175,7 +175,7 @@
font-style: italic; font-style: italic;
font-weight: 600; font-weight: 600;
font-display: swap; font-display: swap;
src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKXGUdhlIqOjjg.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKXGUdhlIqOjjg.woff2') format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
} }
/* latin */ /* latin */
@ -184,7 +184,7 @@
font-style: italic; font-style: italic;
font-weight: 600; font-weight: 600;
font-display: swap; font-display: swap;
src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKXGUdhrIqM.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKXGUdhrIqM.woff2') format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
} }
/* cyrillic-ext */ /* cyrillic-ext */
@ -193,7 +193,7 @@
font-style: italic; font-style: italic;
font-weight: 700; font-weight: 700;
font-display: swap; font-display: swap;
src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKWiUNhmIqOjjg.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKWiUNhmIqOjjg.woff2') format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
} }
/* cyrillic */ /* cyrillic */
@ -202,7 +202,7 @@
font-style: italic; font-style: italic;
font-weight: 700; font-weight: 700;
font-display: swap; font-display: swap;
src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKWiUNhvIqOjjg.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKWiUNhvIqOjjg.woff2') format('woff2');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
} }
/* greek-ext */ /* greek-ext */
@ -211,7 +211,7 @@
font-style: italic; font-style: italic;
font-weight: 700; font-weight: 700;
font-display: swap; font-display: swap;
src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKWiUNhnIqOjjg.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKWiUNhnIqOjjg.woff2') format('woff2');
unicode-range: U+1F00-1FFF; unicode-range: U+1F00-1FFF;
} }
/* greek */ /* greek */
@ -220,7 +220,7 @@
font-style: italic; font-style: italic;
font-weight: 700; font-weight: 700;
font-display: swap; font-display: swap;
src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKWiUNhoIqOjjg.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKWiUNhoIqOjjg.woff2') format('woff2');
unicode-range: U+0370-03FF; unicode-range: U+0370-03FF;
} }
/* vietnamese */ /* vietnamese */
@ -229,7 +229,7 @@
font-style: italic; font-style: italic;
font-weight: 700; font-weight: 700;
font-display: swap; font-display: swap;
src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKWiUNhkIqOjjg.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKWiUNhkIqOjjg.woff2') format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
} }
/* latin-ext */ /* latin-ext */
@ -238,7 +238,7 @@
font-style: italic; font-style: italic;
font-weight: 700; font-weight: 700;
font-display: swap; font-display: swap;
src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKWiUNhlIqOjjg.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKWiUNhlIqOjjg.woff2') format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
} }
/* latin */ /* latin */
@ -247,7 +247,7 @@
font-style: italic; font-style: italic;
font-weight: 700; font-weight: 700;
font-display: swap; font-display: swap;
src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKWiUNhrIqM.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKWiUNhrIqM.woff2') format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
} }
/* cyrillic-ext */ /* cyrillic-ext */
@ -256,7 +256,7 @@
font-style: italic; font-style: italic;
font-weight: 800; font-weight: 800;
font-display: swap; font-display: swap;
src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKW-U9hmIqOjjg.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKW-U9hmIqOjjg.woff2') format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
} }
/* cyrillic */ /* cyrillic */
@ -265,7 +265,7 @@
font-style: italic; font-style: italic;
font-weight: 800; font-weight: 800;
font-display: swap; font-display: swap;
src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKW-U9hvIqOjjg.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKW-U9hvIqOjjg.woff2') format('woff2');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
} }
/* greek-ext */ /* greek-ext */
@ -274,7 +274,7 @@
font-style: italic; font-style: italic;
font-weight: 800; font-weight: 800;
font-display: swap; font-display: swap;
src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKW-U9hnIqOjjg.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKW-U9hnIqOjjg.woff2') format('woff2');
unicode-range: U+1F00-1FFF; unicode-range: U+1F00-1FFF;
} }
/* greek */ /* greek */
@ -283,7 +283,7 @@
font-style: italic; font-style: italic;
font-weight: 800; font-weight: 800;
font-display: swap; font-display: swap;
src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKW-U9hoIqOjjg.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKW-U9hoIqOjjg.woff2') format('woff2');
unicode-range: U+0370-03FF; unicode-range: U+0370-03FF;
} }
/* vietnamese */ /* vietnamese */
@ -292,7 +292,7 @@
font-style: italic; font-style: italic;
font-weight: 800; font-weight: 800;
font-display: swap; font-display: swap;
src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKW-U9hkIqOjjg.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKW-U9hkIqOjjg.woff2') format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
} }
/* latin-ext */ /* latin-ext */
@ -301,7 +301,7 @@
font-style: italic; font-style: italic;
font-weight: 800; font-weight: 800;
font-display: swap; font-display: swap;
src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKW-U9hlIqOjjg.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKW-U9hlIqOjjg.woff2') format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
} }
/* latin */ /* latin */
@ -310,7 +310,7 @@
font-style: italic; font-style: italic;
font-weight: 800; font-weight: 800;
font-display: swap; font-display: swap;
src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), url(/public/fonts/OpenSans/memnYaGs126MiZpBA-UFUKW-U9hrIqM.woff2) format('woff2'); src: url('../../fonts/OpenSans/memnYaGs126MiZpBA-UFUKW-U9hrIqM.woff2') format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
} }
/* cyrillic-ext */ /* cyrillic-ext */
@ -319,7 +319,7 @@
font-style: normal; font-style: normal;
font-weight: 300; font-weight: 300;
font-display: swap; font-display: swap;
src: local('Open Sans Light'), local('OpenSans-Light'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UN_r8OX-hpOqc.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UN_r8OX-hpOqc.woff2') format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
} }
/* cyrillic */ /* cyrillic */
@ -328,7 +328,7 @@
font-style: normal; font-style: normal;
font-weight: 300; font-weight: 300;
font-display: swap; font-display: swap;
src: local('Open Sans Light'), local('OpenSans-Light'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UN_r8OVuhpOqc.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UN_r8OVuhpOqc.woff2') format('woff2');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
} }
/* greek-ext */ /* greek-ext */
@ -337,7 +337,7 @@
font-style: normal; font-style: normal;
font-weight: 300; font-weight: 300;
font-display: swap; font-display: swap;
src: local('Open Sans Light'), local('OpenSans-Light'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UN_r8OXuhpOqc.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UN_r8OXuhpOqc.woff2') format('woff2');
unicode-range: U+1F00-1FFF; unicode-range: U+1F00-1FFF;
} }
/* greek */ /* greek */
@ -346,7 +346,7 @@
font-style: normal; font-style: normal;
font-weight: 300; font-weight: 300;
font-display: swap; font-display: swap;
src: local('Open Sans Light'), local('OpenSans-Light'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UN_r8OUehpOqc.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UN_r8OUehpOqc.woff2') format('woff2');
unicode-range: U+0370-03FF; unicode-range: U+0370-03FF;
} }
/* vietnamese */ /* vietnamese */
@ -355,7 +355,7 @@
font-style: normal; font-style: normal;
font-weight: 300; font-weight: 300;
font-display: swap; font-display: swap;
src: local('Open Sans Light'), local('OpenSans-Light'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UN_r8OXehpOqc.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UN_r8OXehpOqc.woff2') format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
} }
/* latin-ext */ /* latin-ext */
@ -364,7 +364,7 @@
font-style: normal; font-style: normal;
font-weight: 300; font-weight: 300;
font-display: swap; font-display: swap;
src: local('Open Sans Light'), local('OpenSans-Light'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UN_r8OXOhpOqc.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UN_r8OXOhpOqc.woff2') format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
} }
/* latin */ /* latin */
@ -373,7 +373,7 @@
font-style: normal; font-style: normal;
font-weight: 300; font-weight: 300;
font-display: swap; font-display: swap;
src: local('Open Sans Light'), local('OpenSans-Light'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UN_r8OUuhp.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UN_r8OUuhp.woff2') format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
} }
/* cyrillic-ext */ /* cyrillic-ext */
@ -382,7 +382,7 @@
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
font-display: swap; font-display: swap;
src: local('Open Sans Regular'), local('OpenSans-Regular'), url(/public/fonts/OpenSans/mem8YaGs126MiZpBA-UFWJ0bbck.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem8YaGs126MiZpBA-UFWJ0bbck.woff2') format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
} }
/* cyrillic */ /* cyrillic */
@ -391,7 +391,7 @@
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
font-display: swap; font-display: swap;
src: local('Open Sans Regular'), local('OpenSans-Regular'), url(/public/fonts/OpenSans/mem8YaGs126MiZpBA-UFUZ0bbck.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem8YaGs126MiZpBA-UFUZ0bbck.woff2') format('woff2');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
} }
/* greek-ext */ /* greek-ext */
@ -400,7 +400,7 @@
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
font-display: swap; font-display: swap;
src: local('Open Sans Regular'), local('OpenSans-Regular'), url(/public/fonts/OpenSans/mem8YaGs126MiZpBA-UFWZ0bbck.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem8YaGs126MiZpBA-UFWZ0bbck.woff2') format('woff2');
unicode-range: U+1F00-1FFF; unicode-range: U+1F00-1FFF;
} }
/* greek */ /* greek */
@ -409,7 +409,7 @@
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
font-display: swap; font-display: swap;
src: local('Open Sans Regular'), local('OpenSans-Regular'), url(/public/fonts/OpenSans/mem8YaGs126MiZpBA-UFVp0bbck.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem8YaGs126MiZpBA-UFVp0bbck.woff2') format('woff2');
unicode-range: U+0370-03FF; unicode-range: U+0370-03FF;
} }
/* vietnamese */ /* vietnamese */
@ -418,7 +418,7 @@
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
font-display: swap; font-display: swap;
src: local('Open Sans Regular'), local('OpenSans-Regular'), url(/public/fonts/OpenSans/mem8YaGs126MiZpBA-UFWp0bbck.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem8YaGs126MiZpBA-UFWp0bbck.woff2') format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
} }
/* latin-ext */ /* latin-ext */
@ -427,7 +427,7 @@
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
font-display: swap; font-display: swap;
src: local('Open Sans Regular'), local('OpenSans-Regular'), url(/public/fonts/OpenSans/mem8YaGs126MiZpBA-UFW50bbck.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem8YaGs126MiZpBA-UFW50bbck.woff2') format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
} }
/* latin */ /* latin */
@ -436,7 +436,7 @@
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
font-display: swap; font-display: swap;
src: local('Open Sans Regular'), local('OpenSans-Regular'), url(/public/fonts/OpenSans/mem8YaGs126MiZpBA-UFVZ0b.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem8YaGs126MiZpBA-UFVZ0b.woff2') format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
} }
/* cyrillic-ext */ /* cyrillic-ext */
@ -445,7 +445,7 @@
font-style: normal; font-style: normal;
font-weight: 600; font-weight: 600;
font-display: swap; font-display: swap;
src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UNirkOX-hpOqc.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UNirkOX-hpOqc.woff2') format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
} }
/* cyrillic */ /* cyrillic */
@ -454,7 +454,7 @@
font-style: normal; font-style: normal;
font-weight: 600; font-weight: 600;
font-display: swap; font-display: swap;
src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UNirkOVuhpOqc.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UNirkOVuhpOqc.woff2') format('woff2');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
} }
/* greek-ext */ /* greek-ext */
@ -463,7 +463,7 @@
font-style: normal; font-style: normal;
font-weight: 600; font-weight: 600;
font-display: swap; font-display: swap;
src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UNirkOXuhpOqc.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UNirkOXuhpOqc.woff2') format('woff2');
unicode-range: U+1F00-1FFF; unicode-range: U+1F00-1FFF;
} }
/* greek */ /* greek */
@ -472,7 +472,7 @@
font-style: normal; font-style: normal;
font-weight: 600; font-weight: 600;
font-display: swap; font-display: swap;
src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UNirkOUehpOqc.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UNirkOUehpOqc.woff2') format('woff2');
unicode-range: U+0370-03FF; unicode-range: U+0370-03FF;
} }
/* vietnamese */ /* vietnamese */
@ -481,7 +481,7 @@
font-style: normal; font-style: normal;
font-weight: 600; font-weight: 600;
font-display: swap; font-display: swap;
src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UNirkOXehpOqc.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UNirkOXehpOqc.woff2') format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
} }
/* latin-ext */ /* latin-ext */
@ -490,7 +490,7 @@
font-style: normal; font-style: normal;
font-weight: 600; font-weight: 600;
font-display: swap; font-display: swap;
src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UNirkOXOhpOqc.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UNirkOXOhpOqc.woff2') format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
} }
/* latin */ /* latin */
@ -499,7 +499,7 @@
font-style: normal; font-style: normal;
font-weight: 600; font-weight: 600;
font-display: swap; font-display: swap;
src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UNirkOUuhp.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UNirkOUuhp.woff2') format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
} }
/* cyrillic-ext */ /* cyrillic-ext */
@ -508,7 +508,7 @@
font-style: normal; font-style: normal;
font-weight: 700; font-weight: 700;
font-display: swap; font-display: swap;
src: local('Open Sans Bold'), local('OpenSans-Bold'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UN7rgOX-hpOqc.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UN7rgOX-hpOqc.woff2') format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
} }
/* cyrillic */ /* cyrillic */
@ -517,7 +517,7 @@
font-style: normal; font-style: normal;
font-weight: 700; font-weight: 700;
font-display: swap; font-display: swap;
src: local('Open Sans Bold'), local('OpenSans-Bold'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UN7rgOVuhpOqc.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UN7rgOVuhpOqc.woff2') format('woff2');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
} }
/* greek-ext */ /* greek-ext */
@ -526,7 +526,7 @@
font-style: normal; font-style: normal;
font-weight: 700; font-weight: 700;
font-display: swap; font-display: swap;
src: local('Open Sans Bold'), local('OpenSans-Bold'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UN7rgOXuhpOqc.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UN7rgOXuhpOqc.woff2') format('woff2');
unicode-range: U+1F00-1FFF; unicode-range: U+1F00-1FFF;
} }
/* greek */ /* greek */
@ -535,7 +535,7 @@
font-style: normal; font-style: normal;
font-weight: 700; font-weight: 700;
font-display: swap; font-display: swap;
src: local('Open Sans Bold'), local('OpenSans-Bold'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UN7rgOUehpOqc.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UN7rgOUehpOqc.woff2') format('woff2');
unicode-range: U+0370-03FF; unicode-range: U+0370-03FF;
} }
/* vietnamese */ /* vietnamese */
@ -544,7 +544,7 @@
font-style: normal; font-style: normal;
font-weight: 700; font-weight: 700;
font-display: swap; font-display: swap;
src: local('Open Sans Bold'), local('OpenSans-Bold'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UN7rgOXehpOqc.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UN7rgOXehpOqc.woff2') format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
} }
/* latin-ext */ /* latin-ext */
@ -553,7 +553,7 @@
font-style: normal; font-style: normal;
font-weight: 700; font-weight: 700;
font-display: swap; font-display: swap;
src: local('Open Sans Bold'), local('OpenSans-Bold'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UN7rgOXOhpOqc.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UN7rgOXOhpOqc.woff2') format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
} }
/* latin */ /* latin */
@ -562,7 +562,7 @@
font-style: normal; font-style: normal;
font-weight: 700; font-weight: 700;
font-display: swap; font-display: swap;
src: local('Open Sans Bold'), local('OpenSans-Bold'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UN7rgOUuhp.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UN7rgOUuhp.woff2') format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
} }
/* cyrillic-ext */ /* cyrillic-ext */
@ -571,7 +571,7 @@
font-style: normal; font-style: normal;
font-weight: 800; font-weight: 800;
font-display: swap; font-display: swap;
src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UN8rsOX-hpOqc.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UN8rsOX-hpOqc.woff2') format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
} }
/* cyrillic */ /* cyrillic */
@ -580,7 +580,7 @@
font-style: normal; font-style: normal;
font-weight: 800; font-weight: 800;
font-display: swap; font-display: swap;
src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UN8rsOVuhpOqc.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UN8rsOVuhpOqc.woff2') format('woff2');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
} }
/* greek-ext */ /* greek-ext */
@ -589,7 +589,7 @@
font-style: normal; font-style: normal;
font-weight: 800; font-weight: 800;
font-display: swap; font-display: swap;
src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UN8rsOXuhpOqc.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UN8rsOXuhpOqc.woff2') format('woff2');
unicode-range: U+1F00-1FFF; unicode-range: U+1F00-1FFF;
} }
/* greek */ /* greek */
@ -598,7 +598,7 @@
font-style: normal; font-style: normal;
font-weight: 800; font-weight: 800;
font-display: swap; font-display: swap;
src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UN8rsOUehpOqc.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UN8rsOUehpOqc.woff2') format('woff2');
unicode-range: U+0370-03FF; unicode-range: U+0370-03FF;
} }
/* vietnamese */ /* vietnamese */
@ -607,7 +607,7 @@
font-style: normal; font-style: normal;
font-weight: 800; font-weight: 800;
font-display: swap; font-display: swap;
src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UN8rsOXehpOqc.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UN8rsOXehpOqc.woff2') format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
} }
/* latin-ext */ /* latin-ext */
@ -616,7 +616,7 @@
font-style: normal; font-style: normal;
font-weight: 800; font-weight: 800;
font-display: swap; font-display: swap;
src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UN8rsOXOhpOqc.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UN8rsOXOhpOqc.woff2') format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
} }
/* latin */ /* latin */
@ -625,6 +625,6 @@
font-style: normal; font-style: normal;
font-weight: 800; font-weight: 800;
font-display: swap; font-display: swap;
src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url(/public/fonts/OpenSans/mem5YaGs126MiZpBA-UN8rsOUuhp.woff2) format('woff2'); src: url('../../fonts/OpenSans/mem5YaGs126MiZpBA-UN8rsOUuhp.woff2') format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
} }

View File

@ -3,11 +3,10 @@
font-family: 'Material Icons'; font-family: 'Material Icons';
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
src: url(../../fonts/icons/MaterialIcons-Regular.eot); /* For IE6-8 */ src: url('../../fonts/icons/MaterialIcons-Regular.eot'); /* For IE6-8 */
src: local('Material Icons'), local('MaterialIcons-Regular'), src: url('../../fonts/icons/MaterialIcons-Regular.woff2') format('woff2'),
url(../../fonts/icons/MaterialIcons-Regular.woff2) format('woff2'), url('../../fonts/icons/MaterialIcons-Regular.woff') format('woff'),
url(../../fonts/icons/MaterialIcons-Regular.woff) format('woff'), url('../../fonts/icons/MaterialIcons-Regular.ttf') format('truetype');
url(../../fonts/icons/MaterialIcons-Regular.ttf) format('truetype');
} }
.material-icons { .material-icons {

View File

@ -4,12 +4,12 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>deemix</title> <title>deemix</title>
<link rel="stylesheet" type="text/css" href="/public/css/vendor/animate.css"> <link rel="stylesheet" type="text/css" href="/css/vendor/animate.css">
<link rel="stylesheet" type="text/css" href="/public/css/vendor/material-icons.css"> <link rel="stylesheet" type="text/css" href="/css/vendor/material-icons.css">
<link rel="stylesheet" type="text/css" href="/public/css/vendor/OpenSans.css"> <link rel="stylesheet" type="text/css" href="/css/vendor/OpenSans.css">
<link rel="stylesheet" type="text/css" href="/public/css/vendor/toastify.css"> <link rel="stylesheet" type="text/css" href="/css/vendor/toastify.css">
<link rel="stylesheet" type="text/css" href="/public/css/style.css"> <link rel="stylesheet" type="text/css" href="/css/style.css">
<link rel="shortcut icon" href="/public/favicon.ico"> <link rel="shortcut icon" href="/favicon.ico">
<meta name="viewport" <meta name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=0"> content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=0">
<script> <script>
@ -23,8 +23,8 @@
<div id="app"></div> <div id="app"></div>
</body> </body>
<script type="text/javascript" src="/public/js/vendor/socket.io.js"></script> <script type="text/javascript" src="/js/vendor/socket.io.js"></script>
<script src="/public/js/bundle.js"></script> <script src="/js/bundle.js"></script>
</html> </html>

File diff suppressed because one or more lines are too long

View File

@ -15,6 +15,10 @@ import { socket } from '@/utils/socket'
import { toast } from '@/utils/toasts' import { toast } from '@/utils/toasts'
import { init as initTabs } from '@js/tabs.js' import { init as initTabs } from '@js/tabs.js'
import { isValidURL } from '@/utils/utils'
import Downloads from '@/utils/downloads'
import EventBus from '@/utils/EventBus.js'
/* ===== App initialization ===== */ /* ===== App initialization ===== */
function startApp() { function startApp() {
@ -41,6 +45,34 @@ function initClient() {
document.addEventListener('DOMContentLoaded', startApp) document.addEventListener('DOMContentLoaded', startApp)
window.addEventListener('pywebviewready', initClient) window.addEventListener('pywebviewready', initClient)
/* ===== Global shortcuts ===== */
document.addEventListener('keyup', keyEvent => {
if (keyEvent.key == "Backspace" && keyEvent.ctrlKey){
let searchbar = document.querySelector('#searchbar')
searchbar.value = ""
searchbar.focus()
}
})
document.addEventListener('paste', pasteEvent => {
pasteText = pasteEvent.clipboardData.getData('Text')
if (pasteEvent.target.localName != "input"){
if (isValidURL(pasteText)){
if (main_selected === 'analyzer_tab') {
EventBus.$emit('linkAnalyzerTab:reset')
socket.emit('analyzeLink', pasteText)
} else {
Downloads.sendAddToQueue(pasteText)
}
}else{
let searchbar = document.querySelector('#searchbar')
searchbar.select()
searchbar.setSelectionRange(0, 99999)
}
}
})
/* ===== Socketio listeners ===== */ /* ===== Socketio listeners ===== */
// Debug messages for socketio // Debug messages for socketio
@ -147,11 +179,11 @@ socket.on('currentItemCancelled', function(uuid) {
}) })
socket.on('startAddingArtist', function(data) { socket.on('startAddingArtist', function(data) {
toast(i18n.t('toasts.startAddingArtist', [data.name]), 'loading', false, 'artist_' + data.id) toast(i18n.t('toasts.startAddingArtist', {artist: data.name}), 'loading', false, 'artist_' + data.id)
}) })
socket.on('finishAddingArtist', function(data) { socket.on('finishAddingArtist', function(data) {
toast(i18n.t('toasts.finishAddingArtist', [data.name]), 'done', true, 'artist_' + data.id) toast(i18n.t('toasts.finishAddingArtist', {artist: data.name}), 'done', true, 'artist_' + data.id)
}) })
socket.on('startConvertingSpotifyPlaylist', function(id) { socket.on('startConvertingSpotifyPlaylist', function(id) {
@ -172,7 +204,7 @@ socket.on('queueError', function(queueItem) {
}) })
socket.on('alreadyInQueue', function(data) { socket.on('alreadyInQueue', function(data) {
toast(i18n.t('toasts.alreadyInQueue', [data.title]), 'playlist_add_check') toast(i18n.t('toasts.alreadyInQueue', {item: data.title}), 'playlist_add_check')
}) })
socket.on('loginNeededToDownload', function(data) { socket.on('loginNeededToDownload', function(data) {

View File

@ -1,6 +1,15 @@
<template> <template>
<div id="about_tab" class="main_tabcontent" ref="root"> <div id="about_tab" class="main_tabcontent" ref="root">
<h2 class="page_heading">{{ $t('sidebar.about') }}</h2> <h2 class="page_heading">{{ $t('sidebar.about') }}</h2>
<ul>
<li>
{{ $t('about.updates.currentVersion') }}: <span v-if="current">{{ current }}</span
><span v-else>{{ $t('about.updates.versionNotAvailable') }}</span>
</li>
<li>{{ $t('about.updates.deemixVersion') }}: {{ deemixVersion }}</li>
<li v-if="updateAvailable && latest">{{ $t('about.updates.updateAvailable', { version: latest }) }}</li>
</ul>
<ul> <ul>
<li v-html="$t('about.usesLibrary')"></li> <li v-html="$t('about.usesLibrary')"></li>
<li v-html="$t('about.thanks')"></li> <li v-html="$t('about.thanks')"></li>
@ -93,7 +102,7 @@
<a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank"> <a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank">
<img <img
alt="GNU General Public License" alt="GNU General Public License"
style="border-width: 0;" style="border-width: 0"
src="https://www.gnu.org/graphics/gplv3-127x51.png" src="https://www.gnu.org/graphics/gplv3-127x51.png"
/> />
</a> </a>
@ -191,21 +200,30 @@ ul {
} }
</style> </style>
<script> <script>
import { socket } from '@/utils/socket'
import paypal from '@/assets/paypal.svg' import paypal from '@/assets/paypal.svg'
import ethereum from '@/assets/ethereum.svg' import ethereum from '@/assets/ethereum.svg'
export default { export default {
data: () => ({ data: () => ({
paypal, paypal,
ethereum ethereum,
current: null,
latest: null,
updateAvailable: false,
deemixVersion: null
}), }),
mounted() { methods: {
console.log('about mounted') initUpdate(data) {
// this.$refs.root.style.display = 'block' const { currentCommit, latestCommit, updateAvailable, deemixVersion } = data
this.current = currentCommit
this.latest = latestCommit
this.updateAvailable = updateAvailable
this.deemixVersion = deemixVersion
}
}, },
beforeDestroy() { mounted() {
console.log('about bef dest') socket.on('init_update', this.initUpdate)
// this.$refs.root.style.display = 'none'
} }
} }
</script> </script>

View File

@ -95,7 +95,7 @@ export default {
downloadQualities.forEach((quality, index) => { downloadQualities.forEach((quality, index) => {
options[quality.objName] = { options[quality.objName] = {
label: `${this.$t('globals.download', [quality.label])}`, label: `${this.$t('globals.download', {thing: quality.label})}`,
show: false, show: false,
position: nextValuePosition + index, position: nextValuePosition + index,
action: this.tryToDownloadTrack.bind(null, quality.value) action: this.tryToDownloadTrack.bind(null, quality.value)

View File

@ -91,6 +91,11 @@ export default {
switch (icon) { switch (icon) {
case 'remove': case 'remove':
socket.emit('removeFromQueue', uuid) socket.emit('removeFromQueue', uuid)
if ($(`#bar_${uuid}`).hasClass('indeterminate')){
$(`#download_${uuid}`).remove()
}else{
target.innerHTML = `<div class="circle-loader"></div>`
}
break break
default: default:
} }
@ -127,7 +132,7 @@ export default {
item.silent = true item.silent = true
this.addToQueue(item) this.addToQueue(item)
}); });
toast(this.$t('toasts.addedMoreToQueue', [queueItem.length]), 'playlist_add_check') toast(this.$t('toasts.addedMoreToQueue', {n: queueItem.length}), 'playlist_add_check')
return return
}else{ }else{
queueItem = queueItem[0] queueItem = queueItem[0]
@ -205,7 +210,7 @@ export default {
} }
if (!queueItem.silent) { if (!queueItem.silent) {
toast(this.$t('toasts.addedToQueue', [queueItem.title]), 'playlist_add_check') toast(this.$t('toasts.addedToQueue', {item: queueItem.title}), 'playlist_add_check')
} }
}, },
updateQueue(update) { updateQueue(update) {
@ -251,7 +256,7 @@ export default {
if (index > -1) { if (index > -1) {
this.queue.splice(index, 1) this.queue.splice(index, 1)
$(`#download_${this.queueList[uuid].uuid}`).remove() $(`#download_${uuid}`).remove()
delete this.queueList[uuid] delete this.queueList[uuid]
} }
}, },
@ -302,7 +307,7 @@ export default {
}, },
finishDownload(uuid) { finishDownload(uuid) {
if (this.queue.indexOf(uuid) > -1) { if (this.queue.indexOf(uuid) > -1) {
toast(this.$t('toasts.finishDownload', [this.queueList[uuid].title]), 'done') toast(this.$t('toasts.finishDownload', {item: this.queueList[uuid].title}), 'done')
$('#bar_' + uuid).css('width', '100%') $('#bar_' + uuid).css('width', '100%')

View File

@ -1,6 +1,6 @@
<template> <template>
<div id="errors_tab" class="main_tabcontent" ref="root"> <div id="errors_tab" class="main_tabcontent">
<h1>{{ $t('errors.title', [title]) }}</h1> <h1>{{ $t('errors.title', { name: title }) }}</h1>
<table class="table table--tracklist"> <table class="table table--tracklist">
<tr> <tr>
<th>ID</th> <th>ID</th>

View File

@ -44,7 +44,7 @@
</div> </div>
<p class="primary-text">{{ release.title }}</p> <p class="primary-text">{{ release.title }}</p>
<p class="secondary-text"> <p class="secondary-text">
{{ `${$t('globals.by', [release.creator.name])} - ${$tc('globals.listTabs.trackN', release.nb_tracks)}` }} {{ `${$t('globals.by', {artist: release.creator.name})} - ${$tc('globals.listTabs.trackN', release.nb_tracks)}` }}
</p> </p>
</div> </div>
<div <div
@ -67,7 +67,7 @@
</div> </div>
<p class="primary-text">{{ release.title }}</p> <p class="primary-text">{{ release.title }}</p>
<p class="secondary-text"> <p class="secondary-text">
{{ `${$t('globals.by', [release.creator.name])} - ${$tc('globals.listTabs.trackN', release.nb_tracks)}` }} {{ `${$t('globals.by', {artist: release.creator.name})} - ${$tc('globals.listTabs.trackN', release.nb_tracks)}` }}
</p> </p>
</div> </div>
</div> </div>
@ -92,7 +92,7 @@
</div> </div>
</div> </div>
<p class="primary-text">{{ release.title }}</p> <p class="primary-text">{{ release.title }}</p>
<p class="secondary-text">{{ `${$t('globals.by', [release.artist.name])}` }}</p> <p class="secondary-text">{{ `${$t('globals.by', {artist: release.artist.name})}` }}</p>
</div> </div>
</div> </div>
</div> </div>

View File

@ -29,7 +29,7 @@
</div> </div>
<p class="primary-text">{{ release.title }}</p> <p class="primary-text">{{ release.title }}</p>
<p class="secondary-text"> <p class="secondary-text">
{{ `${$t('globals.by', [release.user.name])} - ${$tc('globals.listTabs.trackN', release.nb_tracks)}` }} {{ `${$t('globals.by', {artist: release.user.name})} - ${$tc('globals.listTabs.trackN', release.nb_tracks)}` }}
</p> </p>
</div> </div>
</div> </div>
@ -57,7 +57,7 @@
</div> </div>
</div> </div>
<p class="primary-text">{{ release.title }}</p> <p class="primary-text">{{ release.title }}</p>
<p class="secondary-text">{{ `${$t('globals.by', [release.artist.name])}` }}</p> <p class="secondary-text">{{ `${$t('globals.by', {artist: release.artist.name})}` }}</p>
</div> </div>
</div> </div>
</section> </section>

View File

@ -25,20 +25,20 @@
<h1>{{ title }}</h1> <h1>{{ title }}</h1>
<h2 v-if="type == 'track'"> <h2 v-if="type == 'track'">
<i18n path="globals.by" tag="span"> <i18n path="globals.by" tag="span">
<span place="0" class="clickable" @click="artistView" :data-id="data.artist.id">{{ <span place="artist" class="clickable" @click="artistView" :data-id="data.artist.id">{{
data.artist.name data.artist.name
}}</span> }}</span>
</i18n> </i18n>
<i18n path="globals.in" tag="span"> <i18n path="globals.in" tag="span">
<span place="0" class="clickable" @click="albumView" :data-id="data.album.id">{{ <span place="album" class="clickable" @click="albumView" :data-id="data.album.id">{{
data.album.title data.album.title
}}</span> }}</span>
</i18n> </i18n>
</h2> </h2>
<h2 v-else-if="type == 'album'"> <h2 v-else-if="type == 'album'">
<i18n path="globals.by" tag="span"> <i18n path="globals.by" tag="span">
<span place="0" class="clickable" @click="artistView" :data-id="data.artist.id">{{ <span place="artist" class="clickable" @click="artistView" :data-id="data.artist.id">{{
data.artist.name data.artist.name
}}</span> }}</span>
</i18n> </i18n>

View File

@ -62,8 +62,8 @@
<p class="secondary-text"> <p class="secondary-text">
{{ {{
results.allTab.TOP_RESULT[0].type == 'artist' results.allTab.TOP_RESULT[0].type == 'artist'
? $t('search.fans', [$n(results.allTab.TOP_RESULT[0].nb_fan)]) ? $t('search.fans', {n: $n(results.allTab.TOP_RESULT[0].nb_fan)})
: $t('globals.by', [results.allTab.TOP_RESULT[0].artist]) + : $t('globals.by', {artist: results.allTab.TOP_RESULT[0].artist}) +
' - ' + ' - ' +
$tc('globals.listTabs.trackN', results.allTab.TOP_RESULT[0].nb_song) $tc('globals.listTabs.trackN', results.allTab.TOP_RESULT[0].nb_song)
}} }}
@ -155,7 +155,7 @@
</div> </div>
</div> </div>
<p class="primary-text">{{ release.ART_NAME }}</p> <p class="primary-text">{{ release.ART_NAME }}</p>
<p class="secondary-text">{{ $t('search.fans', [$n(release.NB_FAN)]) }}</p> <p class="secondary-text">{{ $t('search.fans', {n: $n(release.NB_FAN)}) }}</p>
</div> </div>
</div> </div>
<div v-else-if="section == 'ALBUM'" class="release_grid firstrow_only"> <div v-else-if="section == 'ALBUM'" class="release_grid firstrow_only">
@ -360,7 +360,7 @@
</p> </p>
<p class="secondary-text"> <p class="secondary-text">
{{ {{
$t('globals.by', [release.artist.name]) + ' - ' + $tc('globals.listTabs.trackN', release.nb_tracks) $t('globals.by', {artist: release.artist.name}) + ' - ' + $tc('globals.listTabs.trackN', release.nb_tracks)
}} }}
</p> </p>
</div> </div>
@ -423,7 +423,7 @@
</div> </div>
<p class="primary-text">{{ release.title }}</p> <p class="primary-text">{{ release.title }}</p>
<p class="secondary-text"> <p class="secondary-text">
{{ `${$t('globals.by', [release.user.name])} - ${$tc('globals.listTabs.trackN', release.nb_tracks)}` }} {{ `${$t('globals.by', {artist: release.user.name})} - ${$tc('globals.listTabs.trackN', release.nb_tracks)}` }}
</p> </p>
</div> </div>
</div> </div>

View File

@ -1,17 +1,17 @@
<template> <template>
<div id="modal_quality" class="smallmodal" v-show="open" @click="tryToDownloadTrack($event)" ref="modal"> <div id="modal_quality" class="smallmodal" v-show="open" @click="tryToDownloadTrack($event)" ref="modal">
<div class="smallmodal-content"> <div class="smallmodal-content">
<button class="quality-button" data-quality-value="9">{{ $t('globals.download', ['FLAC']) }}</button> <button class="quality-button" data-quality-value="9">{{ $t('globals.download', {thing: 'FLAC'}) }}</button>
<button class="quality-button" data-quality-value="3">{{ $t('globals.download', ['MP3 320kbps']) }}</button> <button class="quality-button" data-quality-value="3">{{ $t('globals.download', {thing: 'MP3 320kbps'}) }}</button>
<button class="quality-button" data-quality-value="1">{{ $t('globals.download', ['MP3 128kbps']) }}</button> <button class="quality-button" data-quality-value="1">{{ $t('globals.download', {thing: 'MP3 128kbps'}) }}</button>
<button class="quality-button" data-quality-value="15"> <button class="quality-button" data-quality-value="15">
{{ $t('globals.download', ['360 Reality Audio [HQ]']) }} {{ $t('globals.download', {thing: '360 Reality Audio [HQ]'}) }}
</button> </button>
<button class="quality-button" data-quality-value="14"> <button class="quality-button" data-quality-value="14">
{{ $t('globals.download', ['360 Reality Audio [MQ]']) }} {{ $t('globals.download', {thing: '360 Reality Audio [MQ]'}) }}
</button> </button>
<button class="quality-button" data-quality-value="13"> <button class="quality-button" data-quality-value="13">
{{ $t('globals.download', ['360 Reality Audio [LQ]']) }} {{ $t('globals.download', {thing: '360 Reality Audio [LQ]'}) }}
</button> </button>
</div> </div>
</div> </div>

View File

@ -26,10 +26,10 @@
<a href="https://codeberg.org/RemixDev/deemix/wiki/Getting-your-own-ARL" target="_blank"> <a href="https://codeberg.org/RemixDev/deemix/wiki/Getting-your-own-ARL" target="_blank">
{{ $t('settings.login.arl.question') }} {{ $t('settings.login.arl.question') }}
</a> </a>
<a id="settings_btn_applogin" class="hide" href="#" @click.prevent="applogin"> <a id="settings_btn_applogin" class="hide" href="#" @click="applogin">
Automated login {{ $t('settings.login.login') }}
</a> </a>
<button id="settings_btn_updateArl" @click="login" style="width: 100%;"> <button id="settings_btn_updateArl" @click="login" style="width: 100%">
{{ $t('settings.login.arl.update') }} {{ $t('settings.login.arl.update') }}
</button> </button>
</div> </div>
@ -275,7 +275,7 @@
<div class="input_group"> <div class="input_group">
<p class="input_group_text">{{ $t('settings.covers.localArtworkSize') }}</p> <p class="input_group_text">{{ $t('settings.covers.localArtworkSize') }}</p>
<input type="number" min="100" max="10000" step="100" v-model.number="settings.localArtworkSize" /> <input type="number" min="100" max="10000" step="100" v-model.number="settings.localArtworkSize" />
<p v-if="settings.localArtworkSize > 1200" class="input_group_text" style="opacity: 0.75; color: #ffcc22;"> <p v-if="settings.localArtworkSize > 1200" class="input_group_text" style="opacity: 0.75; color: #ffcc22">
{{ $t('settings.covers.imageSizeWarning') }} {{ $t('settings.covers.imageSizeWarning') }}
</p> </p>
</div> </div>
@ -283,7 +283,7 @@
<div class="input_group"> <div class="input_group">
<p class="input_group_text">{{ $t('settings.covers.embeddedArtworkSize') }}</p> <p class="input_group_text">{{ $t('settings.covers.embeddedArtworkSize') }}</p>
<input type="number" min="100" max="10000" step="100" v-model.number="settings.embeddedArtworkSize" /> <input type="number" min="100" max="10000" step="100" v-model.number="settings.embeddedArtworkSize" />
<p v-if="settings.embeddedArtworkSize > 1200" class="input_group_text" style="opacity: 0.75; color: #ffcc22;"> <p v-if="settings.embeddedArtworkSize > 1200" class="input_group_text" style="opacity: 0.75; color: #ffcc22">
{{ $t('settings.covers.imageSizeWarning') }} {{ $t('settings.covers.imageSizeWarning') }}
</p> </p>
</div> </div>
@ -301,7 +301,7 @@
<input type="checkbox" v-model="settings.embeddedArtworkPNG" /> <input type="checkbox" v-model="settings.embeddedArtworkPNG" />
<span class="checkbox_text">{{ $t('settings.covers.embeddedArtworkPNG') }}</span> <span class="checkbox_text">{{ $t('settings.covers.embeddedArtworkPNG') }}</span>
</label> </label>
<p v-if="settings.embeddedArtworkPNG" style="opacity: 0.75; color: #ffcc22;"> <p v-if="settings.embeddedArtworkPNG" style="opacity: 0.75; color: #ffcc22">
{{ $t('settings.covers.embeddedPNGWarning') }} {{ $t('settings.covers.embeddedPNGWarning') }}
</p> </p>
@ -313,7 +313,7 @@
<div class="settings-group"> <div class="settings-group">
<h3 class="settings-group__header settings-group__header--with-icon"> <h3 class="settings-group__header settings-group__header--with-icon">
<i class="material-icons" style="width: 1em; height: 1em;">bookmarks</i>{{ $t('settings.tags.head') }} <i class="material-icons" style="width: 1em; height: 1em">bookmarks</i>{{ $t('settings.tags.head') }}
</h3> </h3>
<div class="settings-container"> <div class="settings-container">
@ -401,6 +401,10 @@
<input type="checkbox" v-model="settings.tags.lyrics" /> <input type="checkbox" v-model="settings.tags.lyrics" />
<span class="checkbox_text">{{ $t('settings.tags.lyrics') }}</span> <span class="checkbox_text">{{ $t('settings.tags.lyrics') }}</span>
</label> </label>
<label class="with_checkbox">
<input type="checkbox" v-model="settings.tags.syncedLyrics" />
<span class="checkbox_text">{{ $t('settings.tags.syncedLyrics') }}</span>
</label>
<label class="with_checkbox"> <label class="with_checkbox">
<input type="checkbox" v-model="settings.tags.copyright" /> <input type="checkbox" v-model="settings.tags.copyright" />
<span class="checkbox_text">{{ $t('settings.tags.copyright') }}</span> <span class="checkbox_text">{{ $t('settings.tags.copyright') }}</span>
@ -443,13 +447,13 @@
<option value="nothing">{{ $t('settings.other.multiArtistSeparator.nothing') }}</option> <option value="nothing">{{ $t('settings.other.multiArtistSeparator.nothing') }}</option>
<option value="default">{{ $t('settings.other.multiArtistSeparator.default') }}</option> <option value="default">{{ $t('settings.other.multiArtistSeparator.default') }}</option>
<option value="andFeat">{{ $t('settings.other.multiArtistSeparator.andFeat') }}</option> <option value="andFeat">{{ $t('settings.other.multiArtistSeparator.andFeat') }}</option>
<option value=" & ">{{ $t('settings.other.multiArtistSeparator.using', [' & ']) }}</option> <option value=" & ">{{ $t('settings.other.multiArtistSeparator.using', { separator: ' & ' }) }}</option>
<option value=",">{{ $t('settings.other.multiArtistSeparator.using', [',']) }}</option> <option value=",">{{ $t('settings.other.multiArtistSeparator.using', { separator: ',' }) }}</option>
<option value=", ">{{ $t('settings.other.multiArtistSeparator.using', [', ']) }}</option> <option value=", ">{{ $t('settings.other.multiArtistSeparator.using', { separator: ', ' }) }}</option>
<option value="/">{{ $t('settings.other.multiArtistSeparator.using', ['/']) }}</option> <option value="/">{{ $t('settings.other.multiArtistSeparator.using', { separator: '/' }) }}</option>
<option value=" / ">{{ $t('settings.other.multiArtistSeparator.using', [' / ']) }}</option> <option value=" / ">{{ $t('settings.other.multiArtistSeparator.using', { separator: ' / ' }) }}</option>
<option value=";">{{ $t('settings.other.multiArtistSeparator.using', [';']) }}</option> <option value=";">{{ $t('settings.other.multiArtistSeparator.using', { separator: ';' }) }}</option>
<option value="; ">{{ $t('settings.other.multiArtistSeparator.using', ['; ']) }}</option> <option value="; ">{{ $t('settings.other.multiArtistSeparator.using', { separator: '; ' }) }}</option>
</select> </select>
</div> </div>
@ -476,26 +480,34 @@
<div class="input_group"> <div class="input_group">
<p class="input_group_text">{{ $t('settings.other.dateFormat.title') }}</p> <p class="input_group_text">{{ $t('settings.other.dateFormat.title') }}</p>
<select v-model="settings.dateFormat"> <select v-model="settings.dateFormat">
<option value="Y-M-D">{{ <option value="Y-M-D">
{{
`${$t('settings.other.dateFormat.year')}-${$t('settings.other.dateFormat.month')}-${$t( `${$t('settings.other.dateFormat.year')}-${$t('settings.other.dateFormat.month')}-${$t(
'settings.other.dateFormat.day' 'settings.other.dateFormat.day'
)}` )}`
}}</option> }}
<option value="Y-D-M">{{ </option>
<option value="Y-D-M">
{{
`${$t('settings.other.dateFormat.year')}-${$t('settings.other.dateFormat.day')}-${$t( `${$t('settings.other.dateFormat.year')}-${$t('settings.other.dateFormat.day')}-${$t(
'settings.other.dateFormat.month' 'settings.other.dateFormat.month'
)}` )}`
}}</option> }}
<option value="D-M-Y">{{ </option>
<option value="D-M-Y">
{{
`${$t('settings.other.dateFormat.day')}-${$t('settings.other.dateFormat.month')}-${$t( `${$t('settings.other.dateFormat.day')}-${$t('settings.other.dateFormat.month')}-${$t(
'settings.other.dateFormat.year' 'settings.other.dateFormat.year'
)}` )}`
}}</option> }}
<option value="M-D-Y">{{ </option>
<option value="M-D-Y">
{{
`${$t('settings.other.dateFormat.month')}-${$t('settings.other.dateFormat.day')}-${$t( `${$t('settings.other.dateFormat.month')}-${$t('settings.other.dateFormat.day')}-${$t(
'settings.other.dateFormat.year' 'settings.other.dateFormat.year'
)}` )}`
}}</option> }}
</option>
<option value="Y">{{ $t('settings.other.dateFormat.year') }}</option> <option value="Y">{{ $t('settings.other.dateFormat.year') }}</option>
</select> </select>
</div> </div>
@ -562,6 +574,9 @@
</svg> </svg>
{{ $t('settings.spotify.title') }} {{ $t('settings.spotify.title') }}
</h3> </h3>
<a href="https://codeberg.org/RemixDev/deemix/wiki/Enabling-Spotify-Features" target="_blank">
{{ $t('settings.spotify.question') }}
</a>
<div class="input_group"> <div class="input_group">
<p class="input_group_text">{{ $t('settings.spotify.clientID') }}</p> <p class="input_group_text">{{ $t('settings.spotify.clientID') }}</p>

View File

@ -134,7 +134,7 @@
<span v-if="label" style="opacity: 0.4; margin-top: 8px; display: inline-block; font-size: 13px;">{{ label }}</span> <span v-if="label" style="opacity: 0.4; margin-top: 8px; display: inline-block; font-size: 13px;">{{ label }}</span>
<footer> <footer>
<button @click.stop="addToQueue" :data-link="link"> <button @click.stop="addToQueue" :data-link="link">
{{ `${$t('globals.download', [$tc(`globals.listTabs.${type}`, 1)])}` }} {{ `${$t('globals.download', {thing: $tc(`globals.listTabs.${type}`, 1)})}` }}
</button> </button>
<button class="with_icon" @click.stop="addToQueue" :data-link="selectedLinks()"> <button class="with_icon" @click.stop="addToQueue" :data-link="selectedLinks()">
{{ $t('tracklist.downloadSelection') }}<i class="material-icons">file_download</i> {{ $t('tracklist.downloadSelection') }}<i class="material-icons">file_download</i>
@ -254,7 +254,7 @@ export default {
this.title = playlistTitle this.title = playlistTitle
this.image = playlistCover this.image = playlistCover
this.release_date = creation_date.substring(0, 10) this.release_date = creation_date.substring(0, 10)
this.metadata = `${this.$t('globals.by', [creatorName])}${this.$tc('globals.listTabs.trackN', numberOfTracks)}` this.metadata = `${this.$t('globals.by', {artist: creatorName})}${this.$tc('globals.listTabs.trackN', numberOfTracks)}`
if (isEmpty(playlistTracks)) { if (isEmpty(playlistTracks)) {
this.body = null this.body = null
@ -282,7 +282,7 @@ export default {
? images[0].url ? images[0].url
: 'https://e-cdns-images.dzcdn.net/images/cover/d41d8cd98f00b204e9800998ecf8427e/1000x1000-000000-80-0-0.jpg' : 'https://e-cdns-images.dzcdn.net/images/cover/d41d8cd98f00b204e9800998ecf8427e/1000x1000-000000-80-0-0.jpg'
this.release_date = '' this.release_date = ''
this.metadata = `${this.$t('globals.by', [ownerName])}${this.$tc('globals.listTabs.trackN', numberOfTracks)}` this.metadata = `${this.$t('globals.by', {artist: ownerName})}${this.$tc('globals.listTabs.trackN', numberOfTracks)}`
if (isEmpty(playlistTracks)) { if (isEmpty(playlistTracks)) {
this.body = null this.body = null

View File

@ -3,9 +3,9 @@ const ar = {
welcome: 'مرحبأ بك في ديمكس', welcome: 'مرحبأ بك في ديمكس',
back: 'رجوع', back: 'رجوع',
loading: 'جار التحميل', loading: 'جار التحميل',
download: 'تحميل {0}', download: 'تحميل {thing}',
by: 'بواسطة {0}', by: 'بواسطة {artist}',
in: 'في {0}', in: 'في {album}',
download_hint: 'تحميل', download_hint: 'تحميل',
play_hint: 'تشغيل', play_hint: 'تشغيل',
toggle_download_tab_hint: 'عرض/اخفاء', toggle_download_tab_hint: 'عرض/اخفاء',
@ -74,7 +74,7 @@ const ar = {
download: 'تحميل قائمة الجدول' download: 'تحميل قائمة الجدول'
}, },
errors: { errors: {
title: 'خطأ في {0}', title: 'خطأ في {name}',
ids: { ids: {
invalidURL: 'الرابط غير صحيح', invalidURL: 'الرابط غير صحيح',
unsupportedURL: 'الرابط غير متاح حتى الانً', unsupportedURL: 'الرابط غير متاح حتى الانً',
@ -133,7 +133,7 @@ const ar = {
startSearching: 'ابدأ البحث!', startSearching: 'ابدأ البحث!',
description: description:
'يمكنك البحث عن مقطع ، ألبوم كامل ، فنان ، قائمة تشغيل .... كل شيء! يمكنك أيضًا لصق رابط ديزر', 'يمكنك البحث عن مقطع ، ألبوم كامل ، فنان ، قائمة تشغيل .... كل شيء! يمكنك أيضًا لصق رابط ديزر',
fans: '{0} متابعون', fans: '{n} متابعون',
noResults: 'لا يوجد نتائج', noResults: 'لا يوجد نتائج',
noResultsTrack: 'لم يتم العثور على مقاطع', noResultsTrack: 'لم يتم العثور على مقاطع',
noResultsAlbum: 'لم يتم العثور على البومات', noResultsAlbum: 'لم يتم العثور على البومات',
@ -143,9 +143,9 @@ const ar = {
searchbar: 'ابحث عن أي شيء تريده (أو الصق رابط)', searchbar: 'ابحث عن أي شيء تريده (أو الصق رابط)',
downloads: 'التحميلات', downloads: 'التحميلات',
toasts: { toasts: {
addedToQueue: '{0} تمت إلأضافة إلى قائمة الانتظار', addedToQueue: '{item} تمت إلأضافة إلى قائمة الانتظار',
alreadyInQueue: '{0} حالياً في قائمة الانتظار!', alreadyInQueue: '{item} حالياً في قائمة الانتظار!',
finishDownload: '{0} انتهى تحميل.', finishDownload: '{item} انتهى تحميل.',
allDownloaded: 'اكتملت جميع التنزيلات!', allDownloaded: 'اكتملت جميع التنزيلات!',
refreshFavs: 'اكتمل التحديث!', refreshFavs: 'اكتمل التحديث!',
loggingIn: 'جار تسجيل الدخول...', loggingIn: 'جار تسجيل الدخول...',
@ -155,8 +155,8 @@ const ar = {
loggedOut: 'تم تسجيل الخروج', loggedOut: 'تم تسجيل الخروج',
cancellingCurrentItem: 'جار الغاء العنصر الحالي.', cancellingCurrentItem: 'جار الغاء العنصر الحالي.',
currentItemCancelled: 'تم الغاء العنصر الحالي.', currentItemCancelled: 'تم الغاء العنصر الحالي.',
startAddingArtist: 'جار اضافة {0} البوم الى قائمة الانتضار', startAddingArtist: 'جار اضافة {artist} البوم الى قائمة الانتضار',
finishAddingArtist: 'تم اضافة {0} البوم الى قائمة الانتضار', finishAddingArtist: 'تم اضافة {artist} البوم الى قائمة الانتضار',
startConvertingSpotifyPlaylist: 'جار تحويل مقاطع سبوتفاي الى مقاطع ديزر', startConvertingSpotifyPlaylist: 'جار تحويل مقاطع سبوتفاي الى مقاطع ديزر',
finishConvertingSpotifyPlaylist: 'تم تحويل قائمة تشغيل سبوتفاي', finishConvertingSpotifyPlaylist: 'تم تحويل قائمة تشغيل سبوتفاي',
loginNeededToDownload: 'يجب عليك تسجيل الدخول لتحميل المقاطع!' loginNeededToDownload: 'يجب عليك تسجيل الدخول لتحميل المقاطع!'
@ -281,7 +281,7 @@ const ar = {
nothing: 'احفظ الفنان الرئيسي فقط', nothing: 'احفظ الفنان الرئيسي فقط',
default: 'استخدام المواصفات القياسية', default: 'استخدام المواصفات القياسية',
andFeat: 'استخدام& و feat.', andFeat: 'استخدام& و feat.',
using: 'استخدام "{0}"' using: 'استخدام "{separator}"'
}, },
singleAlbumArtist: 'احفظ فقط فنان الألبوم الرئيسي', singleAlbumArtist: 'احفظ فقط فنان الألبوم الرئيسي',
albumVariousArtists: 'احتفظ بـ "فنانين متنوعين" في ألبوم الفنانين', albumVariousArtists: 'احتفظ بـ "فنانين متنوعين" في ألبوم الفنانين',

View File

@ -3,9 +3,9 @@ const de = {
welcome: 'Willkommen bei deemix', welcome: 'Willkommen bei deemix',
back: 'zurück', back: 'zurück',
loading: 'lädt', loading: 'lädt',
download: 'Download {0}', download: 'Download {thing}',
by: 'von {0}', by: 'von {artist}',
in: 'in {0}', in: 'in {album}',
download_hint: 'Download', download_hint: 'Download',
play_hint: 'Play', play_hint: 'Play',
toggle_download_tab_hint: 'Erweitern/Minimieren', toggle_download_tab_hint: 'Erweitern/Minimieren',
@ -71,7 +71,7 @@ const de = {
download: 'Download Chart' download: 'Download Chart'
}, },
errors: { errors: {
title: 'Errors für {0}', title: 'Errors für {name}',
ids: { ids: {
invalidURL: 'URL nicht erkannt', invalidURL: 'URL nicht erkannt',
unsupportedURL: 'URL noch nicht unterstützt', unsupportedURL: 'URL noch nicht unterstützt',
@ -128,7 +128,7 @@ const de = {
search: { search: {
startSearching: 'Suche starten!', startSearching: 'Suche starten!',
description: 'Du kannst einen Titel, ein ganzes Album, einen Künstler, eine Playlist suchen ... alles! Du kannst auch einen Deezer-Link einfügen', description: 'Du kannst einen Titel, ein ganzes Album, einen Künstler, eine Playlist suchen ... alles! Du kannst auch einen Deezer-Link einfügen',
fans: '{0} Fans', fans: '{n} Fans',
noResults: 'Keine Ergebnisse', noResults: 'Keine Ergebnisse',
noResultsTrack: 'Keine Tracks gefunden', noResultsTrack: 'Keine Tracks gefunden',
noResultsAlbum: 'Keine Alben gefunden', noResultsAlbum: 'Keine Alben gefunden',
@ -138,9 +138,9 @@ const de = {
searchbar: 'Suche nach allem, was dir gefällt (oder füge einfach einen Link ein)', searchbar: 'Suche nach allem, was dir gefällt (oder füge einfach einen Link ein)',
downloads: 'Downloads', downloads: 'Downloads',
toasts: { toasts: {
addedToQueue: '{0} zur Warteschlange hinzugefügt', addedToQueue: '{item} zur Warteschlange hinzugefügt',
alreadyInQueue: '{0} ist bereits in der Warteschlange!', alreadyInQueue: '{item} ist bereits in der Warteschlange!',
finishDownload: '{0} vollständig heruntergeladen.', finishDownload: '{item} vollständig heruntergeladen.',
allDownloaded: 'Alle Downloads abgeschlossen!', allDownloaded: 'Alle Downloads abgeschlossen!',
refreshFavs: 'Abgeschlossene Downloads neu laden!', refreshFavs: 'Abgeschlossene Downloads neu laden!',
loggingIn: 'Einloggen', loggingIn: 'Einloggen',
@ -150,8 +150,8 @@ const de = {
loggedOut: 'Ausgeloggt', loggedOut: 'Ausgeloggt',
cancellingCurrentItem: 'Aktuelle Auswahl abbrechen.', cancellingCurrentItem: 'Aktuelle Auswahl abbrechen.',
currentItemCancelled: 'Aktuelle Auswahl wurde abgebrochen', currentItemCancelled: 'Aktuelle Auswahl wurde abgebrochen',
startAddingArtist: '{0} Alben werden hinzugefügt', startAddingArtist: '{artist} Alben werden hinzugefügt',
finishAddingArtist: '{0} Alben wurden hinzugefügt', finishAddingArtist: '{artist} Alben wurden hinzugefügt',
startConvertingSpotifyPlaylist: 'Konvertierern von Spotify-Tracks zu Deezer-Tracks', startConvertingSpotifyPlaylist: 'Konvertierern von Spotify-Tracks zu Deezer-Tracks',
finishConvertingSpotifyPlaylist: 'Spotify Playlist convertiert' finishConvertingSpotifyPlaylist: 'Spotify Playlist convertiert'
}, },
@ -276,7 +276,7 @@ const de = {
nothing: 'Speichere nur den Hauptkünstler', nothing: 'Speichere nur den Hauptkünstler',
default: 'Verwende Standard Spezifikationen', default: 'Verwende Standard Spezifikationen',
andFeat: 'Verwende & und feat.', andFeat: 'Verwende & und feat.',
using: 'Verwende "{0}"' using: 'Verwende "{separator}"'
}, },
singleAlbumArtist: 'Nur den Hauptkünstler speichern', singleAlbumArtist: 'Nur den Hauptkünstler speichern',
albumVariousArtists: 'Verschiedene Künstler" im Album Künstler Tag behalten', albumVariousArtists: 'Verschiedene Künstler" im Album Künstler Tag behalten',

View File

@ -3,9 +3,9 @@ const en = {
welcome: 'Welcome to deemix', welcome: 'Welcome to deemix',
back: 'back', back: 'back',
loading: 'loading', loading: 'loading',
download: 'Download {0}', download: 'Download {thing}',
by: 'by {0}', by: 'by {artist}',
in: 'in {0}', in: 'in {album}',
download_hint: 'Download', download_hint: 'Download',
play_hint: 'Play', play_hint: 'Play',
toggle_download_tab_hint: 'Expand/Collapse', toggle_download_tab_hint: 'Expand/Collapse',
@ -32,6 +32,7 @@ const en = {
playlist: 'playlist | playlists', playlist: 'playlist | playlists',
compile: 'compilation | compilations', compile: 'compilation | compilations',
ep: 'ep | eps', ep: 'ep | eps',
bundle: 'bundle | bundles',
more: 'More albums', more: 'More albums',
featured: 'Featured in', featured: 'Featured in',
spotifyPlaylist: 'spotify playlist | spotify playlists', spotifyPlaylist: 'spotify playlist | spotify playlists',
@ -40,6 +41,12 @@ const en = {
} }
}, },
about: { about: {
updates: {
currentVersion: 'Current Version',
versionNotAvailable: 'N/A',
updateAvailable: `You're not running the latest version available: {version}`,
deemixVersion: 'deemix lib version'
},
titles: { titles: {
usefulLinks: 'Useful Links', usefulLinks: 'Useful Links',
bugReports: 'Bug Reports', bugReports: 'Bug Reports',
@ -81,7 +88,7 @@ const en = {
download: 'Download Chart' download: 'Download Chart'
}, },
errors: { errors: {
title: 'Errors for {0}', title: 'Errors for {name}',
ids: { ids: {
invalidURL: 'URL not recognized', invalidURL: 'URL not recognized',
unsupportedURL: 'URL not supported yet', unsupportedURL: 'URL not supported yet',
@ -138,7 +145,7 @@ const en = {
search: { search: {
startSearching: 'Start searching!', startSearching: 'Start searching!',
description: 'You can search a track, a whole album, an artist, a playlist.... everything! You can also paste a Deezer link', description: 'You can search a track, a whole album, an artist, a playlist.... everything! You can also paste a Deezer link',
fans: '{0} fans', fans: '{n} fans',
noResults: 'No results', noResults: 'No results',
noResultsTrack: 'No Tracks found', noResultsTrack: 'No Tracks found',
noResultsAlbum: 'No Albums found', noResultsAlbum: 'No Albums found',
@ -150,10 +157,10 @@ const en = {
toasts: { toasts: {
restoringQueue: 'Restoring download queue...', restoringQueue: 'Restoring download queue...',
queueRestored: 'Download queue restored!', queueRestored: 'Download queue restored!',
addedToQueue: '{0} added to queue', addedToQueue: '{item} added to queue',
addedMoreToQueue: '{0} items added to queue', addedMoreToQueue: '{n} items added to queue',
alreadyInQueue: '{0} is already in queue!', alreadyInQueue: '{item} is already in queue!',
finishDownload: '{0} finished downloading.', finishDownload: '{item} finished downloading.',
allDownloaded: 'All downloads completed!', allDownloaded: 'All downloads completed!',
refreshFavs: 'Refresh completed!', refreshFavs: 'Refresh completed!',
loggingIn: 'Logging in...', loggingIn: 'Logging in...',
@ -163,8 +170,8 @@ const en = {
loggedOut: 'Logged out', loggedOut: 'Logged out',
cancellingCurrentItem: 'Cancelling current item.', cancellingCurrentItem: 'Cancelling current item.',
currentItemCancelled: 'Current item cancelled.', currentItemCancelled: 'Current item cancelled.',
startAddingArtist: 'Adding {0} albums to queue', startAddingArtist: 'Adding {artist} albums to queue',
finishAddingArtist: 'Added {0} albums to queue', finishAddingArtist: 'Added {artist} albums to queue',
startConvertingSpotifyPlaylist: 'Converting spotify tracks to Deezer tracks', startConvertingSpotifyPlaylist: 'Converting spotify tracks to Deezer tracks',
finishConvertingSpotifyPlaylist: 'Spotify playlist converted', finishConvertingSpotifyPlaylist: 'Spotify playlist converted',
loginNeededToDownload: 'You need to log in to download tracks!' loginNeededToDownload: 'You need to log in to download tracks!'
@ -179,7 +186,8 @@ const en = {
question: 'How do I get my own ARL?', question: 'How do I get my own ARL?',
update: 'Update ARL' update: 'Update ARL'
}, },
logout: 'Logout' logout: 'Logout',
login: 'Login via deezer.com'
}, },
appearance: { appearance: {
title: 'Appearance', title: 'Appearance',
@ -279,6 +287,7 @@ const en = {
replayGain: 'Replay Gain', replayGain: 'Replay Gain',
label: 'Album Label', label: 'Album Label',
lyrics: 'Unsynchronized Lyrics', lyrics: 'Unsynchronized Lyrics',
syncedLyrics: 'Synchronized Lyrics',
copyright: 'Copyright', copyright: 'Copyright',
composer: 'Composer', composer: 'Composer',
involvedPeople: 'Involved People' involvedPeople: 'Involved People'
@ -293,7 +302,7 @@ const en = {
nothing: 'Save only the main artist', nothing: 'Save only the main artist',
default: 'Using standard specification', default: 'Using standard specification',
andFeat: 'Using & and feat.', andFeat: 'Using & and feat.',
using: 'Using "{0}"' using: 'Using "{separator}"'
}, },
singleAlbumArtist: 'Save only the main album artist', singleAlbumArtist: 'Save only the main album artist',
albumVariousArtists: 'Keep "Various Artists" in the Album Artists', albumVariousArtists: 'Keep "Various Artists" in the Album Artists',
@ -331,7 +340,8 @@ const en = {
title: 'Spotify Features', title: 'Spotify Features',
clientID: 'Spotify ClientID', clientID: 'Spotify ClientID',
clientSecret: 'Spotify Client Secret', clientSecret: 'Spotify Client Secret',
username: 'Spotify Username' username: 'Spotify Username',
question: 'How do I enable Spotify Features?'
}, },
reset: 'Reset to Default', reset: 'Reset to Default',
save: 'Save', save: 'Save',

View File

@ -3,9 +3,9 @@ const es = {
welcome: 'Bienvenido a deemix', welcome: 'Bienvenido a deemix',
back: 'atrás', back: 'atrás',
loading: 'cargando', loading: 'cargando',
download: 'Descarga {0}', download: 'Descarga {thing}',
by: 'por {0}', by: 'por {artist}',
in: 'en {0}', in: 'en {album}',
download_hint: 'Descargar', download_hint: 'Descargar',
play_hint: 'Reproducir', play_hint: 'Reproducir',
toggle_download_tab_hint: 'Expandir/Colapsar', toggle_download_tab_hint: 'Expandir/Colapsar',
@ -52,9 +52,8 @@ const es = {
contributing: '¿Quieres contribuir a este proyecto? ¡Puedes hacerlo de diferentes maneras!', contributing: '¿Quieres contribuir a este proyecto? ¡Puedes hacerlo de diferentes maneras!',
donations: '¿Quiere contribuir monetariamente? ¡Podrías hacer una donación!' donations: '¿Quiere contribuir monetariamente? ¡Podrías hacer una donación!'
}, },
usesLibrary: usesLibrary: 'Esta aplicación usa la biblioteca <strong>deemix</strong>, que puedes usar para hacer tu propia interfaz de usuario para deemix.',
'Esta aplicación usa la biblioteca <strong>deemix</strong>, que puedes usar para hacer tu propia interfaz de usuario para deemix.', thanks: `Gracias a <strong>rtonno</strong>, <strong>uhwot</strong> y <strong>lollilol</strong> por ayudarme con este proyecto, a <strong>BasCurtiz</strong> y <strong>scarvimane</strong> por hacer el icono.`,
thanks: `Gracias a <strong>rtonno</fuerte>, <strong>uhwot</fuerte> y <strong>lollilol</fuerte> por ayudarme con este proyecto, a <strong>BasCurtiz</fuerte> y <strong>scarvimane</fuerte> por hacer el icono.`,
upToDate: `Mantente al día con las actualizaciones siguiendo el <a href="https://t.me/RemixDevNews" target="_blank">canal de noticias</a> en Telegram.`, upToDate: `Mantente al día con las actualizaciones siguiendo el <a href="https://t.me/RemixDevNews" target="_blank">canal de noticias</a> en Telegram.`,
officialWebsite: 'Página web oficial', officialWebsite: 'Página web oficial',
officialRepo: 'Repositorio de la biblioteca oficial', officialRepo: 'Repositorio de la biblioteca oficial',
@ -62,19 +61,18 @@ const es = {
officialSubreddit: 'Subreddit oficial', officialSubreddit: 'Subreddit oficial',
newsChannel: 'Canal de noticias', newsChannel: 'Canal de noticias',
questions: `Si tienes preguntas o problemas con la aplicación, busca una solución en el <a href="https://www.reddit.com/r/deemix" target="_blank">subreddit</a> primero. Luego, si no encuentras nada puedes hacer un post con tu problema en el subreddit.`, questions: `Si tienes preguntas o problemas con la aplicación, busca una solución en el <a href="https://www.reddit.com/r/deemix" target="_blank">subreddit</a> primero. Luego, si no encuentras nada puedes hacer un post con tu problema en el subreddit.`,
beforeReporting: `Antes de informar de un error asegúrese de que está ejecutando la última versión de la aplicación y que lo que quiere informar es en realidad un error y no algo que está mal sólo en su extremo.`, beforeReporting: 'Antes de informar de un error asegúrese de que está ejecutando la última versión de la aplicación y que lo que quiere informar es en realidad un error y no algo que está mal sólo en su extremo.',
beSure: `Asegúrate de que el fallo es reproducible en otras máquinas y también <strong>NO</strong> reporte un fallo si ya ha sido reportado.`, beSure: 'Asegúrate de que el fallo es reproducible en otras máquinas y también <strong>NO</strong> reporte un fallo si ya ha sido reportado.',
duplicateReports: 'Los informes de errores duplicados se cerrarán, así que manténgase al tanto de eso.', duplicateReports: 'Los informes de errores duplicados se cerrarán, así que manténgase al tanto de eso.',
dontOpenIssues: `<strong>NO</strong> abra problemas para hacer preguntas, hay un subreddit para eso.`, dontOpenIssues: '<strong>NO</strong> abra problemas para hacer preguntas, hay un subreddit para eso.',
newUI: `Si tienes fluidez en Python podrías intentar hacer una nueva interfaz de usuario para la aplicación usando la biblioteca base, o arreglar los errores de la biblioteca con una petición pull en el <a href="https://codeberg.org/RemixDev/deemix" target="_blank">repo</a>.`, newUI: `Si tienes fluidez en Python podrías intentar hacer una nueva interfaz de usuario para la aplicación usando la biblioteca base, o arreglar los errores de la biblioteca con una petición pull en el <a href="https://codeberg.org/RemixDev/deemix" target="_blank">repo</a>.`,
acceptFeatures: `También acepto características, pero no cosas complejas, ya que se pueden implementar directamente en la aplicación y no en la biblioteca.`, acceptFeatures: 'También acepto características, pero no cosas complejas, ya que se pueden implementar directamente en la aplicación y no en la biblioteca.',
otherLanguages: `¡Si dominas otro lenguaje de programación podrías intentar portar Deemix a otros lenguajes de programación!`, otherLanguages: '¡Si dominas otro lenguaje de programación podrías intentar portar Deemix a otros lenguajes de programación!',
understandingCode: `¿Necesitas ayuda para entender el código? Sólo tienes que poner RemixDev en Telegram o Reddit.`, understandingCode: '¿Necesitas ayuda para entender el código? Sólo tienes que poner RemixDev en Telegram o Reddit.',
contributeWebUI: `Si conoces Vue.js (JavaScript), HTML o CSS podrías contribuir a la <a href="https://codeberg.org/RemixDev/deemix-webui" target="_blank">WebUI</a>.`, contributeWebUI: `Si conoces Vue.js (JavaScript), HTML o CSS podrías contribuir a la <a href="https://codeberg.org/RemixDev/deemix-webui" target="_blank">WebUI</a>.`,
itsFree: `Debes recordar que <strong>este es un proyecto libre</fuerte> y <strong>debes apoyar a los artistas que amas</fuerte> antes de apoyar a los desarrolladores.`, itsFree: 'Debes recordar que <strong>este es un proyecto libre</strong> y <strong>debes apoyar a los artistas que amas</strong> antes de apoyar a los desarrolladores.',
notObligated: `No te sientas obligado a donar, ¡te aprecio de todas formas!`, notObligated: 'No te sientas obligado a donar, ¡te aprecio de todas formas!',
lincensedUnder: `Esta obra está autorizada bajo una lincensedUnder: `Esta obra está autorizada bajo una <a rel="licencia" href="https://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank">GNU Licencia Pública General 3.0</a>.`
<a rel="licencia" href="https://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank">GNU Licencia Pública General 3.0</a>.`
}, },
charts: { charts: {
title: 'Tablas', title: 'Tablas',
@ -82,7 +80,7 @@ const es = {
download: 'Descargar la tabla' download: 'Descargar la tabla'
}, },
errors: { errors: {
title: 'Errores para {0}', title: 'Errores para {name}',
ids: { ids: {
invalidURL: 'No se reconoce la URL', invalidURL: 'No se reconoce la URL',
unsupportedURL: 'La URL no está soportada aún', unsupportedURL: 'La URL no está soportada aún',
@ -139,7 +137,7 @@ const es = {
search: { search: {
startSearching: '¡Comienza a buscar!', startSearching: '¡Comienza a buscar!',
description: 'Puedes buscar un tema, un álbum entero, un artista, una lista de reproducción... ¡todo! También puedes pegar un enlace de Deezer', description: 'Puedes buscar un tema, un álbum entero, un artista, una lista de reproducción... ¡todo! También puedes pegar un enlace de Deezer',
fans: '{0} fanáticos', fans: '{n} fanáticos',
noResults: 'No hay resultados', noResults: 'No hay resultados',
noResultsTrack: 'No se encontraron pistas', noResultsTrack: 'No se encontraron pistas',
noResultsAlbum: 'No se encontraron álbumes', noResultsAlbum: 'No se encontraron álbumes',
@ -151,10 +149,10 @@ const es = {
toasts: { toasts: {
restoringQueue: 'Restaurando cola de descarga...', restoringQueue: 'Restaurando cola de descarga...',
queueRestored: '¡Cola de descarga restaurada!', queueRestored: '¡Cola de descarga restaurada!',
addedToQueue: '{0} añadidos a la cola', addedToQueue: '{item} añadidos a la cola',
addedMoreToQueue: '{0} elementos añadidos a la cola', addedMoreToQueue: '{n} elementos añadidos a la cola',
alreadyInQueue: '¡{0} ya está en la cola!', alreadyInQueue: '¡{item} ya está en la cola!',
finishDownload: '{0} terminado de descargar.', finishDownload: '{item} terminado de descargar.',
allDownloaded: '¡Todas las descargas se han completado!', allDownloaded: '¡Todas las descargas se han completado!',
refreshFavs: '¡Actualización completada!', refreshFavs: '¡Actualización completada!',
loggingIn: 'Conectando...', loggingIn: 'Conectando...',
@ -164,8 +162,8 @@ const es = {
loggedOut: 'Desconectado', loggedOut: 'Desconectado',
cancellingCurrentItem: 'Cancelando el elemento actual.', cancellingCurrentItem: 'Cancelando el elemento actual.',
currentItemCancelled: 'El elemento actual se ha cancelado.', currentItemCancelled: 'El elemento actual se ha cancelado.',
startAddingArtist: 'Añadiendo {0} álbumes a la cola', startAddingArtist: 'Añadiendo {artist} álbumes a la cola',
finishAddingArtist: 'Añadido {0} álbumes a la cola', finishAddingArtist: 'Añadido {artist} álbumes a la cola',
startConvertingSpotifyPlaylist: 'Convertir las pistas de Spotify en pistas de Deezer', startConvertingSpotifyPlaylist: 'Convertir las pistas de Spotify en pistas de Deezer',
finishConvertingSpotifyPlaylist: 'Lista de reproducción de Spotify convertida', finishConvertingSpotifyPlaylist: 'Lista de reproducción de Spotify convertida',
loginNeededToDownload: '¡Necesitas iniciar sesión para descargar títulos!' loginNeededToDownload: '¡Necesitas iniciar sesión para descargar títulos!'
@ -253,6 +251,8 @@ const es = {
both: 'Ambos, jpeg y png' both: 'Ambos, jpeg y png'
}, },
jpegImageQuality: 'Calidad de la imagen JPEG', jpegImageQuality: 'Calidad de la imagen JPEG',
embeddedArtworkPNG: 'Guardar las imágenes incrustadas como PNG',
embeddedPNGWarning: 'Las PNG no están oficialmente soportadas por Deezer y puede encontrar errores.',
imageSizeWarning: 'Nada por encima de x1200 no es usado oficialmente por Deezer, tú podrías encontrar inconvenientes' imageSizeWarning: 'Nada por encima de x1200 no es usado oficialmente por Deezer, tú podrías encontrar inconvenientes'
}, },
tags: { tags: {
@ -291,7 +291,7 @@ const es = {
nothing: 'Guardar sólo el artista principal', nothing: 'Guardar sólo el artista principal',
default: 'Usar la especificación estándar', default: 'Usar la especificación estándar',
andFeat: 'Usar & y feat.', andFeat: 'Usar & y feat.',
using: 'Usar "{0}"' using: 'Usar "{separator}"'
}, },
singleAlbumArtist: 'Guardar sólo el artista principal del álbum', singleAlbumArtist: 'Guardar sólo el artista principal del álbum',
albumVariousArtists: 'Mantén "Various Artists" en los artistas del álbum', albumVariousArtists: 'Mantén "Various Artists" en los artistas del álbum',

View File

@ -1,11 +1,11 @@
const fr = { const fr = {
globals: { globals: {
welcome: 'Bienvenue sur deemix', welcome: 'Bienvenue dans deemix',
back: 'retour', back: 'retour',
loading: 'chargement', loading: 'chargement en cours',
download: 'Téléchargement {0}', download: 'Télécharger {thing}',
by: 'par {0}', by: 'par {artist}',
in: 'en {0}', in: 'dans {album}',
download_hint: 'Télécharger', download_hint: 'Télécharger',
play_hint: 'Lire', play_hint: 'Lire',
toggle_download_tab_hint: 'Développer/Réduire', toggle_download_tab_hint: 'Développer/Réduire',
@ -28,18 +28,25 @@ const fr = {
title: 'titre | titres', title: 'titre | titres',
track: 'piste | pistes', track: 'piste | pistes',
trackN: '0 piste | {n} piste | {n} pistes', trackN: '0 piste | {n} piste | {n} pistes',
releaseN: '0 parution | {n} parution | {n} parutions', releaseN: '0 sortie | {n} sortie | {n} sorties',
playlist: 'playlist | playlists', playlist: 'playlist | playlists',
compile: 'compilation | compilations', compile: 'compilation | compilations',
ep: 'ep | eps', ep: 'ep | eps',
bundle: 'bundle | bundles',
more: "Plus d'albums", more: "Plus d'albums",
featured: 'En vedette dans', featured: 'Apparaît dans',
spotifyPlaylist: 'playlist spotify | playlists spotify', spotifyPlaylist: 'playlist spotify | playlists spotify',
releaseDate: 'date de parution', releaseDate: 'date de sortie',
error: 'erreur' error: 'erreur'
} }
}, },
about: { about: {
updates: {
currentVersion: 'Version Actuelle',
versionNotAvailable: 'N/A',
updateAvailable: "Vous n'utilisez pas la dernière version disponible : {version}",
deemixVersion: 'Version de la bibliothèque deemix'
},
titles: { titles: {
usefulLinks: 'Liens Utiles', usefulLinks: 'Liens Utiles',
bugReports: 'Rapports De Bug', bugReports: 'Rapports De Bug',
@ -48,45 +55,45 @@ const fr = {
license: 'Licence' license: 'Licence'
}, },
subtitles: { subtitles: {
bugReports: 'Y a-t-il quelque chose qui ne fonctionne pas dans deemix ? Dites-le nous !', bugReports: 'Quelque chose ne fonctionne pas dans deemix ? Contactez-nous !',
contributing: 'Vous souhaitez contribuer à ce projet ? Vous pouvez le faire de différentes manières !', contributing: 'Vous souhaitez contribuer à ce projet ? Vous pouvez le faire de différentes manières !',
donations: 'Vous souhaitez contribuer financièrement ? Vous pouvez faire un don !' donations: 'Vous souhaitez contribuer financièrement ? Vous pouvez faire un don !'
}, },
usesLibrary: 'Cette application utilise la bibliothèque <strong>deemix</strong>, que vous pouvez exploiter afin de créer votre propre interface utilisateur pour deemix.', usesLibrary: 'Cette application utilise la bibliothèque <strong>deemix</strong>, que vous pouvez exploiter afin de créer votre propre interface utilisateur pour deemix.',
thanks: "Merci à <strong>rtonno</strong>, <strong>uhwot</strong> et <strong>lollilol</strong> de m'avoir aidé dans ce projet ainsi qu'à <strong>BasCurtiz</strong> et <strong>scarvimane</strong> pour avoir réalisé l'icône.", thanks: "Merci à <strong>rtonno</strong>, <strong>uhwot</strong> et <strong>lollilol</strong> de m'avoir aidé dans ce projet ainsi qu'à <strong>BasCurtiz</strong> et <strong>scarvimane</strong> pour la création de l'icône.",
upToDate: 'Restez informé des mises à jour en suivant le <a href="https://t.me/RemixDevNews" target="_blank">canal de nouveautés</a> sur Telegram.', upToDate: `Restez informé des mises à jour en suivant le <a href="https://t.me/RemixDevNews" target="_blank">canal d'informations</a> sur Telegram.`,
officialWebsite: 'Site Officiel', officialWebsite: 'Site Officiel',
officialRepo: 'Répertoire De Dépôt Officiel De La Bibiliothèque', officialRepo: 'Répertoire De Dépôt Officiel De La Bibliothèque',
officialWebuiRepo: 'Répertoire De Dépôt Officiel De La WebUI', officialWebuiRepo: 'Répertoire De Dépôt Officiel De La WebUI',
officialSubreddit: 'Subreddit Officiel', officialSubreddit: 'Subreddit Officiel',
newsChannel: 'Canal De Nouveautés', newsChannel: "Canal d'Informations",
questions: `Si vous avez des questions ou des problèmes avec l'application, cherchez d'abord une solution dans le <a href="https://www.reddit.com/r/deemix" target="_blank">subreddit</a>. Ensuite, si vous ne trouvez rien, vous pouvez publier un message avec votre problème dans le subreddit.`, questions: `Si vous avez des questions ou des problèmes avec l'application, cherchez d'abord une solution dans le <a href="https://www.reddit.com/r/deemix" target="_blank">subreddit</a>. Ensuite, si la solution ne s'y trouve pas, vous pouvez publier un message dans le subreddit en décrivant votre problème.`,
beforeReporting: "Avant de signaler un bug, assurez-vous que vous exécutez la dernière version de l'application et que ce que vous voulez signaler est bien un bug et non quelque chose qui ne va pas de votre côté.", beforeReporting: "Avant de signaler un bug, assurez-vous que vous utilisez la version la plus récente de l'application. Vérifiez que vous souhaitez nous rapporter un bug et non quelque chose qui ne fonctionne pas uniquement de votre côté.",
beSure: "Assurez-vous que le bug est reproductible sur d'autres machines et aussi de <strong>NE PAS</strong> signaler un bug si celui-ci a déjà été mentionné.", beSure: "Assurez-vous que le bug soit reproductible sur d'autres appareils mais aussi de <strong>NE PAS</strong> signaler un bug si celui-ci a déjà été recensé.",
duplicateReports: 'Les doublons de rapports de bug seront supprimés, alors gardez un œil sur cela.', duplicateReports: "Les rapports de bug répétitifs seront supprimés, merci d'en prendre bonne note.",
dontOpenIssues: "<strong>NE PAS</strong> ouvrir un nouveau problème pour poser des questions, il existe un subreddit pour cela.", dontOpenIssues: "<strong>NE PAS</strong> rapporter de problème s'il ne s'agit que de simples questions. Un subreddit existe pour ces questions.",
newUI: `Si vous maîtrisez python, vous pouvez essayer de créer une nouvelle interface utilisateur pour l'application à l'aide de la bibliothèque de base, ou corriger des bugs dans la bibliothèque à l'aide d'une demande de fusion de branches (pull request) sur le <a href="https://codeberg.org/RemixDev/deemix" target="_blank">répertoire de dépôt</a>.`, newUI: `Si vous maîtrisez python, vous pouvez essayer de créer une nouvelle interface utilisateur pour l'application à l'aide de la bibliothèque de base, ou corriger des bugs dans la bibliothèque à l'aide d'une demande de fusion de branches (pull request) sur le <a href="https://codeberg.org/RemixDev/deemix" target="_blank">répertoire de dépôt</a>.`,
acceptFeatures: "J'accepte également les fonctionnalités, mais pas de choses complexes, car elles peuvent être implémentées directement dans l'application et non dans la bibliothèque.", acceptFeatures: "J'accepte également les nouvelles fonctionnalités, mais pas de choses complexes, dans la mesure où elles peuvent être implémentées directement dans l'application et non dans la bibliothèque.",
otherLanguages: "Si vous maîtrisez un autre langage de programmation, vous pouvez essayer de transposer deemix dans d'autres langages de programmation !", otherLanguages: "Si vous maîtrisez un autre langage de programmation, vous pouvez essayer de transposer deemix dans ce dernier !",
understandingCode: "Vous avez besoin d'aide pour comprendre le code ? Il suffit de contacter RemixDev sur Telegram ou Reddit.", understandingCode: "Vous avez besoin d'aide pour comprendre le code ? Il suffit de contacter RemixDev sur Telegram ou Reddit.",
contributeWebUI: `Si vous vous y connaissez en Vue.js (JavaScript), HTML ou CSS vous pouvez contribuer à la <a href="https://codeberg.org/RemixDev/deemix-webui" target="_blank">WebUI</a>.`, contributeWebUI: `Si vous vous y connaissez en Vue.js (JavaScript), HTML ou CSS, vous pouvez contribuer à la <a href="https://codeberg.org/RemixDev/deemix-webui" target="_blank">WebUI</a>.`,
itsFree: "N'oubliez pas que <strong>ceci est un projet gratuit</strong> et que <strong>vous devez soutenir les artistes que vous appréciez</strong> avant de supporter les développeurs.", itsFree: "N'oubliez pas que <strong>ce projet est libre</strong> et qu'il est important de <strong>soutenir vos artistes préférés</strong> avant de supporter les développeurs.",
notObligated: "Ne vous sentez pas obligé de faire un don, je vous apprécie quand même !", notObligated: "Ne vous sentez pas obligé de faire un don, vous êtes tout de même apprécié !",
lincensedUnder: `Ce projet est autorisé dans le cadre d'une lincensedUnder: `Ce projet s'inscrit dans le cadre de la
<a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.fr.html" target="_blank">Licence publique générale GNU 3.0</a>.` <a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank">Licence publique générale GNU, version 3</a>.`
}, },
charts: { charts: {
title: 'Hit-Parade', title: 'Classements',
changeCountry: 'Changer De Pays', changeCountry: 'Changer De Pays',
download: 'Télécharger Le Hit-Parade' download: 'Télécharger Le Classement'
}, },
errors: { errors: {
title: 'Erreurs pour {0}', title: 'Erreurs pour {name}',
ids: { ids: {
invalidURL: "Cette URL n'est pas reconnue", invalidURL: "Cette URL n'est pas reconnue",
unsupportedURL: "Cette URL n'est pas supportée actuellement", unsupportedURL: "Cette URL n'est actuellement pas supportée",
ISRCnotOnDeezer: "L'ISRC de la piste est indisponible sur Deezer", ISRCnotOnDeezer: "L'ISRC de la piste est indisponible sur Deezer",
notYourPrivatePlaylist: "Vous ne pouvez pas télécharger les playlists privées de quelqu'un d'autre.", notYourPrivatePlaylist: "Vous n'êtes pas autorisé à télécharger les playlists privées de quelqu'un d'autre.",
spotifyDisabled: 'Les Fonctionnalités Spotify ne sont pas configurées correctement.', spotifyDisabled: 'Les Fonctionnalités Spotify ne sont pas configurées correctement.',
trackNotOnDeezer: 'La piste est introuvable sur Deezer !', trackNotOnDeezer: 'La piste est introuvable sur Deezer !',
albumNotOnDeezer: "L'album est introuvable sur Deezer !", albumNotOnDeezer: "L'album est introuvable sur Deezer !",
@ -108,16 +115,16 @@ const fr = {
noTracks: "Aucune Piste Favorite n'a été trouvée" noTracks: "Aucune Piste Favorite n'a été trouvée"
}, },
home: { home: {
needTologin: 'Vous devez vous connecter à votre compte Deezer avant de pouvoir commencer les téléchargements.', needTologin: 'Vous devez vous connecter à votre compte Deezer avant de pouvoir démarrer un téléchargement.',
openSettings: 'Ouvrir Les Paramètres', openSettings: 'Ouvrir Les Paramètres',
sections: { sections: {
popularPlaylists: 'Playlists populaires', popularPlaylists: 'Playlists les plus écoutées',
popularAlbums: 'Albums les plus diffusés' popularAlbums: 'Albums les plus écoutés'
} }
}, },
linkAnalyzer: { linkAnalyzer: {
info: "Vous pouvez utiliser cette section pour obtenir plus d'informations sur le lien que vous essayez de télécharger.", info: "Vous pouvez utiliser cette section pour obtenir davantage d'informations sur le lien que vous essayez de télécharger.",
useful: "C'est utile si vous essayer de télécharger des pistes qui ne sont pas disponibles dans votre pays et que vous souhaitez savoir où elles sont disponibles, par exemple.", useful: "C'est utile si vous essayez, par exemple, de télécharger des pistes indisponibles dans votre pays et que vous souhaitez savoir où elles sont disponibles.",
linkNotSupported: "Ce lien n'est pas encore pris en charge", linkNotSupported: "Ce lien n'est pas encore pris en charge",
linkNotSupportedYet: "Il semble que ce lien ne soit pas encore pris en charge, essayez d'en analyser un autre.", linkNotSupportedYet: "Il semble que ce lien ne soit pas encore pris en charge, essayez d'en analyser un autre.",
table: { table: {
@ -126,8 +133,8 @@ const fr = {
upc: 'UPC', upc: 'UPC',
duration: 'Durée', duration: 'Durée',
diskNumber: 'Numéro De Disque', diskNumber: 'Numéro De Disque',
trackNumber: 'Numéro De Disque', trackNumber: 'Numéro De Piste',
releaseDate: 'Date De Parution', releaseDate: 'Date De Sortie',
bpm: 'BPM', bpm: 'BPM',
label: 'Label', label: 'Label',
recordType: "Type d'Enregistrement", recordType: "Type d'Enregistrement",
@ -136,36 +143,36 @@ const fr = {
} }
}, },
search: { search: {
startSearching: 'Commencer une recherche !', startSearching: 'Démarrer une recherche !',
description: 'Vous pouvez rechercher une piste, un album entier, un artiste, une playlist... tout ! Vous pouvez également copier-coller un lien Deezer', description: 'Vous pouvez rechercher une piste, un album entier, un artiste, une playlist... tout ce que vous voulez ! Vous pouvez également coller un lien Deezer.',
fans: '{0} fans', fans: '{n} fans',
noResults: 'Aucun résultat', noResults: 'Aucun résultat',
noResultsTrack: "Aucune piste n'a été trouvée", noResultsTrack: "Aucune piste n'a été trouvée",
noResultsAlbum: "Aucun album n'a été trouvé", noResultsAlbum: "Aucun album n'a été trouvé",
noResultsArtist: "Aucun artiste n'a été trouvé", noResultsArtist: "Aucun artiste n'a été trouvé",
noResultsPlaylist: "Aucune playlist n'a été trouvée" noResultsPlaylist: "Aucune playlist n'a été trouvée"
}, },
searchbar: 'Recherchez tout ce que vous voulez (ou copiez-collez simplement un lien)', searchbar: 'Saisissez une requête (ou collez simplement un lien)',
downloads: 'téléchargements', downloads: 'téléchargements',
toasts: { toasts: {
restoringQueue: "Restauration de la file d'attente de téléchargement...", restoringQueue: "Restauration de la file d'attente de téléchargement...",
queueRestored: "La file d'attente de téléchargement a été restaurée !", queueRestored: "La file d'attente de téléchargement a été restaurée !",
addedToQueue: "{0} ajouté à la file d'attente", addedToQueue: "{item} ajouté à la file d'attente",
addedMoreToQueue: "{0} éléments ajoutés à la file d'attente", addedMoreToQueue: "{n} éléments ajoutés à la file d'attente",
alreadyInQueue: "{0} est déjà en file d'attente !", alreadyInQueue: "{item} est déjà dans la file d'attente !",
finishDownload: '{0} a été téléchargé.', finishDownload: '{item} a été téléchargé.',
allDownloaded: 'Tous les téléchargements sont terminés !', allDownloaded: 'Tous les téléchargements sont terminés !',
refreshFavs: 'Actualisation terminée !', refreshFavs: 'Actualisation terminée !',
loggingIn: 'Connexion...', loggingIn: 'Connexion en cours...',
loggedIn: 'Connecté', loggedIn: 'Connecté',
alreadyLogged: 'Déjà connecté', alreadyLogged: 'Déjà connecté',
loginFailed: 'Connexion impossible', loginFailed: 'Connexion impossible',
loggedOut: 'Déconnecté', loggedOut: 'Déconnecté',
cancellingCurrentItem: "Annulation de l'élément actuel.", cancellingCurrentItem: "Annulation de l'élément actuel.",
currentItemCancelled: 'Élément actuel annulé.', currentItemCancelled: 'Élément actuel annulé.',
startAddingArtist: "Ajout de {0} albums en file d'attente", startAddingArtist: "Ajout des albums de {artist} à la file d'attente",
finishAddingArtist: "{0} albums ajoutés en file d'attente", finishAddingArtist: "Les albums de {artist} ont été ajoutés à la file d'attente",
startConvertingSpotifyPlaylist: 'Conversion de pistes Spotify en pistes Deezer', startConvertingSpotifyPlaylist: 'Conversion de pistes Spotify en équivalents Deezer',
finishConvertingSpotifyPlaylist: 'Playlist Spotify convertie', finishConvertingSpotifyPlaylist: 'Playlist Spotify convertie',
loginNeededToDownload: 'Vous devez vous connecter pour pouvoir télécharger des pistes !' loginNeededToDownload: 'Vous devez vous connecter pour pouvoir télécharger des pistes !'
}, },
@ -176,41 +183,42 @@ const fr = {
title: 'Connexion', title: 'Connexion',
loggedIn: 'Vous êtes connecté en tant que {username}', loggedIn: 'Vous êtes connecté en tant que {username}',
arl: { arl: {
question: 'Comment puis-je obtenir mon ARL personnel ?', question: 'Comment obtenir mon ARL personnel ?',
update: "Mettre à jour l'ARL" update: "Mettre à jour l'ARL"
}, },
logout: 'Déconnexion' logout: 'Déconnexion',
login: 'Connexion via deezer.com'
}, },
appearance: { appearance: {
title: 'Apparence', title: 'Apparence',
slimDownloadTab: 'Onglet de téléchargement plus petit' slimDownloadTab: 'Onglet de téléchargement compact'
}, },
downloadPath: { downloadPath: {
title: 'Emplacement De Téléchargement' title: 'Emplacement De Téléchargement'
}, },
templates: { templates: {
title: 'Gabarits', title: 'Modèles',
tracknameTemplate: 'Gabarit pour le nom de piste', tracknameTemplate: 'Modèle pour le nom de piste',
albumTracknameTemplate: "Gabarit pour le nom de piste de l'album", albumTracknameTemplate: "Modèle pour le nom de piste de l'album",
playlistTracknameTemplate: 'Gabarit pour le nom de piste de la playlist' playlistTracknameTemplate: 'Modèle pour le nom de piste de la playlist'
}, },
folders: { folders: {
title: 'Dossiers', title: 'Dossiers',
createPlaylistFolder: 'Générer des dossiers par playlist', createPlaylistFolder: 'Générer des dossiers par playlist',
playlistNameTemplate: 'Gabarit pour le nom du dossier de playlist', playlistNameTemplate: 'Modèle pour le nom du dossier de playlist',
createArtistFolder: 'Générer des dossiers par artiste', createArtistFolder: 'Générer des dossiers par artiste',
artistNameTemplate: "Gabarit pour le nom du dossier d'artiste", artistNameTemplate: "Modèle pour le nom du dossier d'artiste",
createAlbumFolder: 'Générer des dossiers par album', createAlbumFolder: 'Générer des dossiers par album',
albumNameTemplate: "Gabarit pour le nom du dossier d'album", albumNameTemplate: "Modèle pour le nom du dossier d'album",
createCDFolder: 'Générer des dossiers par CD', createCDFolder: 'Générer des dossiers par CD',
createStructurePlaylist: 'Créer une structure de dossiers pour les playlists', createStructurePlaylist: 'Générer une structure de dossiers pour les playlists',
createSingleFolder: 'Créer une structure de dossiers pour les singles' createSingleFolder: 'Générer une structure de dossiers pour les singles'
}, },
trackTitles: { trackTitles: {
title: 'Titres de pistes', title: 'Titres des pistes',
padTracks: "Longueur uniforme des numéros de piste (ajoute automatiquement des zéros devant le numéro initial de la piste)", padTracks: "Longueur uniforme des numéros de piste (ajoute automatiquement des zéros devant le numéro initial de la piste)",
paddingSize: 'Nombre de zéros à ajouter en permanance devant le numéro initial de la piste', paddingSize: 'Nombre de zéros à ajouter en permanence devant le numéro initial de la piste',
illegalCharacterReplacer: 'Remplacement de caractère inapproprié' illegalCharacterReplacer: "Substitut aux caractères non autorisés (dans les noms de fichiers et de dossiers)"
}, },
downloads: { downloads: {
title: 'Téléchargements', title: 'Téléchargements',
@ -222,30 +230,30 @@ const fr = {
1: 'MP3 128kbps' 1: 'MP3 128kbps'
}, },
overwriteFile: { overwriteFile: {
title: 'Dois-je écraser les fichiers ?', title: 'Les fichiers doivent-ils être écrasés ?',
y: 'Oui, écraser le fichier', y: 'Oui, écraser le fichier',
n: 'Non, ne pas écraser le fichier', n: 'Non, ne pas écraser le fichier',
t: 'Écraser uniquement les métadonnées', t: 'Écraser uniquement les métadonnées',
b: 'Non, conserver les deux fichiers et ajouter un numéro au doublon', b: 'Non, conserver les deux fichiers et ajouter un numéro au doublon',
e: "Non, et ne pas tenir compte de l'extension du fichier" e: "Non, et ne pas tenir compte de l'extension du fichier"
}, },
fallbackBitrate: "Recourir à des débits plus faibles si le débit préféré n'est pas disponible", fallbackBitrate: "Recourir à un débit plus faible si le débit préféré n'est pas disponible",
fallbackSearch: "Rechercher la piste si le lien original n'est pas disponible", fallbackSearch: "Rechercher la piste si le lien original n'est pas disponible",
logErrors: "Créer un fichier journal d'erreurs", logErrors: "Créer un fichier journal d'erreurs",
logSearched: 'Créer un fichier journal des pistes recherchées', logSearched: 'Créer un fichier journal des pistes recherchées',
createM3U8File: 'Créer un fichier de playlist', createM3U8File: 'Créer un fichier de playlist',
syncedLyrics: 'Créer des fichiers .lyr (Paroles Synchronisées)', syncedLyrics: 'Créer des fichiers .lyr (Paroles Synchronisées)',
playlistFilenameTemplate: 'Gabarit du nom de fichier de la playlist', playlistFilenameTemplate: 'Modèle du nom de fichier de la playlist',
saveDownloadQueue: "Enregistrer la file d'attente de téléchargement à la fermeture de l'application" saveDownloadQueue: "Enregistrer la file d'attente de téléchargement à la fermeture de l'application"
}, },
covers: { covers: {
title: "Pochettes d'albums", title: "Pochettes d'albums",
saveArtwork: 'Enregistrer Les Pochettes', saveArtwork: 'Enregistrer Les Pochettes',
coverImageTemplate: 'Gabarit pour le nom de la pochette', coverImageTemplate: 'Modèle pour le nom de la pochette',
saveArtworkArtist: "Enregistrer l'image de l'artiste", saveArtworkArtist: "Enregistrer l'image de l'artiste",
artistImageTemplate: "Gabarit pour le nom de l'image de l'artiste", artistImageTemplate: "Modèle pour le nom de l'image de l'artiste",
localArtworkSize: "Taille de l'illustration locale", localArtworkSize: "Taille de l'illustration locale",
embeddedArtworkSize: "Taille de l'illustration incorporée", embeddedArtworkSize: "Taille de l'illustration incorporée aux fichiers audio",
localArtworkFormat: { localArtworkFormat: {
title: "Dans quel format souhaitez-vous l'illustration locale ?", title: "Dans quel format souhaitez-vous l'illustration locale ?",
jpg: 'Une image jpeg', jpg: 'Une image jpeg',
@ -253,9 +261,9 @@ const fr = {
both: 'À la fois jpeg et png' both: 'À la fois jpeg et png'
}, },
jpegImageQuality: "Qualité de l'image JPEG", jpegImageQuality: "Qualité de l'image JPEG",
embeddedArtworkPNG: "Enregistrer l'illustration incorporée en tant qu'image PNG", embeddedArtworkPNG: "Enregistrer l'illustration incorporée aux fichiers audio en tant que PNG",
embeddedPNGWarning: 'Les images PNG ne sont pas officiellement utilisées par Deezer et pourraient causer des problèmes', embeddedPNGWarning: 'Les images PNG ne sont pas officiellement utilisées par Deezer et pourraient causer des problèmes.',
imageSizeWarning: "Toute valeur supérieure à x1200 n'est pas officiellement utilisée par Deezer, vous pourriez donc rencontrer des problèmes" imageSizeWarning: "Toute valeur supérieure à x1200 n'est pas officiellement supportée par Deezer, vous pourriez donc rencontrer des problèmes."
}, },
tags: { tags: {
head: 'Métadonnées à sauvegarder', head: 'Métadonnées à sauvegarder',
@ -279,6 +287,7 @@ const fr = {
replayGain: 'Gain En Relecture (Replay Gain)', replayGain: 'Gain En Relecture (Replay Gain)',
label: "Label De l'Album", label: "Label De l'Album",
lyrics: 'Paroles Non-Synchronisées', lyrics: 'Paroles Non-Synchronisées',
syncedLyrics: 'Paroles Synchronisées',
copyright: "Droits d'Auteur (Copyright)", copyright: "Droits d'Auteur (Copyright)",
composer: 'Compositeur', composer: 'Compositeur',
involvedPeople: 'Personnes Impliquées' involvedPeople: 'Personnes Impliquées'
@ -286,14 +295,14 @@ const fr = {
other: { other: {
title: 'Autre', title: 'Autre',
savePlaylistAsCompilation: 'Enregistrer les playlists en tant que compilation', savePlaylistAsCompilation: 'Enregistrer les playlists en tant que compilation',
useNullSeparator: 'Utiliser un séparateur nul', useNullSeparator: 'Utiliser le caractère NULL comme séparateur',
saveID3v1: 'Enregistrer également les métadonnées ID3v1', saveID3v1: 'Enregistrer également les métadonnées ID3v1',
multiArtistSeparator: { multiArtistSeparator: {
title: 'Comment aimeriez-vous séparer les artistes ?', title: 'Comment aimeriez-vous séparer les artistes ?',
nothing: "Enregistrer uniquement l'artiste principal", nothing: "Enregistrer uniquement l'artiste principal",
default: 'En utilisant la spécification standard', default: 'En utilisant la spécification standard',
andFeat: 'En utilisant & et feat.', andFeat: 'En utilisant & et feat.',
using: 'En utilisant "{0}"' using: 'En utilisant "{separator}"'
}, },
singleAlbumArtist: "Enregistrer uniquement l'artiste principal de l'album", singleAlbumArtist: "Enregistrer uniquement l'artiste principal de l'album",
albumVariousArtists: `Conserver "Various Artists" dans les Artistes de l'Album`, albumVariousArtists: `Conserver "Various Artists" dans les Artistes de l'Album`,
@ -306,7 +315,7 @@ const fr = {
day: 'JJ' day: 'JJ'
}, },
featuredToTitle: { featuredToTitle: {
title: 'Que dois-je faire avec les artistes participants (featuring) ?', title: 'Que faire des artistes participants (featuring) ?',
0: 'Ne rien faire', 0: 'Ne rien faire',
1: 'Les retirer du titre de la piste', 1: 'Les retirer du titre de la piste',
3: "Les supprimer du titre de la piste et du titre de l'album", 3: "Les supprimer du titre de la piste et du titre de l'album",
@ -331,7 +340,8 @@ const fr = {
title: 'Fonctionnalités Spotify', title: 'Fonctionnalités Spotify',
clientID: 'clientID Spotify', clientID: 'clientID Spotify',
clientSecret: 'Client Secret Spotify', clientSecret: 'Client Secret Spotify',
username: "Nom d'utilisateur Spotify" username: "Nom d'utilisateur Spotify",
question: 'Comment activer les Fonctionnalités Spotify ?'
}, },
reset: 'Rétablir les valeurs par défaut', reset: 'Rétablir les valeurs par défaut',
save: 'Sauvegarder', save: 'Sauvegarder',
@ -344,9 +354,9 @@ const fr = {
sidebar: { sidebar: {
home: 'accueil', home: 'accueil',
search: 'recherche', search: 'recherche',
charts: 'hit-parade', charts: 'classements',
favorites: 'favoris', favorites: 'favoris',
linkAnalyzer: 'analyseur de liens', linkAnalyzer: 'analyseur de lien',
settings: 'paramètres', settings: 'paramètres',
about: 'à propos' about: 'à propos'
}, },

View File

@ -3,9 +3,9 @@ const hr = {
welcome: 'Dobrodošli u deemix', welcome: 'Dobrodošli u deemix',
back: 'nazad', back: 'nazad',
loading: 'učitavanje', loading: 'učitavanje',
download: 'Preuzmi {0}', download: 'Preuzmi {thing}',
by: 'by {0}', by: 'by {artist}',
in: 'u {0}', in: 'u {album}',
download_hint: 'Preuzmi', download_hint: 'Preuzmi',
play_hint: 'Play', play_hint: 'Play',
toggle_download_tab_hint: 'Proširi/Smanji', toggle_download_tab_hint: 'Proširi/Smanji',
@ -74,7 +74,7 @@ const hr = {
download: 'Preuzmi ljestvicu' download: 'Preuzmi ljestvicu'
}, },
errors: { errors: {
title: 'Greške za {0}', title: 'Greške za {name}',
ids: { ids: {
invalidURL: 'URL nije prepoznat', invalidURL: 'URL nije prepoznat',
unsupportedURL: 'URL još nije podržan', unsupportedURL: 'URL još nije podržan',
@ -133,7 +133,7 @@ const hr = {
startSearching: 'Počni pretraživati!', startSearching: 'Počni pretraživati!',
description: description:
'Možete pretražiti pjesmu, cijeli album, izvođača, playlistu... sve! Također, možete i zalijepiti Deezer link', 'Možete pretražiti pjesmu, cijeli album, izvođača, playlistu... sve! Također, možete i zalijepiti Deezer link',
fans: '{0} obožavatelja', fans: '{n} obožavatelja',
noResults: 'Nema rezultata', noResults: 'Nema rezultata',
noResultsTrack: 'Pjesme nisu pronađene', noResultsTrack: 'Pjesme nisu pronađene',
noResultsAlbum: 'Albumi nisu pronađeni', noResultsAlbum: 'Albumi nisu pronađeni',
@ -143,9 +143,9 @@ const hr = {
searchbar: 'Pretraži bilo što (ili samo zalijepi link)', searchbar: 'Pretraži bilo što (ili samo zalijepi link)',
downloads: 'preuzimanja', downloads: 'preuzimanja',
toasts: { toasts: {
addedToQueue: '{0} dodan u red', addedToQueue: '{item} dodan u red',
alreadyInQueue: '{0} je već u redu!', alreadyInQueue: '{item} je već u redu!',
finishDownload: '{0} završeno preuzimanje.', finishDownload: '{item} završeno preuzimanje.',
allDownloaded: 'Sva preuzimanja završena!', allDownloaded: 'Sva preuzimanja završena!',
refreshFavs: 'Osvježavanje završeno!', refreshFavs: 'Osvježavanje završeno!',
loggingIn: 'Prijavljivanje...', loggingIn: 'Prijavljivanje...',
@ -155,8 +155,8 @@ const hr = {
loggedOut: 'Odjavljeni', loggedOut: 'Odjavljeni',
cancellingCurrentItem: 'Otkazujem trenutnu stavku.', cancellingCurrentItem: 'Otkazujem trenutnu stavku.',
currentItemCancelled: 'Trenutna stavka otkazana.', currentItemCancelled: 'Trenutna stavka otkazana.',
startAddingArtist: 'Dodajem {0} album u red', startAddingArtist: 'Dodajem {artist} album u red',
finishAddingArtist: 'Dodan {0} album u red', finishAddingArtist: 'Dodan {artist} album u red',
startConvertingSpotifyPlaylist: 'Pretvaram Spotify pjesme u Deezer pjesme', startConvertingSpotifyPlaylist: 'Pretvaram Spotify pjesme u Deezer pjesme',
finishConvertingSpotifyPlaylist: 'Spotify playlista pretvorena', finishConvertingSpotifyPlaylist: 'Spotify playlista pretvorena',
loginNeededToDownload: 'Trebate se prijaviti kako bi preuzeli pjesme!' loginNeededToDownload: 'Trebate se prijaviti kako bi preuzeli pjesme!'
@ -281,7 +281,7 @@ const hr = {
nothing: 'Spremi samo glavnog izvođača', nothing: 'Spremi samo glavnog izvođača',
default: 'Koristeći standardnu specifikaciju', default: 'Koristeći standardnu specifikaciju',
andFeat: 'Koristeći & i feat.', andFeat: 'Koristeći & i feat.',
using: 'Koristeći "{0}"' using: 'Koristeći "{separator}"'
}, },
singleAlbumArtist: 'Spremi samo izvođača glavnog albuma', singleAlbumArtist: 'Spremi samo izvođača glavnog albuma',
albumVariousArtists: 'Zadrži "Various Artists" u Izvođačima albuma', albumVariousArtists: 'Zadrži "Various Artists" u Izvođačima albuma',

View File

@ -3,9 +3,9 @@ const id = {
welcome: 'Selamat datang di deemix', welcome: 'Selamat datang di deemix',
back: 'kembali', back: 'kembali',
loading: 'memuat', loading: 'memuat',
download: 'Mengunduh {0}', download: 'Mengunduh {thing}',
by: 'oleh {0}', by: 'oleh {artist}',
in: 'di {0}', in: 'di {album}',
download_hint: 'Unduh', download_hint: 'Unduh',
play_hint: 'Putar', play_hint: 'Putar',
toggle_download_tab_hint: 'Buka/Tutup', toggle_download_tab_hint: 'Buka/Tutup',
@ -74,7 +74,7 @@ const id = {
download: 'Unduh Tangga Lagu' download: 'Unduh Tangga Lagu'
}, },
errors: { errors: {
title: 'Galat untuk {0}', title: 'Galat untuk {name}',
ids: { ids: {
invalidURL: 'URL tidak dikenal', invalidURL: 'URL tidak dikenal',
unsupportedURL: 'URL belum didukung', unsupportedURL: 'URL belum didukung',
@ -133,7 +133,7 @@ const id = {
startSearching: 'Mulai cari!', startSearching: 'Mulai cari!',
description: description:
'Kamu bisa mencari lagu, album, artis, daftar putar.... apa pun! Kamu juga bisa memberikan tautan Deezer', 'Kamu bisa mencari lagu, album, artis, daftar putar.... apa pun! Kamu juga bisa memberikan tautan Deezer',
fans: '{0} fan', fans: '{n} fan',
noResults: 'Tak ada hasil', noResults: 'Tak ada hasil',
noResultsTrack: 'Lagu tidak ditemukan', noResultsTrack: 'Lagu tidak ditemukan',
noResultsAlbum: 'Album tidak ditemukan', noResultsAlbum: 'Album tidak ditemukan',
@ -143,9 +143,9 @@ const id = {
searchbar: 'Cari apa pun yang kamu mau (atau berikan tautannya saja)', searchbar: 'Cari apa pun yang kamu mau (atau berikan tautannya saja)',
downloads: 'unduhan', downloads: 'unduhan',
toasts: { toasts: {
addedToQueue: '{0} ditambah ke antrian', addedToQueue: '{item} ditambah ke antrian',
alreadyInQueue: '{0} sudah ada di antrian!', alreadyInQueue: '{item} sudah ada di antrian!',
finishDownload: '{0} selesai diunduh.', finishDownload: '{item} selesai diunduh.',
allDownloaded: 'Seluruh unduhan selesai!', allDownloaded: 'Seluruh unduhan selesai!',
refreshFavs: 'Penyegaran selesai!', refreshFavs: 'Penyegaran selesai!',
loggingIn: 'Masuk', loggingIn: 'Masuk',
@ -155,8 +155,8 @@ const id = {
loggedOut: 'Belum masuk', loggedOut: 'Belum masuk',
cancellingCurrentItem: 'Membatalkan item.', cancellingCurrentItem: 'Membatalkan item.',
currentItemCancelled: 'Item telah dibatalan.', currentItemCancelled: 'Item telah dibatalan.',
startAddingArtist: 'Menambahkan {0} album ke antrian', startAddingArtist: 'Menambahkan {artist} album ke antrian',
finishAddingArtist: '{0} album telah ditambahkan ke antrian', finishAddingArtist: '{artist} album telah ditambahkan ke antrian',
startConvertingSpotifyPlaylist: 'Mengonversi lagu spotify ke deezer', startConvertingSpotifyPlaylist: 'Mengonversi lagu spotify ke deezer',
finishConvertingSpotifyPlaylist: 'Daftar putar Spotify selesai dikonversi' finishConvertingSpotifyPlaylist: 'Daftar putar Spotify selesai dikonversi'
}, },
@ -279,7 +279,7 @@ const id = {
nothing: 'Simpan artis utamanya saja', nothing: 'Simpan artis utamanya saja',
default: 'Gunakan spesifikasi standard', default: 'Gunakan spesifikasi standard',
andFeat: 'Gunakan & dan feat.', andFeat: 'Gunakan & dan feat.',
using: 'Gunakan "{0}"' using: 'Gunakan "{separator}"'
}, },
singleAlbumArtist: 'Simpan artis utama saja', singleAlbumArtist: 'Simpan artis utama saja',
albumVariousArtists: 'Simpan "Various Artists" sebagai artis', albumVariousArtists: 'Simpan "Various Artists" sebagai artis',

View File

@ -3,9 +3,9 @@ const it = {
welcome: 'Benvenuto su deemix', welcome: 'Benvenuto su deemix',
back: 'indietro', back: 'indietro',
loading: 'caricamento', loading: 'caricamento',
download: 'Scarica {0}', download: 'Scarica {thing}',
by: 'di {0}', by: 'di {artist}',
in: 'in {0}', in: 'in {album}',
download_hint: 'Scarica', download_hint: 'Scarica',
play_hint: 'Riproduci', play_hint: 'Riproduci',
toggle_download_tab_hint: 'Espandi/Riduci', toggle_download_tab_hint: 'Espandi/Riduci',
@ -30,6 +30,7 @@ const it = {
releaseN: '0 dischi | {n} disco | {n} dischi', releaseN: '0 dischi | {n} disco | {n} dischi',
playlist: 'playlist', playlist: 'playlist',
compile: 'compilation', compile: 'compilation',
bundle: 'collezione | collezioni',
ep: 'ep', ep: 'ep',
more: 'Altri album', more: 'Altri album',
featured: 'Compare in', featured: 'Compare in',
@ -40,6 +41,12 @@ const it = {
} }
}, },
about: { about: {
updates: {
currentVersion: 'Versione corrente',
versionNotAvailable: 'N/A',
updateAvailable: `Non stai usando l'ultima versione disponibile: {version}`,
deemixVersion: 'Versione libreria deemix'
},
titles: { titles: {
usefulLinks: 'Link Utili', usefulLinks: 'Link Utili',
bugReports: 'Segnalazione di bug', bugReports: 'Segnalazione di bug',
@ -84,7 +91,7 @@ const it = {
download: 'Scarica Classifica' download: 'Scarica Classifica'
}, },
errors: { errors: {
title: 'Errori riguardanti {0}', title: 'Errori riguardanti {name}',
ids: { ids: {
invalidURL: 'URL non riconosciuto', invalidURL: 'URL non riconosciuto',
unsupportedURL: 'URL non ancora supportato', unsupportedURL: 'URL non ancora supportato',
@ -144,7 +151,7 @@ const it = {
startSearching: 'Inizia a cercare!', startSearching: 'Inizia a cercare!',
description: description:
'Puoi cercare un brano, un intero album, un artista, una playlist.... quello che vuoi! Puoi anche incollare un link di Deezer', 'Puoi cercare un brano, un intero album, un artista, una playlist.... quello che vuoi! Puoi anche incollare un link di Deezer',
fans: '{0} fan', fans: '{n} fan',
noResults: 'Nessun risultato', noResults: 'Nessun risultato',
noResultsTrack: 'Nessun brano trovato', noResultsTrack: 'Nessun brano trovato',
noResultsAlbum: 'Nessun album trovato', noResultsAlbum: 'Nessun album trovato',
@ -156,10 +163,10 @@ const it = {
toasts: { toasts: {
restoringQueue: 'Ripristinando la coda di download...', restoringQueue: 'Ripristinando la coda di download...',
queueRestored: 'Coda di download ripristinata!', queueRestored: 'Coda di download ripristinata!',
addedToQueue: '{0} aggiunto alla coda', addedToQueue: '{item} aggiunto alla coda',
addedMoreToQueue: '{0} oggetti aggiunti alla coda', addedMoreToQueue: '{n} oggetti aggiunti alla coda',
alreadyInQueue: '{0} è già nella coda!', alreadyInQueue: '{item} è già nella coda!',
finishDownload: '{0} ha finito di scaricarsi.', finishDownload: '{item} ha finito di scaricarsi.',
allDownloaded: 'Tutti i download completati!', allDownloaded: 'Tutti i download completati!',
refreshFavs: 'Preferiti ricaricati!', refreshFavs: 'Preferiti ricaricati!',
loggingIn: 'Effettuando il login...', loggingIn: 'Effettuando il login...',
@ -169,8 +176,8 @@ const it = {
loggedOut: 'Disconnesso', loggedOut: 'Disconnesso',
cancellingCurrentItem: 'Cancellando download corrente.', cancellingCurrentItem: 'Cancellando download corrente.',
currentItemCancelled: 'Download corrente cancellato.', currentItemCancelled: 'Download corrente cancellato.',
startAddingArtist: 'Aggiungendo gli album di {0} alla coda', startAddingArtist: 'Aggiungendo gli album di {artist} alla coda',
finishAddingArtist: 'Aggiunto gli album di {0} alla coda', finishAddingArtist: 'Aggiunto gli album di {artist} alla coda',
startConvertingSpotifyPlaylist: 'Convertendo i brani da spotify a deezer', startConvertingSpotifyPlaylist: 'Convertendo i brani da spotify a deezer',
finishConvertingSpotifyPlaylist: 'Playlist di spotify convertita', finishConvertingSpotifyPlaylist: 'Playlist di spotify convertita',
loginNeededToDownload: 'Devi accedere prima di poter scaricare brani!' loginNeededToDownload: 'Devi accedere prima di poter scaricare brani!'
@ -185,7 +192,8 @@ const it = {
question: 'Come ottengo il mio ARL?', question: 'Come ottengo il mio ARL?',
update: 'Aggiorna ARL' update: 'Aggiorna ARL'
}, },
logout: 'Disconnettiti' logout: 'Disconnettiti',
login: 'Accedi tramite deezer.com'
}, },
appearance: { appearance: {
title: 'Aspetto', title: 'Aspetto',
@ -285,6 +293,7 @@ const it = {
replayGain: 'Replay gain', replayGain: 'Replay gain',
label: 'Casa Discografica', label: 'Casa Discografica',
lyrics: 'Testo non Sincronizzato', lyrics: 'Testo non Sincronizzato',
syncedLyrics: 'Testo Sincronizzato',
copyright: 'Copyright', copyright: 'Copyright',
composer: 'Compositori', composer: 'Compositori',
involvedPeople: 'Persone Coinvolte' involvedPeople: 'Persone Coinvolte'
@ -299,7 +308,7 @@ const it = {
nothing: "Salva solo l'artista principale", nothing: "Salva solo l'artista principale",
default: 'Usando la specificazione standard', default: 'Usando la specificazione standard',
andFeat: 'Usando & e feat.', andFeat: 'Usando & e feat.',
using: 'Usando "{0}"' using: 'Usando "{separator}"'
}, },
singleAlbumArtist: "Salva solo l'artista dell'album principale", singleAlbumArtist: "Salva solo l'artista dell'album principale",
albumVariousArtists: 'Lascia "Artisti Vari" negli artisti dell\'album', albumVariousArtists: 'Lascia "Artisti Vari" negli artisti dell\'album',
@ -322,8 +331,8 @@ const it = {
artistCasing: 'Formato testo degli artisti', artistCasing: 'Formato testo degli artisti',
casing: { casing: {
nothing: 'Non cambiare', nothing: 'Non cambiare',
lower: 'TUTTO MAIUSCOLO', upper: 'TUTTO MAIUSCOLO',
upper: 'tutto minuscolo', lower: 'tutto minuscolo',
start: 'Prima Lettera Maiuscola', start: 'Prima Lettera Maiuscola',
sentence: 'Come una frase' sentence: 'Come una frase'
}, },
@ -337,7 +346,8 @@ const it = {
title: 'Spotify Features', title: 'Spotify Features',
clientID: 'Spotify clientID', clientID: 'Spotify clientID',
clientSecret: 'Spotify Client Secret', clientSecret: 'Spotify Client Secret',
username: 'Spotify username' username: 'Spotify username',
question: 'Come attivo le Spotify Features?'
}, },
reset: 'Reimposta Default', reset: 'Reimposta Default',
save: 'Salva', save: 'Salva',

358
src/lang/ko.js Normal file
View File

@ -0,0 +1,358 @@
const ko = {
globals: {
welcome: '잘왔다, deemix에',
back: '뒤로',
loading: '불러오는 중',
download: '{thing} 다운로드',
by: 'by {artist}',
in: 'in {album}',
download_hint: '다운로드',
play_hint: '재생',
toggle_download_tab_hint: '펼치기/접기',
clean_queue_hint: '비우기 완료',
cancel_queue_hint: '모두 취소',
open_downloads_folder: '다운로드 폴더 열기',
cut: '잘라내기',
copy: '복사',
copyLink: '링크 복사',
copyImageLink: '이미지 링크 복사',
copyDeezerLink: 'deezer 링크 복사',
paste: '붙여넣기',
listTabs: {
empty: '',
all: '전체',
top_result: '가장 일치하는 결과',
album: '앨범 | 앨범',
artist: '아티스트 | 아티스트',
single: '싱글 | 싱글',
title: '제목 | 제목',
track: '트랙 | 트랙',
trackN: '0 트랙 | {n} 트랙 | {n} 트랙',
releaseN: '0 발매 | {n} 발매 | {n} 발매',
playlist: '재생목록 | 재생목록',
compile: '편찬물 | 편찬물',
ep: 'ep | eps',
more: '더 많은 앨범',
featured: '특집',
spotifyPlaylist: '스포티파이 재생목록 | 스포티파이 재생목록',
releaseDate: '발매일자',
error: '오류'
}
},
about: {
titles: {
usefulLinks: '유용한 링크',
bugReports: '버그 제보',
contributing: '기여자',
donations: '후원',
license: '이용정책'
},
subtitles: {
bugReports: "무언가 안되는 것이 있다고요? 말해주세요!",
contributing: '이 프로젝트에 기여하고 싶다고요? 어렵지 않아요!',
donations: '금전적으로 지원하고 싶다고요? 후원하세요!'
},
usesLibrary: '이 프로그램은 <strong>deemix</strong> 라이브러리를 사용합니다, 해당 라이브러리로 자신만의 deemix를 만들 수 있습니다.',
thanks: `이 프로젝트를 도와준 <strong>rtonno</strong>, <strong>uhwot</strong> 그리고 <strong>lollilol</strong>님과 아이콘을 만들어준 <strong>BasCurtiz</strong> 그리고 <strong>scarvimane</strong>님에게 감사를.`,
upToDate: `새로운 업데이트 소식을 듣고 싶으면 텔레그램 <a href="https://t.me/RemixDevNews" target="_blank">새소식 정보통</a>을 참고하세요.`,
officialWebsite: '공식 웹사이트',
officialRepo: '공식 라이브러리 저장소',
officialWebuiRepo: '공식 WebUI 저장소',
officialSubreddit: '공식 서브레딧',
newsChannel: '새 소식 알리미',
questions: `프로그램에 대한 질문이나 문제에 관한 것은, 먼저 <a href="https://www.reddit.com/r/deemix" target="_blank">서브레딧</a>에서 답변을 검색해보세요. 그리고, 서브레딧에서 답변을 찾기 못한 경우에 다음 순서를 이용해주세요.`,
beforeReporting: `버그 제보를 하기 전에 먼저 최신 버전의 프로그램을 실행하고 있는지, 제보하고자 하는 것이 버그이지 오로지 당신의 목적을 이루기 위한 요구가 아님을 확인해주세요.`,
beSure: `해당 버그가 다른 장치에서도 재현이 가능한지 확인하고 이미 제보된 버그의 경우에는 중복해서 <strong>보고하지 마세요</strong>.`,
duplicateReports: '중복된 버그 제보의 경우는 해당 요청을 닫을 것이니, 두 눈 뜨고 지켜보세요.',
dontOpenIssues: `질문에 관한 것은 이슈를 <strong>열지 마세요</strong>, 서브레딧이 있습니다.`,
newUI: `만약 당신이 파이썬에 능통하고 기본적인 라이브러리를 이용하여 새로운 UI를 만들었거나, 라이브러리의 버그를 수정하였다면 <a href="https://codeberg.org/RemixDev/deemix" target="_blank">저장소</a>에 풀 리퀘스트 해주세요.`,
acceptFeatures: `복잡하지 않은 기능 추가도 받습니다, 라이브러리가 아닌 앱에서 직접 구현할 수 있는 것으로요.`,
otherLanguages: `당신이 다른 프로그램 언어에 능통하면, 이 deemix 프로그램을 다른 프로그래밍 언어로 포팅할 수도 있습니다!`,
understandingCode: `코드를 이해하는 데 도움이 필요합니까? 위에 있는 RemixDev, 텔레그램, 서브레딧 링크를 누르세요.`,
contributeWebUI: `만약 당신이 Vue.js (JavaScript), HTML 또는 CSS 개발자라면 <a href="https://codeberg.org/RemixDev/deemix-webui" target="_blank">WebUI</a>에 도움을 주세요.`,
itsFree: `사용하기 전에 이 프로그램이 <strong>무료 프로젝트</strong>이고 개발자를 지원하기 전에 <strong>예술가들</strong>을 먼저 지원해야 함을 기억하세요.`,
notObligated: `기부는 프로젝트를 지속할 수 있는 동력이 됩니다!`,
lincensedUnder: `이 작업이 요구하고 있는 라이센스는 아래와 같습니다<br>
<a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank">GNU General Public License 3.0</a>.`
},
charts: {
title: '차트',
changeCountry: '국가 변경',
download: '차트 다운로드'
},
errors: {
title: '오류 발생: {name}',
ids: {
unsupportedURL: 'URL 지원 누락',
invalidURL: 'URL 인식 실패',
ISRCnotOnDeezer: '트랙 코드 식별이 불가능합니다',
notYourPrivatePlaylist: "다른 사람의 비공개 재생 목록을 다운로드 할 수 없습니다.",
spotifyDisabled: '스포티파이 기능이 올바르게 설정되지 않았습니다.',
trackNotOnDeezer: 'Deezer에서 트랙을 찾을 수 없습니다!',
albumNotOnDeezer: 'Deezer에서 앨범을 찾을 수 없습니다!',
notOnDeezer: 'Deezer에서 트랙을 찾을 수 없습니다!',
notEncoded: '트랙이 아직 변환(encode)되지 않았습니다!',
notEncodedNoAlternative: '트랙이 아직 변환(encode)되지 않았을 뿐더러 대체할 것을 찾지 못했습니다!',
wrongBitrate: '요구하는 비트레이트의 트랙을 찾을 수 없습니다.',
wrongBitrateNoAlternative: '요구하는 비트레이트를 찾을 수 없을 뿐더러 대체할 것을 찾지 못했습니다!',
no360RA: '해당 트랙은 360 리얼리티 오디오에 존재하지 않습니다.',
notAvailable: "해당 트랙은 Deezer 서버에 존재하지 않습니다!",
notAvailableNoAlternative: "해당 트랙은 Deezer 서버에 존재하지 않을 뿐더러 대체할 것을 찾지 못했습니다!"
}
},
favorites: {
title: '즐겨듣는 음악',
noPlaylists: '즐겨듣는 재생목록이 없습니다',
noAlbums: '즐겨듣는 앨범이 없습니다',
noArtists: '즐겨듣는 아티스트가 없습니다',
noTracks: '즐겨듣는 트랙이 없습니다'
},
home: {
needTologin: '다운로드를 시작하기 전에 Deezer 계정에 로그인을 해야합니다.',
openSettings: '설정 열기',
sections: {
popularPlaylists: '인기있는 재생목록',
popularAlbums: '가장 많이 재생된 앨범'
}
},
linkAnalyzer: {
info: '이 항목에서는 다운로드를 시도할 링크에 대한 더 많은 정보를 찾을 수 있습니다.',
linkNotSupported: '해당 링크는 아직 지원하지 않습니다',
useful: "접속한 국가에서는 재생할 수 없는 특정 트랙을 다운로드 하기 위해서 가능한 국가를 찾는데 유용하게 쓰입니다.",
linkNotSupportedYet: '해당 링크는 아직 지원하지 않습니다, 다른 링크로 시도해보세요.',
table: {
id: 'ID',
isrc: 'ISRC',
upc: 'UPC',
duration: '길이',
diskNumber: '디스크 번호',
trackNumber: '트랙 번호',
releaseDate: '발매일자',
bpm: 'BPM',
label: '라벨',
recordType: '녹음 종류',
genres: '장르',
tracklist: '트랙목록'
}
},
search: {
startSearching: '검색을 해보세요!',
description: '트랙, 아티스트, 재생목록, Deezer 링크 등으로 검색할 수 있습니다!',
fans: '{n}명의 팬들',
noResults: '결과 없음',
noResultsTrack: '발견된 트랙 없음',
noResultsAlbum: '발견된 앨범 없음',
noResultsArtist: '발견된 아티스트 없음',
noResultsPlaylist: '발견된 재생목록 없음'
},
searchbar: '원하는 것을 검색하세요 (링크를 붙여넣을 수도 있습니다)',
downloads: '다운로드들',
toasts: {
restoringQueue: '다운로드 대기 열 복원중...',
queueRestored: '다운로드 대기 열이 복원되었습니다!',
addedToQueue: '대기열에 {item}(이)가 추가되었습니다',
addedMoreToQueue: '대기열에 {n} 항목이 추가되었습니다',
alreadyInQueue: '{item}(이)가 이미 대기열에 존재합니다!',
finishDownload: '{item} 항목이 다운로드 완료되었습니다.',
allDownloaded: '모든 다운로드가 완료되었습니다!',
refreshFavs: '새로고침이 완료되었습니다!',
loggingIn: '로그인 하는 중...',
loggedIn: '로그인 되었습니다',
alreadyLogged: '이미 로그인되어 있습니다',
loginFailed: "로그인 할 수 없습니다",
loggedOut: '로그아웃 하였습니다',
cancellingCurrentItem: '현재 항목을 취소 중입니다.',
currentItemCancelled: '항목이 취소되었습니다.',
startAddingArtist: '{artist} 앨범을 대기열에 추가 중입니다',
finishAddingArtist: '{artist} 앨범이 대기열에 추가되었습니다',
startConvertingSpotifyPlaylist: '스포티파이 트랙을 Deezer 트랙으로 전환 중입니다',
finishConvertingSpotifyPlaylist: '스프토파이 재생 목록이 전환되었습니다',
loginNeededToDownload: '트랙을 다운로드하려면 로그인이 필요합니다!'
},
settings: {
title: '설정',
languages: '언어',
login: {
title: '로그인',
loggedIn: '{username}(으)로 로그인되었습니다',
arl: {
question: 'ARL을 어떻게 확인합니까?',
update: 'ARL 업데이트'
},
logout: '로그아웃'
},
appearance: {
title: '외관',
slimDownloadTab: '얇은 다운로드 탭'
},
downloadPath: {
title: '다운로드 경로'
},
templates: {
title: '템플릿',
tracknameTemplate: '트랙이름 템플릿',
albumTracknameTemplate: '앨범 트랙 템플릿',
playlistTracknameTemplate: '재생목록 트랙 템플릿'
},
folders: {
title: '폴더',
createPlaylistFolder: '재생목록을 위한 폴더 생성',
playlistNameTemplate: '재생목록 폴더 템플릿',
createArtistFolder: '아티스트를 위한 폴더 생성',
artistNameTemplate: '아티스트 폴더 템플릿',
createAlbumFolder: '앨범을 위한 폴더 생성',
albumNameTemplate: '앨범 폴더 템플릿',
createCDFolder: 'CD를 위한 폴더 생성',
createStructurePlaylist: '재생목록을 위한 폴더 구조 생성',
createSingleFolder: '싱글 앨범을 위한 폴더 구조 생성'
},
trackTitles: {
title: '트랙 제목',
padTracks: '트랙 채워넣기',
paddingSize: '채워넣을 크기',
illegalCharacterReplacer: '지원하지 않는 글자 대체'
},
downloads: {
title: '다운로드',
queueConcurrency: '동시 다운로드',
maxBitrate: {
title: '선호하는 비트레이트',
9: 'FLAC 1411kbps',
3: 'MP3 320kbps',
1: 'MP3 128kbps'
},
overwriteFile: {
title: '파일을 덮어쓸까요?',
y: '네, 파일을 덮어쓰세요',
n: "아뇨, 파일을 덮어쓰지 마세요",
t: '태그만 덮어쓰세요',
b: '아뇨, 양쪽 다 놔두고 중복되는 파일에 번호를 추가하세요',
e: "아뇨, 확장명을 변경하세요"
},
fallbackBitrate: '비트레이트 대비책',
fallbackSearch: '검색 대비책',
logErrors: '오류 발생시 로그 파일 생성',
logSearched: '검색한 트랙에 대한 로그 파일 생성',
createM3U8File: '재생목록 파일 생성',
syncedLyrics: '.lyr 파일 생성 (가사 동기화)',
playlistFilenameTemplate: '재생목록 파일이름 템플릿',
saveDownloadQueue: '프로그램을 닫을 때 다운로드 대기열 저장'
},
covers: {
title: '앨범 커버',
saveArtwork: '커버 저장',
coverImageTemplate: '커버 이름 템플릿',
saveArtworkArtist: '아티스트 이미지 저장',
artistImageTemplate: '아티스트 이미지 템플릿',
localArtworkSize: '별도 그림 크기',
embeddedArtworkSize: '내장된 그림 크기',
localArtworkFormat: {
title: '별도로 저장할 그림의 형식을 무엇으로 하시겠습니까?',
jpg: 'jpeg 이미지',
png: 'png 이미지',
both: 'jpeg와 png 둘 다'
},
jpegImageQuality: 'JPEG 이미지 품질',
embeddedArtworkPNG: '포함된 그림의 형식을 PNG로 저장합니다',
embeddedPNGWarning: 'PNG는 Deezer에서 공식적으로 지원하지 않기 때문에 버그가 있을 수 있습니다',
imageSizeWarning: 'x1200 크기를 초과해서는 Deezer에서 공식적으로 사용되지 않기 때문에 문제가 생길 수 있습니다'
},
tags: {
head: '저장할 태그를 선택하세요',
title: '제목',
artist: '아티스트',
album: '앨범',
cover: '커버',
trackNumber: '트랙 번호',
trackTotal: '전체 트랙 크기',
discNumber: '디스크 번호',
discTotal: '전체 디스크 수',
albumArtist: '앨범 아티스트',
genre: '장르',
year: '연도',
date: '일자',
explicit: '노골적 가사',
isrc: 'ISRC',
length: '트랙 길이',
barcode: '앨범 바코드 (UPC)',
bpm: 'BPM',
replayGain: '리플레이 게인',
label: '앨범 라벨',
lyrics: '비동기 가사',
copyright: '저작권',
composer: '작곡가',
involvedPeople: '관련있는 사람들'
},
other: {
title: '기타',
savePlaylistAsCompilation: '재생목록을 편찬물로 저장',
useNullSeparator: 'null 구분자 사용',
saveID3v1: 'ID3v1 태그 형식으로 저장',
multiArtistSeparator: {
title: '아티스트를 어떻게 구분하시겠습니까?',
nothing: '주요 아티스트만 저장',
default: '표준 스펙을 사용',
andFeat: '& 기호와 feat 사용.',
using: '"{separator}" 사용'
},
singleAlbumArtist: '주요 앨범 아티스트만 저장',
albumVariousArtists: '앨범 아티스트에 "Various Artists"(다양한 아티스트들) 유지',
removeAlbumVersion: '트랙 제목에 "Album Version"(앨범 버전) 제거',
removeDuplicateArtists: '아티스트들의 협업 제거',
dateFormat: {
title: 'FLAC 파일의 날짜 형식',
year: 'YYYY',
month: 'MM',
day: 'DD'
},
featuredToTitle: {
title: '특집에 참여한 아티스트들에 할 수 있는 것이 무엇이 있나요?',
0: '아무것도 하지 않음',
1: '제목에서 제거',
3: '앨범 제목과 트랙에서 제거',
2: '제목으로 이동'
},
titleCasing: '제목 케이싱',
artistCasing: '아티스트 케이싱',
casing: {
nothing: '변함없이 유지',
lower: '소문자로',
upper: '대문자로',
start: '각 단어 앞 글자를 대문자로',
sentence: '문장처럼'
},
previewVolume: '미리듣기 볼륨',
executeCommand: {
title: '다운로드 후 실행할 명령어',
description: '빈칸으로 두면 아무 일도 없습니다'
}
},
spotify: {
title: '스포티파이 기능',
clientID: 'Spotify ClientID',
clientSecret: 'Spotify Client Secret',
username: 'Spotify 사용자이름'
},
reset: '기본 설정으로 초기화',
save: '저장',
toasts: {
init: '설정을 불러왔습니다!',
update: '새로운 설정으로 갱신되었습니다!',
ARLcopied: 'ARL가 클립보드에 복사되었습니다'
}
},
sidebar: {
home: '홈',
search: '검색',
charts: '차트',
favorites: '즐겨찾기',
linkAnalyzer: '링크 분석기',
settings: '설정',
about: '정보'
},
tracklist: {
downloadSelection: '선택 다운로드'
}
}
export default ko

View File

@ -3,9 +3,9 @@
welcome: 'bem vindo ao deemix', welcome: 'bem vindo ao deemix',
back: 'voltar', back: 'voltar',
loading: 'carregando', loading: 'carregando',
download: 'Baixar {0}', download: 'Baixar {thing}',
by: 'por {0}', by: 'por {artist}',
in: 'em {0}', in: 'em {album}',
download_hint: 'Baixar', download_hint: 'Baixar',
play_hint: 'Reproduzir', play_hint: 'Reproduzir',
toggle_download_tab_hint: 'Expandir/Diminuir', toggle_download_tab_hint: 'Expandir/Diminuir',
@ -74,7 +74,7 @@
download: 'Download Chart' download: 'Download Chart'
}, },
errors: { errors: {
title: 'Erros para {0}', title: 'Erros para {name}',
ids: { ids: {
invalidURL: 'URL inválida', invalidURL: 'URL inválida',
unsupportedURL: 'URL não suportada ainda', unsupportedURL: 'URL não suportada ainda',
@ -133,7 +133,7 @@
startSearching: 'Comece pesquisando!', startSearching: 'Comece pesquisando!',
description: description:
'Você pode pesquisar uma música, um álbum, um artista, uma playlist.... tudo! Você também pode colar um link do Deezer', 'Você pode pesquisar uma música, um álbum, um artista, uma playlist.... tudo! Você também pode colar um link do Deezer',
fans: '{0} fãs', fans: '{n} fãs',
noResults: 'Sem resultados', noResults: 'Sem resultados',
noResultsTrack: 'Nenhuma Faixa encontrada', noResultsTrack: 'Nenhuma Faixa encontrada',
noResultsAlbum: 'Nenhum Álbum encontrado', noResultsAlbum: 'Nenhum Álbum encontrado',
@ -143,9 +143,9 @@
searchbar: 'Pesquise algo (ou apenas cole um link)', searchbar: 'Pesquise algo (ou apenas cole um link)',
downloads: 'downloads', downloads: 'downloads',
toasts: { toasts: {
addedToQueue: '{0} adicionado à fila', addedToQueue: '{item} adicionado à fila',
alreadyInQueue: '{0} já está na fila!', alreadyInQueue: '{item} já está na fila!',
finishDownload: '{0} download terminado.', finishDownload: '{item} download terminado.',
allDownloaded: 'Todos os downloads foram feitos!', allDownloaded: 'Todos os downloads foram feitos!',
refreshFavs: 'Atualização completa!', refreshFavs: 'Atualização completa!',
loggingIn: 'Logando', loggingIn: 'Logando',
@ -155,8 +155,8 @@
loggedOut: 'Desconectando', loggedOut: 'Desconectando',
cancellingCurrentItem: 'Cancelando item atual.', cancellingCurrentItem: 'Cancelando item atual.',
currentItemCancelled: 'Item atual cancelado.', currentItemCancelled: 'Item atual cancelado.',
startAddingArtist: 'Adicionando {0} álbuns à fila', startAddingArtist: 'Adicionando {artist} álbuns à fila',
finishAddingArtist: '{0} álbuns adicionados a fila', finishAddingArtist: '{artist} álbuns adicionados a fila',
startConvertingSpotifyPlaylist: 'Convertendo faixas do spotify para faixas do deezer', startConvertingSpotifyPlaylist: 'Convertendo faixas do spotify para faixas do deezer',
finishConvertingSpotifyPlaylist: 'Playlists do Spotify convertidas' finishConvertingSpotifyPlaylist: 'Playlists do Spotify convertidas'
}, },
@ -279,7 +279,7 @@
nothing: 'Salvar apenas o artista principal', nothing: 'Salvar apenas o artista principal',
default: 'Usar a especificação padrão', default: 'Usar a especificação padrão',
andFeat: 'Usar & e feat.', andFeat: 'Usar & e feat.',
using: 'Usar "{0}"' using: 'Usar "{separator}"'
}, },
singleAlbumArtist: 'Salvar apenas o artista principal', singleAlbumArtist: 'Salvar apenas o artista principal',
albumVariousArtists: 'Manter "Various Artists" nos Artistas do Álbum', albumVariousArtists: 'Manter "Various Artists" nos Artistas do Álbum',

View File

@ -3,9 +3,9 @@ const pt = {
welcome: 'Bem-vindo ao deemix', welcome: 'Bem-vindo ao deemix',
back: 'voltar', back: 'voltar',
loading: 'A carregar', loading: 'A carregar',
download: 'Transferir {0}', download: 'Transferir {thing}',
by: 'por {0}', by: 'por {artist}',
in: 'em {0}', in: 'em {album}',
download_hint: 'Transferir', download_hint: 'Transferir',
play_hint: 'Tocar', play_hint: 'Tocar',
toggle_download_tab_hint: 'Expandir/Recolher', toggle_download_tab_hint: 'Expandir/Recolher',
@ -74,7 +74,7 @@ const pt = {
download: 'Transferir tabela' download: 'Transferir tabela'
}, },
errors: { errors: {
title: 'Erros para {0}', title: 'Erros para {name}',
ids: { ids: {
invalidURL: 'URL não reconhecido', invalidURL: 'URL não reconhecido',
unsupportedURL: 'URL ainda não suportado', unsupportedURL: 'URL ainda não suportado',
@ -131,7 +131,7 @@ const pt = {
search: { search: {
startSearching: 'Começa a pesquisar!', startSearching: 'Começa a pesquisar!',
description: 'Podes perquisar uma música, um álbum inteiro, um artista, uma lista de reprodução... tudo! Também podes colar um link do Deezer', description: 'Podes perquisar uma música, um álbum inteiro, um artista, uma lista de reprodução... tudo! Também podes colar um link do Deezer',
fans: '{0} fãs', fans: '{n} fãs',
noResults: 'Sem resultados', noResults: 'Sem resultados',
noResultsTrack: 'Faixa não encontrada', noResultsTrack: 'Faixa não encontrada',
noResultsAlbum: 'Álbum não encontrado', noResultsAlbum: 'Álbum não encontrado',
@ -141,9 +141,9 @@ const pt = {
searchbar: 'Pesquisa o que quiseres (ou cola um link)', searchbar: 'Pesquisa o que quiseres (ou cola um link)',
downloads: 'transferências', downloads: 'transferências',
toasts: { toasts: {
addedToQueue: '{0} adicionados à fila', addedToQueue: '{item} adicionados à fila',
alreadyInQueue: '{0} já está na fila!', alreadyInQueue: '{item} já está na fila!',
finishDownload: '{0} foi transferido.', finishDownload: '{item} foi transferido.',
allDownloaded: 'Todas as transferências terminadas!', allDownloaded: 'Todas as transferências terminadas!',
refreshFavs: 'Actualizar terminados!', refreshFavs: 'Actualizar terminados!',
loggingIn: 'A autenticar', loggingIn: 'A autenticar',
@ -153,8 +153,8 @@ const pt = {
loggedOut: 'Desconectado', loggedOut: 'Desconectado',
cancellingCurrentItem: 'A cancelar item actual.', cancellingCurrentItem: 'A cancelar item actual.',
currentItemCancelled: 'Item actual cancelado.', currentItemCancelled: 'Item actual cancelado.',
startAddingArtist: 'A adicionar {0} álbuns à fila', startAddingArtist: 'A adicionar {artist} álbuns à fila',
finishAddingArtist: 'Adicionados {0} álbuns à fila', finishAddingArtist: 'Adicionados {artist} álbuns à fila',
startConvertingSpotifyPlaylist: 'A converter faixas do spotify em faixas do deezer', startConvertingSpotifyPlaylist: 'A converter faixas do spotify em faixas do deezer',
finishConvertingSpotifyPlaylist: 'Lista de reprodução do Spotify convertida.' finishConvertingSpotifyPlaylist: 'Lista de reprodução do Spotify convertida.'
}, },
@ -277,7 +277,7 @@ const pt = {
nothing: 'Guardar apenas o artista principal', nothing: 'Guardar apenas o artista principal',
default: 'Usar especificação padrão', default: 'Usar especificação padrão',
andFeat: 'Usar & e feat.', andFeat: 'Usar & e feat.',
using: 'Usar "{0}"' using: 'Usar "{separator}"'
}, },
singleAlbumArtist: 'Guardar apenas o artista principal do álbum', singleAlbumArtist: 'Guardar apenas o artista principal do álbum',
albumVariousArtists: 'Manter "Various Artists" nos Artistas do Álbum', albumVariousArtists: 'Manter "Various Artists" nos Artistas do Álbum',

View File

@ -3,14 +3,15 @@ const ru = {
welcome: 'Добро пожаловать в deemix', welcome: 'Добро пожаловать в deemix',
back: 'назад', back: 'назад',
loading: 'загрузка', loading: 'загрузка',
download: 'Скачать {0}', download: 'Скачать {thing}',
by: '{0}', by: '{artist}',
in: 'из {0}', in: 'из {album}',
download_hint: 'Скачать', download_hint: 'Скачать',
play_hint: 'Прослушать', play_hint: 'Прослушать',
toggle_download_tab_hint: 'Показать/Скрыть', toggle_download_tab_hint: 'Показать/Скрыть',
clean_queue_hint: 'Очистить завершённые', clean_queue_hint: 'Очистить завершённые',
cancel_queue_hint: 'Очистить всё', cancel_queue_hint: 'Очистить всё',
open_downloads_folder: 'Открыть папку с загрузками',
cut: 'вырезать', cut: 'вырезать',
copy: 'копировать', copy: 'копировать',
copyLink: 'копировать ссылку', copyLink: 'копировать ссылку',
@ -31,6 +32,7 @@ const ru = {
playlist: 'плейлист | плейлисты | плейлисты', playlist: 'плейлист | плейлисты | плейлисты',
compile: 'сплит | сплиты | сплиты', compile: 'сплит | сплиты | сплиты',
ep: 'ep', ep: 'ep',
bundle: 'бандл | бандлы | бандлы',
more: 'Больше альбомов', more: 'Больше альбомов',
featured: 'Представлено в', featured: 'Представлено в',
spotifyPlaylist: 'плейлист spotify | плейлисты spotify | плейлисты spotify', spotifyPlaylist: 'плейлист spotify | плейлисты spotify | плейлисты spotify',
@ -39,6 +41,12 @@ const ru = {
} }
}, },
about: { about: {
updates: {
currentVersion: 'Текущая версия',
versionNotAvailable: 'Н/Д',
updateAvailable: `Вы используете не последнюю доступную версию: {version}`,
deemixVersion: 'Версия библиотеки deemix'
},
titles: { titles: {
usefulLinks: 'Полезные ссылки', usefulLinks: 'Полезные ссылки',
bugReports: 'Отчёты об ошибках', bugReports: 'Отчёты об ошибках',
@ -72,9 +80,7 @@ const ru = {
itsFree: `Помните, что это <strong>бесплатное приложение</strong> и вам следует <strong>поддерживать понравившихся исполнителей</strong> прежде, чем поддерживать разработчиков.`, itsFree: `Помните, что это <strong>бесплатное приложение</strong> и вам следует <strong>поддерживать понравившихся исполнителей</strong> прежде, чем поддерживать разработчиков.`,
notObligated: `Вы не обязаны делать пожертвования, я всё равно вас ценю!`, notObligated: `Вы не обязаны делать пожертвования, я всё равно вас ценю!`,
lincensedUnder: `Проект распространяется под лицензией lincensedUnder: `Проект распространяется под лицензией
<a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank" <a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank">GNU General Public License 3.0</a>.`
>GNU General Public License 3.0</a
>.`
}, },
charts: { charts: {
title: 'Чарты', title: 'Чарты',
@ -82,7 +88,7 @@ const ru = {
download: 'Скачать чарт' download: 'Скачать чарт'
}, },
errors: { errors: {
title: 'Ошибки {0}', title: 'Ошибки {name}',
ids: { ids: {
invalidURL: 'URL не распознан', invalidURL: 'URL не распознан',
unsupportedURL: 'URL не поддерживается', unsupportedURL: 'URL не поддерживается',
@ -118,8 +124,7 @@ const ru = {
}, },
linkAnalyzer: { linkAnalyzer: {
info: 'Используйте этот раздел, чтобы узнать информацию о ссылке, которую требуется скачать.', info: 'Используйте этот раздел, чтобы узнать информацию о ссылке, которую требуется скачать.',
useful: useful: "Этот раздел нужен, если вы хотите загрузить треки, недоступные в вашей стране, а также посмотреть, где они доступны.",
"Этот раздел нужен, если вы хотите загрузить треки, недоступные в вашей стране, а также посмотреть, где они доступны.",
linkNotSupported: 'Ссылка не поддерживается', linkNotSupported: 'Ссылка не поддерживается',
linkNotSupportedYet: 'Эта ссылка не поддерживается, попробуйте вставить другую.', linkNotSupportedYet: 'Эта ссылка не поддерживается, попробуйте вставить другую.',
table: { table: {
@ -131,7 +136,7 @@ const ru = {
trackNumber: 'Номер трека', trackNumber: 'Номер трека',
releaseDate: 'Дата выхода', releaseDate: 'Дата выхода',
bpm: 'BPM', bpm: 'BPM',
label: 'Издатедь', label: 'Издатель',
recordType: 'Тип', recordType: 'Тип',
genres: 'Жанр', genres: 'Жанр',
tracklist: 'Треклист' tracklist: 'Треклист'
@ -139,9 +144,8 @@ const ru = {
}, },
search: { search: {
startSearching: 'Начните искать!', startSearching: 'Начните искать!',
description: description: 'Здесь можно найти трек, альбом, исполнителя, плейлист... всё! Можно также вставить ссылку Deezer',
'Здесь можно найти трек, альбом, исполнителя, плейлист... всё! Можно также вставить ссылку Deezer', fans: '{n} поклонников',
fans: '{0} поклонников',
noResults: 'Нет результатов', noResults: 'Нет результатов',
noResultsTrack: 'Треков не найдено', noResultsTrack: 'Треков не найдено',
noResultsAlbum: 'Альбомов не найдено', noResultsAlbum: 'Альбомов не найдено',
@ -151,20 +155,23 @@ const ru = {
searchbar: 'Ищите, что хотите (или вставьте ссылку)', searchbar: 'Ищите, что хотите (или вставьте ссылку)',
downloads: 'загрузки', downloads: 'загрузки',
toasts: { toasts: {
addedToQueue: '{0} добавлено в очередь', restoringQueue: 'Восстановление очереди загрузок...',
alreadyInQueue: '{0} уже присутствует в очереди!', queueRestored: 'Очередь восстановлена!',
finishDownload: 'Загрузка {0} завершена.', addedToQueue: '{item} добавлено в очередь',
addedMoreToQueue: '{n} загрузок добавлены в очередь',
alreadyInQueue: '{item} уже присутствует в очереди!',
finishDownload: 'Загрузка {item} завершена.',
allDownloaded: 'Все загрузки завершены!', allDownloaded: 'Все загрузки завершены!',
refreshFavs: 'Обновление завершено!', refreshFavs: 'Обновление завершено!',
loggingIn: 'Вход', loggingIn: 'Вход...',
loggedIn: 'Вход выполнен', loggedIn: 'Вход выполнен',
alreadyLogged: 'Вход уже выполнен', alreadyLogged: 'Вход уже выполнен',
loginFailed: "Вход не выполнен", loginFailed: "Вход не выполнен",
loggedOut: 'Вы вышли из аккаунта', loggedOut: 'Вы вышли из аккаунта',
cancellingCurrentItem: 'Отмена текущей загрузки.', cancellingCurrentItem: 'Отмена текущей загрузки.',
currentItemCancelled: 'Отменено.', currentItemCancelled: 'Отменено.',
startAddingArtist: 'Добавление альбомов {0} в очередь', startAddingArtist: 'Добавление альбомов {artist} в очередь',
finishAddingArtist: 'Альбомы {0} добавлены в очередь', finishAddingArtist: 'Альбомы {artist} добавлены в очередь',
startConvertingSpotifyPlaylist: 'Добавление плейлиста Spotify в очередь', startConvertingSpotifyPlaylist: 'Добавление плейлиста Spotify в очередь',
finishConvertingSpotifyPlaylist: 'Spotify плейлист добавлен в очередь', finishConvertingSpotifyPlaylist: 'Spotify плейлист добавлен в очередь',
loginNeededToDownload: 'Войдите в аккаунт, чтобы скачивать треки!' loginNeededToDownload: 'Войдите в аккаунт, чтобы скачивать треки!'
@ -179,7 +186,8 @@ const ru = {
question: 'Как узнать свой ARL?', question: 'Как узнать свой ARL?',
update: 'Обновить ARL' update: 'Обновить ARL'
}, },
logout: 'Выйти' logout: 'Выйти',
login: 'Войти через deezer.com'
}, },
appearance: { appearance: {
title: 'Внешний вид', title: 'Внешний вид',
@ -226,7 +234,8 @@ const ru = {
y: 'Да, перезаписать файл', y: 'Да, перезаписать файл',
n: "Нет, не перезаписывать", n: "Нет, не перезаписывать",
t: 'Обновить только теги', t: 'Обновить только теги',
b: 'Нет, оставить оба файла и добавить номер к дубликату' b: 'Нет, оставить оба файла и добавить номер к дубликату',
e: "Нет, вне зависимости от расширения"
}, },
fallbackBitrate: 'Загружать с битрейтом ниже, если текущий недоступен', fallbackBitrate: 'Загружать с битрейтом ниже, если текущий недоступен',
fallbackSearch: 'Искать похожий трек, если запрашиваемый недоступен', fallbackSearch: 'Искать похожий трек, если запрашиваемый недоступен',
@ -251,7 +260,10 @@ const ru = {
png: 'png', png: 'png',
both: 'jpeg и png' both: 'jpeg и png'
}, },
jpegImageQuality: 'Качество JPEG' jpegImageQuality: 'Качество JPEG',
embeddedArtworkPNG: 'Сохранять вложенную обложку в PNG',
embeddedPNGWarning: 'PNG официально не поддерживается в Deezer. Могут быть баги',
imageSizeWarning: 'Обложки с разрешением выше x1200 не поддерживаются в Deezer. Могут быть проблемы'
}, },
tags: { tags: {
head: 'Какие теги сохранять', head: 'Какие теги сохранять',
@ -275,6 +287,7 @@ const ru = {
replayGain: 'Replay Gain', replayGain: 'Replay Gain',
label: 'Издатель', label: 'Издатель',
lyrics: 'Текст песни', lyrics: 'Текст песни',
syncedLyrics: 'Синхрон. текст песни',
copyright: 'Права (копирайт)', copyright: 'Права (копирайт)',
composer: 'Композитор', composer: 'Композитор',
involvedPeople: 'Вовлечённые люди' involvedPeople: 'Вовлечённые люди'
@ -289,7 +302,7 @@ const ru = {
nothing: 'Сохранить только основного', nothing: 'Сохранить только основного',
default: 'Используя стандартную спецификацию', default: 'Используя стандартную спецификацию',
andFeat: 'Используя & и feat.', andFeat: 'Используя & и feat.',
using: 'Используя "{0}"' using: 'Используя "{separator}"'
}, },
singleAlbumArtist: 'Сохранить только основного исполнителя альбома', singleAlbumArtist: 'Сохранить только основного исполнителя альбома',
albumVariousArtists: 'Оставить "Various Artists" в исполнителях альбома', albumVariousArtists: 'Оставить "Various Artists" в исполнителях альбома',
@ -327,7 +340,8 @@ const ru = {
title: 'Настройки Spotify', title: 'Настройки Spotify',
clientID: 'Spotify clientID', clientID: 'Spotify clientID',
clientSecret: 'Spotify Client Secret', clientSecret: 'Spotify Client Secret',
username: 'Spotify username' username: 'Spotify username',
question: 'Как включить функции Spotify?'
}, },
reset: 'По умолчанию', reset: 'По умолчанию',
save: 'Сохранить', save: 'Сохранить',

View File

@ -3,9 +3,9 @@ const tr = {
welcome: `Deemix'e hoş geldin.`, welcome: `Deemix'e hoş geldin.`,
back: `geri`, back: `geri`,
loading: `yükleniyor`, loading: `yükleniyor`,
download: 'İndir {0}', download: 'İndir {thing}',
by: '{0} tarafından', by: '{artist} tarafından',
in: '{0} içinde', in: '{album} içinde',
download_hint: 'İndir', download_hint: 'İndir',
play_hint: 'Oynat', play_hint: 'Oynat',
toggle_download_tab_hint: 'Genişlet/Daralt', toggle_download_tab_hint: 'Genişlet/Daralt',
@ -75,7 +75,7 @@ const tr = {
download: 'Grafiği İndir' download: 'Grafiği İndir'
}, },
errors: { errors: {
title: '{0} Hatalı bulundu', title: '{name} Hatalı bulundu',
ids: { ids: {
invalidURL: 'URL geçersiz.', invalidURL: 'URL geçersiz.',
unsupportedURL: 'URL şimdilik desteklenmiyor', unsupportedURL: 'URL şimdilik desteklenmiyor',
@ -133,7 +133,7 @@ const tr = {
startSearching: 'Aramayı Başlat!', startSearching: 'Aramayı Başlat!',
description: description:
'Bir parçayı, tüm albümü, bir sanatçıyı, bir oynatma listesini... kısaca her şeyi aratabilirsin! Ayrıca Deezer Linki de yapıştırabilirsin!', 'Bir parçayı, tüm albümü, bir sanatçıyı, bir oynatma listesini... kısaca her şeyi aratabilirsin! Ayrıca Deezer Linki de yapıştırabilirsin!',
fans: '{0} Hayranlar', fans: '{n} Hayranlar',
noResults: 'Sonuç Bulunamadı', noResults: 'Sonuç Bulunamadı',
noResultsTrack: 'Parça bulunamadı', noResultsTrack: 'Parça bulunamadı',
noResultsAlbum: 'Albüm bulunamadı', noResultsAlbum: 'Albüm bulunamadı',
@ -143,9 +143,9 @@ const tr = {
searchbar: 'İstediğin bir şeyi arat (ya da bir link yapıştır.)', searchbar: 'İstediğin bir şeyi arat (ya da bir link yapıştır.)',
downloads: 'İndirilenler', downloads: 'İndirilenler',
toasts: { toasts: {
addedToQueue: '{0} kuyruğa eklendi', addedToQueue: '{item} kuyruğa eklendi',
alreadyInQueue: '{0} çoktan kuyrukta!', alreadyInQueue: '{item} çoktan kuyrukta!',
finishDownload: '{0} indirmesi tamamlandı.', finishDownload: '{item} indirmesi tamamlandı.',
allDownloaded: 'Tüm indirmeler tamamlandı!', allDownloaded: 'Tüm indirmeler tamamlandı!',
refreshFavs: 'Yenileme tamamlandı.!', refreshFavs: 'Yenileme tamamlandı.!',
loggingIn: 'Giriş yapılıyor', loggingIn: 'Giriş yapılıyor',
@ -155,8 +155,8 @@ const tr = {
loggedOut: 'Oturum kapatıldı.', loggedOut: 'Oturum kapatıldı.',
cancellingCurrentItem: 'Geçerli öğe iptal ediliyor.', cancellingCurrentItem: 'Geçerli öğe iptal ediliyor.',
currentItemCancelled: 'Geçerli öğe iptal edildi.', currentItemCancelled: 'Geçerli öğe iptal edildi.',
startAddingArtist: '{0} albüm kuyruğa ekleniyor', startAddingArtist: '{artist} albüm kuyruğa ekleniyor',
finishAddingArtist: '{0} albüm kuyruğa eklendi.', finishAddingArtist: '{artist} albüm kuyruğa eklendi.',
startConvertingSpotifyPlaylist: 'Spotify parçaları deezer parçalarına dönüştürülüyor.', startConvertingSpotifyPlaylist: 'Spotify parçaları deezer parçalarına dönüştürülüyor.',
finishConvertingSpotifyPlaylist: 'Spotify oynatma listesi dönüştürüldü.' finishConvertingSpotifyPlaylist: 'Spotify oynatma listesi dönüştürüldü.'
}, },
@ -279,7 +279,7 @@ const tr = {
nothing: 'Sadece ana sanatçıyı kaydet', nothing: 'Sadece ana sanatçıyı kaydet',
default: 'Genel prosedür uygulansın', default: 'Genel prosedür uygulansın',
andFeat: 'Kullanılanlar & ve Feat.', andFeat: 'Kullanılanlar & ve Feat.',
using: 'Kullanılan "{0}"' using: 'Kullanılan "{separator}"'
}, },
singleAlbumArtist: 'Sadece ana albüm sanatçısını kaydet', singleAlbumArtist: 'Sadece ana albüm sanatçısını kaydet',
albumVariousArtists: '"Çeşitli sanatçılar"ı sanatçı albümlerinde tut', albumVariousArtists: '"Çeşitli sanatçılar"ı sanatçı albümlerinde tut',

View File

@ -3,9 +3,9 @@ const vn = {
welcome: 'Chào mừng đến với deemix', welcome: 'Chào mừng đến với deemix',
back: 'trở lại', back: 'trở lại',
loading: 'đang tải', loading: 'đang tải',
download: 'Tải xuống {0}', download: 'Tải xuống {thing}',
by: 'bởi {0}', by: 'bởi {artist}',
in: 'trong {0}', in: 'trong {album}',
download_hint: 'Tải xuống', download_hint: 'Tải xuống',
play_hint: 'Phát', play_hint: 'Phát',
toggle_download_tab_hint: 'Mở rộng/Giấu', toggle_download_tab_hint: 'Mở rộng/Giấu',
@ -74,7 +74,7 @@ const vn = {
download: 'Tải xuống bảng xếp hạng này' download: 'Tải xuống bảng xếp hạng này'
}, },
errors: { errors: {
title: 'Lỗi {0}', title: 'Lỗi {name}',
ids: { ids: {
invalidURL: 'Không nhận diện được URL', invalidURL: 'Không nhận diện được URL',
unsupportedURL: 'URL này chưa được hỗ trợ', unsupportedURL: 'URL này chưa được hỗ trợ',
@ -133,7 +133,7 @@ const vn = {
startSearching: 'Bắt đầu tìm kiếm!', startSearching: 'Bắt đầu tìm kiếm!',
description: description:
'Bạn có thể tìm một bài hát, album, nghệ sĩ, playlist, v.v...! Bạn cũng có thể dùng link của Deezer', 'Bạn có thể tìm một bài hát, album, nghệ sĩ, playlist, v.v...! Bạn cũng có thể dùng link của Deezer',
fans: '{0} người hâm mộ', fans: '{n} người hâm mộ',
noResults: 'Không có kết quả', noResults: 'Không có kết quả',
noResultsTrack: 'Không tìm được bài hát nào', noResultsTrack: 'Không tìm được bài hát nào',
noResultsAlbum: 'Không tìm được album nào', noResultsAlbum: 'Không tìm được album nào',
@ -143,9 +143,9 @@ const vn = {
searchbar: 'Tìm những gì bạn muốn (bạn cũng có thể sữ dụng một đường link)', searchbar: 'Tìm những gì bạn muốn (bạn cũng có thể sữ dụng một đường link)',
downloads: 'Tải xuống', downloads: 'Tải xuống',
toasts: { toasts: {
addedToQueue: '{0} đã được đưa vào hàng chờ', addedToQueue: '{item} đã được đưa vào hàng chờ',
alreadyInQueue: '{0} đã đang trong hàng chờ!', alreadyInQueue: '{item} đã đang trong hàng chờ!',
finishDownload: '{0} đã tải xong.', finishDownload: '{item} đã tải xong.',
allDownloaded: 'Tất cả các bài hát đã được tải xuống!', allDownloaded: 'Tất cả các bài hát đã được tải xuống!',
refreshFavs: 'Tải lại hoàn tất!', refreshFavs: 'Tải lại hoàn tất!',
loggingIn: 'Đang đăng nhập', loggingIn: 'Đang đăng nhập',
@ -155,8 +155,8 @@ const vn = {
loggedOut: 'Đăng xuất', loggedOut: 'Đăng xuất',
cancellingCurrentItem: 'Đang hủy file hiện tại.', cancellingCurrentItem: 'Đang hủy file hiện tại.',
currentItemCancelled: 'File hiện tại đã bị hủy.', currentItemCancelled: 'File hiện tại đã bị hủy.',
startAddingArtist: 'Đang đưa {0} album vào hàng chờ', startAddingArtist: 'Đang đưa {artist} album vào hàng chờ',
finishAddingArtist: 'Đã đưa {0} album vào hàng chờ', finishAddingArtist: 'Đã đưa {artist} album vào hàng chờ',
startConvertingSpotifyPlaylist: 'Đang chuyển đổi các bài hát từ Spotify sang Deezer', startConvertingSpotifyPlaylist: 'Đang chuyển đổi các bài hát từ Spotify sang Deezer',
finishConvertingSpotifyPlaylist: 'Playlist của Spotify đã được chuyển đổi', finishConvertingSpotifyPlaylist: 'Playlist của Spotify đã được chuyển đổi',
loginNeededToDownload: 'Bạn cần phải đang nhập để tải nhạc!' loginNeededToDownload: 'Bạn cần phải đang nhập để tải nhạc!'
@ -280,7 +280,7 @@ const vn = {
nothing: 'Chỉ lưu nghệ sĩ chính', nothing: 'Chỉ lưu nghệ sĩ chính',
default: 'Dùng quy cách tiêu chuẩn', default: 'Dùng quy cách tiêu chuẩn',
andFeat: 'Dùng & và feat.', andFeat: 'Dùng & và feat.',
using: 'Dùng "{0}"' using: 'Dùng "{separator}"'
}, },
singleAlbumArtist: 'Chỉ lưu Nghệ sĩ Album chính', singleAlbumArtist: 'Chỉ lưu Nghệ sĩ Album chính',
albumVariousArtists: 'Giữ nguyên "Nhiều Nghệ sĩ" trong Nghệ sĩ Album', albumVariousArtists: 'Giữ nguyên "Nhiều Nghệ sĩ" trong Nghệ sĩ Album',

View File

@ -15,6 +15,7 @@ import tr from '@/lang/tr'
import vn from '@/lang/vn' import vn from '@/lang/vn'
import hr from '@/lang/hr' import hr from '@/lang/hr'
import ar from '@/lang/ar' import ar from '@/lang/ar'
import ko from '@/lang/ko'
Vue.use(VueI18n) Vue.use(VueI18n)
@ -35,7 +36,8 @@ const locales = {
tr, tr,
vn, vn,
hr, hr,
ar ar,
ko
} }
const i18n = new VueI18n({ const i18n = new VueI18n({

View File

@ -80,7 +80,7 @@ body {
margin: 0px; margin: 0px;
width: 100%; width: 100%;
height: 100%; height: 100%;
font-family: 'Open Sans'; font-family: 'Open Sans', 'sans-serif';
overflow: hidden; overflow: hidden;
background: var(--main-background); background: var(--main-background);
color: var(--foreground); color: var(--foreground);

View File

@ -11,6 +11,7 @@ import tr from 'svg-country-flags/svg/tr.svg'
import vn from 'svg-country-flags/svg/vn.svg' import vn from 'svg-country-flags/svg/vn.svg'
import hr from 'svg-country-flags/svg/hr.svg' import hr from 'svg-country-flags/svg/hr.svg'
import ar from '@/assets/ar.svg' import ar from '@/assets/ar.svg'
import ko from 'svg-country-flags/svg/kr.svg'
export default { export default {
it, it,
@ -25,5 +26,6 @@ export default {
tr, tr,
vn, vn,
hr, hr,
ar ar,
ko
} }

View File

@ -21,7 +21,7 @@ export function isValidURL(text) {
let lowerCaseText = text.toLowerCase() let lowerCaseText = text.toLowerCase()
if (lowerCaseText.startsWith('http')) { if (lowerCaseText.startsWith('http')) {
if (lowerCaseText.indexOf('deezer.com') >= 0 || lowerCaseText.indexOf('open.spotify.com') >= 0) { if (lowerCaseText.indexOf('deezer.com') >= 0 || lowerCaseText.indexOf('deezer.page.link') >= 0 || lowerCaseText.indexOf('open.spotify.com') >= 0) {
return true return true
} }
} else if (lowerCaseText.startsWith('spotify:')) { } else if (lowerCaseText.startsWith('spotify:')) {