@jjlmoya/utils-developer 1.14.0 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/category/i18n/fr.ts +1 -1
- package/src/category/i18n/ru.ts +1 -1
- package/src/layouts/PreviewLayout.astro +1 -0
- package/src/pages/[locale]/[slug].astro +29 -12
- package/src/tests/diacritics_density.test.ts +118 -0
- package/src/tests/inverted_punctuation.test.ts +113 -0
- package/src/tests/no_en_dash.test.ts +73 -0
- package/src/tests/script_density.test.ts +94 -0
- package/src/tests/shared-test-helpers.ts +56 -0
- package/src/tests/tool_exports.test.ts +34 -0
- package/src/tool/aspectRatio/i18n/de.ts +1 -1
- package/src/tool/aspectRatio/i18n/fr.ts +1 -1
- package/src/tool/aspectRatio/i18n/pl.ts +2 -2
- package/src/tool/aspectRatio/i18n/ru.ts +4 -4
- package/src/tool/aspectRatio/i18n/zh.ts +1 -1
- package/src/tool/aspectRatio/seo.astro +2 -1
- package/src/tool/calculadoraTiempoDatos/i18n/de.ts +1 -1
- package/src/tool/calculadoraTiempoDatos/i18n/pl.ts +1 -1
- package/src/tool/calculadoraTiempoDatos/i18n/ru.ts +5 -5
- package/src/tool/calculadoraTiempoDatos/i18n/sv.ts +5 -5
- package/src/tool/calculadoraTiempoDatos/i18n/zh.ts +1 -1
- package/src/tool/calculadoraTiempoDatos/seo.astro +2 -1
- package/src/tool/colorConverter/i18n/de.ts +1 -1
- package/src/tool/colorConverter/i18n/ru.ts +2 -2
- package/src/tool/colorConverter/seo.astro +2 -1
- package/src/tool/conversorExcelCsvHtml/i18n/es.ts +1 -1
- package/src/tool/conversorExcelCsvHtml/i18n/pl.ts +1 -1
- package/src/tool/conversorExcelCsvHtml/i18n/ru.ts +2 -2
- package/src/tool/conversorExcelCsvHtml/i18n/zh.ts +2 -2
- package/src/tool/conversorExcelCsvHtml/seo.astro +2 -1
- package/src/tool/cronGenerator/i18n/de.ts +4 -4
- package/src/tool/cronGenerator/i18n/en.ts +1 -1
- package/src/tool/cronGenerator/i18n/es.ts +2 -2
- package/src/tool/cronGenerator/i18n/fr.ts +5 -5
- package/src/tool/cronGenerator/i18n/id.ts +1 -1
- package/src/tool/cronGenerator/i18n/nl.ts +1 -1
- package/src/tool/cronGenerator/i18n/pl.ts +8 -8
- package/src/tool/cronGenerator/i18n/pt.ts +1 -1
- package/src/tool/cronGenerator/i18n/ru.ts +9 -9
- package/src/tool/cronGenerator/i18n/sv.ts +1 -1
- package/src/tool/cronGenerator/i18n/zh.ts +3 -3
- package/src/tool/cronGenerator/seo.astro +2 -1
- package/src/tool/cssSpecificityCalculator/i18n/de.ts +1 -1
- package/src/tool/cssSpecificityCalculator/i18n/fr.ts +3 -3
- package/src/tool/cssSpecificityCalculator/i18n/pl.ts +2 -2
- package/src/tool/cssSpecificityCalculator/i18n/ru.ts +2 -2
- package/src/tool/cssSpecificityCalculator/seo.astro +2 -1
- package/src/tool/cssToInlineConverter/i18n/de.ts +6 -6
- package/src/tool/cssToInlineConverter/i18n/es.ts +1 -1
- package/src/tool/cssToInlineConverter/i18n/fr.ts +3 -3
- package/src/tool/cssToInlineConverter/seo.astro +2 -1
- package/src/tool/duplicateCssRemover/i18n/de.ts +7 -7
- package/src/tool/duplicateCssRemover/i18n/fr.ts +1 -1
- package/src/tool/duplicateCssRemover/i18n/id.ts +1 -1
- package/src/tool/duplicateCssRemover/i18n/nl.ts +1 -1
- package/src/tool/duplicateCssRemover/i18n/pl.ts +1 -1
- package/src/tool/duplicateCssRemover/i18n/pt.ts +1 -1
- package/src/tool/duplicateCssRemover/i18n/ru.ts +3 -3
- package/src/tool/duplicateCssRemover/i18n/sv.ts +1 -1
- package/src/tool/duplicateCssRemover/seo.astro +2 -1
- package/src/tool/generadorSecurityTxt/i18n/de.ts +5 -5
- package/src/tool/generadorSecurityTxt/i18n/ru.ts +2 -2
- package/src/tool/generadorSecurityTxt/seo.astro +2 -1
- package/src/tool/hashGenerator/i18n/ru.ts +5 -5
- package/src/tool/hashGenerator/i18n/zh.ts +2 -2
- package/src/tool/hashGenerator/seo.astro +2 -1
- package/src/tool/inspectorCertificadosSsl/i18n/de.ts +6 -6
- package/src/tool/inspectorCertificadosSsl/i18n/ru.ts +5 -5
- package/src/tool/inspectorCertificadosSsl/seo.astro +2 -1
- package/src/tool/jsonFormatter/i18n/de.ts +4 -4
- package/src/tool/jsonFormatter/i18n/en.ts +4 -4
- package/src/tool/jsonFormatter/i18n/es.ts +4 -4
- package/src/tool/jsonFormatter/i18n/fr.ts +4 -4
- package/src/tool/jsonFormatter/i18n/id.ts +4 -4
- package/src/tool/jsonFormatter/i18n/it.ts +4 -4
- package/src/tool/jsonFormatter/i18n/ja.ts +4 -4
- package/src/tool/jsonFormatter/i18n/ko.ts +4 -4
- package/src/tool/jsonFormatter/i18n/nl.ts +4 -4
- package/src/tool/jsonFormatter/i18n/pl.ts +4 -4
- package/src/tool/jsonFormatter/i18n/pt.ts +4 -4
- package/src/tool/jsonFormatter/i18n/ru.ts +5 -5
- package/src/tool/jsonFormatter/i18n/sv.ts +4 -4
- package/src/tool/jsonFormatter/i18n/tr.ts +4 -4
- package/src/tool/jsonFormatter/i18n/zh.ts +5 -5
- package/src/tool/jsonFormatter/seo.astro +2 -1
- package/src/tool/keycode/i18n/de.ts +7 -7
- package/src/tool/keycode/i18n/en.ts +5 -5
- package/src/tool/keycode/i18n/es.ts +5 -5
- package/src/tool/keycode/i18n/fr.ts +7 -7
- package/src/tool/keycode/i18n/id.ts +5 -5
- package/src/tool/keycode/i18n/it.ts +5 -5
- package/src/tool/keycode/i18n/ja.ts +5 -5
- package/src/tool/keycode/i18n/ko.ts +5 -5
- package/src/tool/keycode/i18n/nl.ts +5 -5
- package/src/tool/keycode/i18n/pl.ts +7 -7
- package/src/tool/keycode/i18n/pt.ts +5 -5
- package/src/tool/keycode/i18n/ru.ts +6 -6
- package/src/tool/keycode/i18n/sv.ts +5 -5
- package/src/tool/keycode/i18n/tr.ts +5 -5
- package/src/tool/keycode/i18n/zh.ts +5 -5
- package/src/tool/keycode/seo.astro +2 -1
- package/src/tool/llmCostCalculator/i18n/de.ts +4 -4
- package/src/tool/llmCostCalculator/i18n/en.ts +3 -3
- package/src/tool/llmCostCalculator/i18n/fr.ts +3 -3
- package/src/tool/llmCostCalculator/i18n/id.ts +3 -3
- package/src/tool/llmCostCalculator/i18n/pt.ts +3 -3
- package/src/tool/llmCostCalculator/i18n/ru.ts +3 -3
- package/src/tool/llmCostCalculator/i18n/sv.ts +3 -3
- package/src/tool/llmCostCalculator/i18n/tr.ts +3 -3
- package/src/tool/llmCostCalculator/i18n/zh.ts +3 -3
- package/src/tool/llmCostCalculator/seo.astro +2 -1
- package/src/tool/mobileMockupGenerator/i18n/es.ts +1 -1
- package/src/tool/mobileMockupGenerator/seo.astro +2 -1
- package/src/tool/musicalTypography/i18n/de.ts +1 -1
- package/src/tool/musicalTypography/i18n/fr.ts +1 -1
- package/src/tool/musicalTypography/i18n/id.ts +1 -1
- package/src/tool/musicalTypography/i18n/it.ts +1 -1
- package/src/tool/musicalTypography/i18n/ko.ts +1 -1
- package/src/tool/musicalTypography/i18n/ru.ts +3 -3
- package/src/tool/musicalTypography/seo.astro +2 -1
- package/src/tool/placeholderGenerator/i18n/de.ts +4 -4
- package/src/tool/placeholderGenerator/i18n/ru.ts +1 -1
- package/src/tool/placeholderGenerator/seo.astro +2 -1
- package/src/tool/promptLibrary/i18n/de.ts +1 -1
- package/src/tool/promptLibrary/seo.astro +2 -1
- package/src/tool/readabilityCalculator/i18n/de.ts +2 -2
- package/src/tool/readabilityCalculator/seo.astro +2 -1
- package/src/tool/readabilityCalculator/visual-readability-calculator-wcag-apca.css +87 -3
- package/src/tool/svgSanitizer/i18n/de.ts +2 -2
- package/src/tool/svgSanitizer/i18n/id.ts +1 -1
- package/src/tool/svgSanitizer/i18n/pl.ts +1 -1
- package/src/tool/svgSanitizer/i18n/ru.ts +7 -7
- package/src/tool/svgSanitizer/i18n/sv.ts +3 -3
- package/src/tool/svgSanitizer/i18n/tr.ts +3 -3
- package/src/tool/svgSanitizer/i18n/zh.ts +3 -3
- package/src/tool/svgSanitizer/seo.astro +2 -1
- package/src/tool/svgToCss/i18n/de.ts +2 -2
- package/src/tool/svgToCss/i18n/es.ts +1 -1
- package/src/tool/svgToCss/i18n/fr.ts +1 -1
- package/src/tool/svgToCss/i18n/pl.ts +1 -1
- package/src/tool/svgToCss/i18n/ru.ts +2 -2
- package/src/tool/svgToCss/i18n/zh.ts +2 -2
- package/src/tool/svgToCss/seo.astro +2 -1
- package/src/tool/urlCleaner/component.astro +23 -5
- package/src/tool/urlCleaner/i18n/de.ts +3 -3
- package/src/tool/urlCleaner/i18n/es.ts +1 -1
- package/src/tool/urlCleaner/i18n/id.ts +1 -1
- package/src/tool/urlCleaner/i18n/nl.ts +1 -1
- package/src/tool/urlCleaner/seo.astro +2 -1
- package/src/tool/urlCleaner/url-tracking-cleaner.css +92 -2
- package/src/tool/urlEncoderDecoder/i18n/de.ts +5 -5
- package/src/tool/urlEncoderDecoder/i18n/fr.ts +2 -2
- package/src/tool/urlEncoderDecoder/i18n/pl.ts +5 -5
- package/src/tool/urlEncoderDecoder/i18n/ru.ts +8 -8
- package/src/tool/urlEncoderDecoder/i18n/sv.ts +5 -5
- package/src/tool/urlEncoderDecoder/i18n/zh.ts +5 -5
- package/src/tool/urlEncoderDecoder/seo.astro +2 -1
- package/src/tool/utmGenerator/i18n/de.ts +2 -2
- package/src/tool/utmGenerator/i18n/pl.ts +5 -5
- package/src/tool/utmGenerator/i18n/ru.ts +6 -6
- package/src/tool/utmGenerator/seo.astro +2 -1
|
@@ -100,15 +100,15 @@ export const content: ToolLocaleContent<KeycodeUI> = {
|
|
|
100
100
|
bibliographyTitle: '참고 자료 및 표준',
|
|
101
101
|
bibliography: [
|
|
102
102
|
{
|
|
103
|
-
name: 'MDN Web Docs
|
|
103
|
+
name: 'MDN Web Docs - KeyboardEvent',
|
|
104
104
|
url: 'https://developer.mozilla.org/ko/docs/Web/API/KeyboardEvent',
|
|
105
105
|
},
|
|
106
106
|
{
|
|
107
|
-
name: 'UI Events Specification (W3C)
|
|
107
|
+
name: 'UI Events Specification (W3C) - KeyboardEvent',
|
|
108
108
|
url: 'https://www.w3.org/TR/uievents/#events-keyboardevents',
|
|
109
109
|
},
|
|
110
110
|
{
|
|
111
|
-
name: 'MDN
|
|
111
|
+
name: 'MDN - KeyboardEvent.code values',
|
|
112
112
|
url: 'https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_code_values',
|
|
113
113
|
},
|
|
114
114
|
],
|
|
@@ -135,12 +135,12 @@ export const content: ToolLocaleContent<KeycodeUI> = {
|
|
|
135
135
|
},
|
|
136
136
|
{
|
|
137
137
|
type: 'card',
|
|
138
|
-
title: 'event.code
|
|
138
|
+
title: 'event.code: 물리적 키',
|
|
139
139
|
html: '<p>QWERTY 명명법을 사용하여 키보드에서 키의 <strong>물리적 위치</strong> 식별자를 반환합니다. 예를 들어 AZERTY 키보드의 "A" 키는 <code>KeyQ</code>를 반환합니다. 문자가 아닌 위치가 중요한 게임 컨트롤에 이상적입니다.</p>',
|
|
140
140
|
},
|
|
141
141
|
{
|
|
142
142
|
type: 'card',
|
|
143
|
-
title: 'event.key
|
|
143
|
+
title: 'event.key: 생성된 문자',
|
|
144
144
|
html: '<p>언어와 활성화된 수정자에 따라 생성된 <strong>문자 값</strong>을 반환합니다. Shift+A를 누르면 <code>"A"</code>가 반환되고, Shift 없이 누르면 <code>"a"</code>가 반환됩니다. 특수 키의 경우 <code>"Enter"</code>, <code>"Escape"</code>, <code>"ArrowUp"</code>과 같은 이름을 반환합니다.</p>',
|
|
145
145
|
},
|
|
146
146
|
{
|
|
@@ -100,15 +100,15 @@ export const content: ToolLocaleContent<KeycodeUI> = {
|
|
|
100
100
|
bibliographyTitle: 'Referenties en Standaarden',
|
|
101
101
|
bibliography: [
|
|
102
102
|
{
|
|
103
|
-
name: 'MDN Web Docs
|
|
103
|
+
name: 'MDN Web Docs - KeyboardEvent',
|
|
104
104
|
url: 'https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent',
|
|
105
105
|
},
|
|
106
106
|
{
|
|
107
|
-
name: 'UI Events Specification (W3C)
|
|
107
|
+
name: 'UI Events Specification (W3C) - KeyboardEvent',
|
|
108
108
|
url: 'https://www.w3.org/TR/uievents/#events-keyboardevents',
|
|
109
109
|
},
|
|
110
110
|
{
|
|
111
|
-
name: 'MDN
|
|
111
|
+
name: 'MDN - KeyboardEvent.code values',
|
|
112
112
|
url: 'https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_code_values',
|
|
113
113
|
},
|
|
114
114
|
],
|
|
@@ -135,12 +135,12 @@ export const content: ToolLocaleContent<KeycodeUI> = {
|
|
|
135
135
|
},
|
|
136
136
|
{
|
|
137
137
|
type: 'card',
|
|
138
|
-
title: 'event.code
|
|
138
|
+
title: 'event.code: De fysieke toets',
|
|
139
139
|
html: '<p>Geeft de identifier terug van de <strong>fysieke positie</strong> van de toets op het toetsenbord, met behulp van QWERTY-nomenclatuur. De "A"-toets op een AZERTY-toetsenbord geeft bijvoorbeeld <code>KeyQ</code> terug. Ideaal voor spelbesturingen waarbij de positie telt, niet het teken.</p>',
|
|
140
140
|
},
|
|
141
141
|
{
|
|
142
142
|
type: 'card',
|
|
143
|
-
title: 'event.key
|
|
143
|
+
title: 'event.key: Het gegenereerde teken',
|
|
144
144
|
html: '<p>Geeft de <strong>tekenwaarde</strong> terug die gegenereerd wordt op basis van taal en actieve modifiers. Shift+A indrukken geeft <code>"A"</code> terug; zonder Shift geeft het <code>"a"</code>. Voor speciale toetsen geeft het namen terug zoals <code>"Enter"</code>, <code>"Escape"</code>, <code>"ArrowUp"</code>.</p>',
|
|
145
145
|
},
|
|
146
146
|
{
|
|
@@ -41,7 +41,7 @@ const howToData = [
|
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
name: 'Użyj fragmentów kodu',
|
|
44
|
-
text: 'W sekcji
|
|
44
|
+
text: 'W sekcji "Szybkie fragmenty" znajdziesz bloki kodu JavaScript gotowe do wklejenia bezpośrednio do swojego projektu.',
|
|
45
45
|
},
|
|
46
46
|
];
|
|
47
47
|
|
|
@@ -100,15 +100,15 @@ export const content: ToolLocaleContent<KeycodeUI> = {
|
|
|
100
100
|
bibliographyTitle: 'Referencje i Standardy',
|
|
101
101
|
bibliography: [
|
|
102
102
|
{
|
|
103
|
-
name: 'MDN Web Docs
|
|
103
|
+
name: 'MDN Web Docs - KeyboardEvent',
|
|
104
104
|
url: 'https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent',
|
|
105
105
|
},
|
|
106
106
|
{
|
|
107
|
-
name: 'UI Events Specification (W3C)
|
|
107
|
+
name: 'UI Events Specification (W3C) - KeyboardEvent',
|
|
108
108
|
url: 'https://www.w3.org/TR/uievents/#events-keyboardevents',
|
|
109
109
|
},
|
|
110
110
|
{
|
|
111
|
-
name: 'MDN
|
|
111
|
+
name: 'MDN - KeyboardEvent.code values',
|
|
112
112
|
url: 'https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_code_values',
|
|
113
113
|
},
|
|
114
114
|
],
|
|
@@ -135,12 +135,12 @@ export const content: ToolLocaleContent<KeycodeUI> = {
|
|
|
135
135
|
},
|
|
136
136
|
{
|
|
137
137
|
type: 'card',
|
|
138
|
-
title: 'event.code
|
|
139
|
-
html: '<p>Zwraca identyfikator <strong>fizycznej pozycji</strong> klawisza na klawiaturze, używając nomenklatury QWERTY. Na przykład klawisz
|
|
138
|
+
title: 'event.code: Fizyczny klawisz',
|
|
139
|
+
html: '<p>Zwraca identyfikator <strong>fizycznej pozycji</strong> klawisza na klawiaturze, używając nomenklatury QWERTY. Na przykład klawisz "A" na klawiaturze AZERTY zwraca <code>KeyQ</code>. Idealny do sterowania grami, gdzie liczy się pozycja, a nie znak.</p>',
|
|
140
140
|
},
|
|
141
141
|
{
|
|
142
142
|
type: 'card',
|
|
143
|
-
title: 'event.key
|
|
143
|
+
title: 'event.key: Wygenerowany znak',
|
|
144
144
|
html: '<p>Zwraca <strong>wartość znaku</strong> wygenerowanego zgodnie z językiem i aktywnymi modyfikatorami. Naciśnięcie Shift+A zwraca <code>"A"</code>; bez Shift zwraca <code>"a"</code>. Dla klawiszy specjalnych zwraca nazwy jak <code>"Enter"</code>, <code>"Escape"</code>, <code>"ArrowUp"</code>.</p>',
|
|
145
145
|
},
|
|
146
146
|
{
|
|
@@ -100,15 +100,15 @@ export const content: ToolLocaleContent<KeycodeUI> = {
|
|
|
100
100
|
bibliographyTitle: 'Referências e Padrões',
|
|
101
101
|
bibliography: [
|
|
102
102
|
{
|
|
103
|
-
name: 'MDN Web Docs
|
|
103
|
+
name: 'MDN Web Docs - KeyboardEvent',
|
|
104
104
|
url: 'https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent',
|
|
105
105
|
},
|
|
106
106
|
{
|
|
107
|
-
name: 'Especificação UI Events (W3C)
|
|
107
|
+
name: 'Especificação UI Events (W3C) - KeyboardEvent',
|
|
108
108
|
url: 'https://www.w3.org/TR/uievents/#events-keyboardevents',
|
|
109
109
|
},
|
|
110
110
|
{
|
|
111
|
-
name: 'MDN
|
|
111
|
+
name: 'MDN - Valores de KeyboardEvent.code',
|
|
112
112
|
url: 'https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_code_values',
|
|
113
113
|
},
|
|
114
114
|
],
|
|
@@ -135,12 +135,12 @@ export const content: ToolLocaleContent<KeycodeUI> = {
|
|
|
135
135
|
},
|
|
136
136
|
{
|
|
137
137
|
type: 'card',
|
|
138
|
-
title: 'event.code
|
|
138
|
+
title: 'event.code: A tecla física',
|
|
139
139
|
html: '<p>Retorna o identificador da <strong>posição física</strong> da tecla no teclado, usando nomenclatura QWERTY. Por exemplo, a tecla "A" em um teclado AZERTY retorna <code>KeyQ</code>. Ideal para controles de jogos onde a posição importa, não o carácter.</p>',
|
|
140
140
|
},
|
|
141
141
|
{
|
|
142
142
|
type: 'card',
|
|
143
|
-
title: 'event.key
|
|
143
|
+
title: 'event.key: O carácter gerado',
|
|
144
144
|
html: '<p>Retorna o <strong>valor de carácter</strong> gerado de acordo com o idioma e modificadores ativos. Pressionar Shift+A retorna <code>"A"</code>; sem Shift retorna <code>"a"</code>. Para teclas especiais, retorna nomes como <code>"Enter"</code>, <code>"Escape"</code>, <code>"ArrowUp"</code>.</p>',
|
|
145
145
|
},
|
|
146
146
|
{
|
|
@@ -16,7 +16,7 @@ const faqData = [
|
|
|
16
16
|
{
|
|
17
17
|
question: 'Что такое event.which и почему это устаревшее?',
|
|
18
18
|
answer:
|
|
19
|
-
'event.which
|
|
19
|
+
'event.which - это устаревшее свойство, которое возвращает числовой код ASCII для клавиши. Оно помечено как устаревшее в современных стандартах, потому что event.key и event.code заменяют его более точной и читаемой информацией. Оно показано в этом инструменте в образовательных целях.',
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
22
|
question: 'Что означает свойство location?',
|
|
@@ -100,15 +100,15 @@ export const content: ToolLocaleContent<KeycodeUI> = {
|
|
|
100
100
|
bibliographyTitle: 'Ссылки и Стандарты',
|
|
101
101
|
bibliography: [
|
|
102
102
|
{
|
|
103
|
-
name: 'MDN Web Docs
|
|
103
|
+
name: 'MDN Web Docs - KeyboardEvent',
|
|
104
104
|
url: 'https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent',
|
|
105
105
|
},
|
|
106
106
|
{
|
|
107
|
-
name: 'Спецификация UI Events (W3C)
|
|
107
|
+
name: 'Спецификация UI Events (W3C) - KeyboardEvent',
|
|
108
108
|
url: 'https://www.w3.org/TR/uievents/#events-keyboardevents',
|
|
109
109
|
},
|
|
110
110
|
{
|
|
111
|
-
name: 'MDN
|
|
111
|
+
name: 'MDN - Значения KeyboardEvent.code',
|
|
112
112
|
url: 'https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_code_values',
|
|
113
113
|
},
|
|
114
114
|
],
|
|
@@ -135,12 +135,12 @@ export const content: ToolLocaleContent<KeycodeUI> = {
|
|
|
135
135
|
},
|
|
136
136
|
{
|
|
137
137
|
type: 'card',
|
|
138
|
-
title: 'event.code
|
|
138
|
+
title: 'event.code: Физическая клавиша',
|
|
139
139
|
html: '<p>Возвращает идентификатор <strong>физической позиции</strong> клавиши на клавиатуре, используя номенклатуру QWERTY. Например, клавиша "A" на клавиатуре AZERTY возвращает <code>KeyQ</code>. Идеально для управления игрой, где важна позиция, а не символ.</p>',
|
|
140
140
|
},
|
|
141
141
|
{
|
|
142
142
|
type: 'card',
|
|
143
|
-
title: 'event.key
|
|
143
|
+
title: 'event.key: Сгенерированный символ',
|
|
144
144
|
html: '<p>Возвращает <strong>значение символа</strong>, сгенерированное в соответствии с языком и активными модификаторами. Нажатие Shift+A возвращает <code>"A"</code>; без Shift возвращает <code>"a"</code>. Для специальных клавиш возвращает названия, такие как <code>"Enter"</code>, <code>"Escape"</code>, <code>"ArrowUp"</code>.</p>',
|
|
145
145
|
},
|
|
146
146
|
{
|
|
@@ -100,15 +100,15 @@ export const content: ToolLocaleContent<KeycodeUI> = {
|
|
|
100
100
|
bibliographyTitle: 'Referenser och Standarder',
|
|
101
101
|
bibliography: [
|
|
102
102
|
{
|
|
103
|
-
name: 'MDN Web Docs
|
|
103
|
+
name: 'MDN Web Docs - KeyboardEvent',
|
|
104
104
|
url: 'https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent',
|
|
105
105
|
},
|
|
106
106
|
{
|
|
107
|
-
name: 'UI Events Specification (W3C)
|
|
107
|
+
name: 'UI Events Specification (W3C) - KeyboardEvent',
|
|
108
108
|
url: 'https://www.w3.org/TR/uievents/#events-keyboardevents',
|
|
109
109
|
},
|
|
110
110
|
{
|
|
111
|
-
name: 'MDN
|
|
111
|
+
name: 'MDN - KeyboardEvent.code values',
|
|
112
112
|
url: 'https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_code_values',
|
|
113
113
|
},
|
|
114
114
|
],
|
|
@@ -135,12 +135,12 @@ export const content: ToolLocaleContent<KeycodeUI> = {
|
|
|
135
135
|
},
|
|
136
136
|
{
|
|
137
137
|
type: 'card',
|
|
138
|
-
title: 'event.code
|
|
138
|
+
title: 'event.code: Den fysiska tangenten',
|
|
139
139
|
html: '<p>Returnerar identifieraren för tangentens <strong>fysiska position</strong> på tangentbordet, med QWERTY-nomenklatur. Till exempel returnerar tangenten "A" på ett AZERTY-tangentbord <code>KeyQ</code>. Idealisk för spelkontroller där position spelar roll, inte tecknet.</p>',
|
|
140
140
|
},
|
|
141
141
|
{
|
|
142
142
|
type: 'card',
|
|
143
|
-
title: 'event.key
|
|
143
|
+
title: 'event.key: Det genererade tecknet',
|
|
144
144
|
html: '<p>Returnerar det <strong>genererade teckenvärde</strong> enligt språk och aktiva modifierare. Att trycka Shift+A returnerar <code>"A"</code>; utan Shift returnerar <code>"a"</code>. För specialtangenter returneras namn som <code>"Enter"</code>, <code>"Escape"</code>, <code>"ArrowUp"</code>.</p>',
|
|
145
145
|
},
|
|
146
146
|
{
|
|
@@ -100,15 +100,15 @@ export const content: ToolLocaleContent<KeycodeUI> = {
|
|
|
100
100
|
bibliographyTitle: 'Referanslar ve Standartlar',
|
|
101
101
|
bibliography: [
|
|
102
102
|
{
|
|
103
|
-
name: 'MDN Web Docs
|
|
103
|
+
name: 'MDN Web Docs - KeyboardEvent',
|
|
104
104
|
url: 'https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent',
|
|
105
105
|
},
|
|
106
106
|
{
|
|
107
|
-
name: 'UI Events Specification (W3C)
|
|
107
|
+
name: 'UI Events Specification (W3C) - KeyboardEvent',
|
|
108
108
|
url: 'https://www.w3.org/TR/uievents/#events-keyboardevents',
|
|
109
109
|
},
|
|
110
110
|
{
|
|
111
|
-
name: 'MDN
|
|
111
|
+
name: 'MDN - KeyboardEvent.code values',
|
|
112
112
|
url: 'https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_code_values',
|
|
113
113
|
},
|
|
114
114
|
],
|
|
@@ -135,12 +135,12 @@ export const content: ToolLocaleContent<KeycodeUI> = {
|
|
|
135
135
|
},
|
|
136
136
|
{
|
|
137
137
|
type: 'card',
|
|
138
|
-
title: 'event.code
|
|
138
|
+
title: 'event.code: Fiziksel Tuş',
|
|
139
139
|
html: '<p>Tuşun klavyedeki <strong>fiziksel konumunun</strong> tanımlayıcısını QWERTY nomenklaturunu kullanarak döndürür. Örneğin, AZERTY klavyesindeki "A" tuşu <code>KeyQ</code> döndürür. Konum önemli olan, karakter değil, oyun kontrolleri için idealdir.</p>',
|
|
140
140
|
},
|
|
141
141
|
{
|
|
142
142
|
type: 'card',
|
|
143
|
-
title: 'event.key
|
|
143
|
+
title: 'event.key: Oluşturulan Karakter',
|
|
144
144
|
html: '<p>Dil ve etkin değiştiricilere göre oluşturulan <strong>karakter değerini</strong> döndürür. Shift+A tuşuna basmak <code>"A"</code> döndürür; Shift olmadan <code>"a"</code> döndürür. Özel tuşlar için <code>"Enter"</code>, <code>"Escape"</code>, <code>"ArrowUp"</code> gibi adları döndürür.</p>',
|
|
145
145
|
},
|
|
146
146
|
{
|
|
@@ -100,15 +100,15 @@ export const content: ToolLocaleContent<KeycodeUI> = {
|
|
|
100
100
|
bibliographyTitle: '参考资料和标准',
|
|
101
101
|
bibliography: [
|
|
102
102
|
{
|
|
103
|
-
name: 'MDN Web Docs
|
|
103
|
+
name: 'MDN Web Docs - KeyboardEvent',
|
|
104
104
|
url: 'https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent',
|
|
105
105
|
},
|
|
106
106
|
{
|
|
107
|
-
name: 'UI Events Specification (W3C)
|
|
107
|
+
name: 'UI Events Specification (W3C) - KeyboardEvent',
|
|
108
108
|
url: 'https://www.w3.org/TR/uievents/#events-keyboardevents',
|
|
109
109
|
},
|
|
110
110
|
{
|
|
111
|
-
name: 'MDN
|
|
111
|
+
name: 'MDN - KeyboardEvent.code values',
|
|
112
112
|
url: 'https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_code_values',
|
|
113
113
|
},
|
|
114
114
|
],
|
|
@@ -135,12 +135,12 @@ export const content: ToolLocaleContent<KeycodeUI> = {
|
|
|
135
135
|
},
|
|
136
136
|
{
|
|
137
137
|
type: 'card',
|
|
138
|
-
title: 'event.code
|
|
138
|
+
title: 'event.code: 物理按键',
|
|
139
139
|
html: '<p>使用QWERTY命名法返回键盘上按键<strong>物理位置</strong>的标识符。例如,AZERTY键盘上的"A"键返回<code>KeyQ</code>。对于位置重要而不是字符的游戏控制非常理想。</p>',
|
|
140
140
|
},
|
|
141
141
|
{
|
|
142
142
|
type: 'card',
|
|
143
|
-
title: 'event.key
|
|
143
|
+
title: 'event.key: 生成的字符',
|
|
144
144
|
html: '<p>返回根据语言和活动修饰符生成的<strong>字符值</strong>。按Shift+A返回<code>"A"</code>;没有Shift时返回<code>"a"</code>。对于特殊按键,返回名称如<code>"Enter"</code>、<code>"Escape"</code>、<code>"ArrowUp"</code>。</p>',
|
|
145
145
|
},
|
|
146
146
|
{
|
|
@@ -9,6 +9,7 @@ interface Props {
|
|
|
9
9
|
|
|
10
10
|
const { locale = 'es' } = Astro.props;
|
|
11
11
|
const content = await keycode.i18n[locale]?.();
|
|
12
|
+
if (!content) return null;
|
|
12
13
|
---
|
|
13
14
|
|
|
14
|
-
{content && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
15
|
+
{content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
@@ -16,12 +16,12 @@ const faqData = [
|
|
|
16
16
|
{
|
|
17
17
|
question: 'Was sind Tokens und wie hängen sie mit Wörtern zusammen?',
|
|
18
18
|
answer:
|
|
19
|
-
'Ein Token ist die grundlegende Texteinheit, die ein Sprachmodell verarbeitet. Im Durchschnitt entspricht 1 Token etwa 0,75 Wörtern auf Englisch, also 1.000 Tokens ≈ 750 Wörter. Preise werden pro Million Tokens ($/1M) angegeben
|
|
19
|
+
'Ein Token ist die grundlegende Texteinheit, die ein Sprachmodell verarbeitet. Im Durchschnitt entspricht 1 Token etwa 0,75 Wörtern auf Englisch, also 1.000 Tokens ≈ 750 Wörter. Preise werden pro Million Tokens ($/1M) angegeben - das ist die branchenübliche Einheit bei allen Anbietern.',
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
22
|
question: 'Warum sind Ausgabe Tokens teurer als Eingabe Tokens?',
|
|
23
23
|
answer:
|
|
24
|
-
'Das Generieren von Text (Ausgabe) erfordert, dass das Modell jeden Token nacheinander berechnet
|
|
24
|
+
'Das Generieren von Text (Ausgabe) erfordert, dass das Modell jeden Token nacheinander berechnet - das ist rechenintensiver als das Lesen der Eingabe. Die meisten Anbieter berechnen für Ausgabe Tokens das 3- bis 5-Fache des Preises für Eingabe Tokens.',
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
question: 'Wie kann ich die Kosten meiner LLM-API senken?',
|
|
@@ -127,7 +127,7 @@ export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
|
127
127
|
},
|
|
128
128
|
{
|
|
129
129
|
type: 'paragraph',
|
|
130
|
-
html: 'APIs für große Sprachmodelle werden nach Token-Nutzung abgerechnet
|
|
130
|
+
html: 'APIs für große Sprachmodelle werden nach Token-Nutzung abgerechnet - nicht nach Zeit oder Anfragen. Jeder API-Aufruf hat zwei Kostenkomponenten: die <strong>Eingabekosten</strong> (Verarbeitung deines Prompts) und die <strong>Ausgabekosten</strong> (Generierung der Antwort). Diesen Unterschied zu verstehen ist der Schlüssel zur genauen Schätzung deiner monatlichen Rechnung.',
|
|
131
131
|
},
|
|
132
132
|
{
|
|
133
133
|
type: 'title',
|
|
@@ -146,7 +146,7 @@ export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
|
146
146
|
{
|
|
147
147
|
type: 'card',
|
|
148
148
|
title: 'Ausgabe Tokens',
|
|
149
|
-
html: '<p>Ausgabe Tokens werden sequenziell
|
|
149
|
+
html: '<p>Ausgabe Tokens werden sequenziell - Token für Token - erzeugt, was sie rechenintensiver macht. Die meisten Anbieter berechnen für Ausgabe Tokens <strong>das 3- bis 5-Fache</strong> des Eingabepreises. Eine Antwort mit 300 Wörtern erzeugt etwa 400 Ausgabe Tokens. Präzise Antworten zu halten ist eine der wirkungsvollsten Methoden, Kosten zu sparen.</p>',
|
|
150
150
|
},
|
|
151
151
|
{
|
|
152
152
|
type: 'title',
|
|
@@ -21,7 +21,7 @@ const faqData = [
|
|
|
21
21
|
{
|
|
22
22
|
question: 'Why are output tokens more expensive than input tokens?',
|
|
23
23
|
answer:
|
|
24
|
-
'Generating text (output) requires the model to compute each token sequentially, which is computationally more intensive than reading the input. Most providers charge 3
|
|
24
|
+
'Generating text (output) requires the model to compute each token sequentially, which is computationally more intensive than reading the input. Most providers charge 3-5x more for output tokens than input tokens.',
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
question: 'How can I reduce my LLM API costs?',
|
|
@@ -146,7 +146,7 @@ export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
|
146
146
|
{
|
|
147
147
|
type: 'card',
|
|
148
148
|
title: 'Output tokens',
|
|
149
|
-
html: '<p>Output tokens are generated one by one in sequence, making them more computationally expensive. Most providers charge <strong>3
|
|
149
|
+
html: '<p>Output tokens are generated one by one in sequence, making them more computationally expensive. Most providers charge <strong>3-5× more</strong> for output tokens. A 300-word response generates roughly 400 output tokens. Keeping responses concise is one of the most effective cost-saving strategies.</p>',
|
|
150
150
|
},
|
|
151
151
|
{
|
|
152
152
|
type: 'title',
|
|
@@ -155,7 +155,7 @@ export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
|
155
155
|
},
|
|
156
156
|
{
|
|
157
157
|
type: 'tip',
|
|
158
|
-
html: 'Start with a capable mid-tier model like <code>GPT-4o mini</code> or <code>Gemini 1.5 Flash</code> and only upgrade if quality falls short. The cost difference between a small and large model can be 10
|
|
158
|
+
html: 'Start with a capable mid-tier model like <code>GPT-4o mini</code> or <code>Gemini 1.5 Flash</code> and only upgrade if quality falls short. The cost difference between a small and large model can be 10-100×.',
|
|
159
159
|
},
|
|
160
160
|
{
|
|
161
161
|
type: 'paragraph',
|
|
@@ -11,7 +11,7 @@ const faqData = [
|
|
|
11
11
|
{
|
|
12
12
|
question: "Comment le coût d'une API LLM est-il calculé ?",
|
|
13
13
|
answer:
|
|
14
|
-
"Les APIs LLM facturent séparément les tokens d'entrée (le prompt) et les tokens de sortie (la réponse). Le coût total par requête est
|
|
14
|
+
"Les APIs LLM facturent séparément les tokens d'entrée (le prompt) et les tokens de sortie (la réponse). Le coût total par requête est: (tokens entrée × prix entrée + tokens sortie × prix sortie) / 1 000 000. Multipliez par le nombre de requêtes pour obtenir le coût mensuel total.",
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
17
|
question: 'Que sont les tokens et comment se rapportent-ils aux mots ?',
|
|
@@ -127,7 +127,7 @@ export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
|
127
127
|
},
|
|
128
128
|
{
|
|
129
129
|
type: 'paragraph',
|
|
130
|
-
html: "Les APIs de modèles de langage facturent en fonction de l'utilisation des tokens, et non du temps ou des requêtes. Chaque appel a deux coûts
|
|
130
|
+
html: "Les APIs de modèles de langage facturent en fonction de l'utilisation des tokens, et non du temps ou des requêtes. Chaque appel a deux coûts: le <strong>coût d'entrée</strong> (traitement de votre prompt) et le <strong>coût de sortie</strong> (génération de la réponse). Comprendre cette distinction est essentiel pour estimer avec précision votre facture mensuelle.",
|
|
131
131
|
},
|
|
132
132
|
{
|
|
133
133
|
type: 'title',
|
|
@@ -141,7 +141,7 @@ export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
|
141
141
|
{
|
|
142
142
|
type: 'card',
|
|
143
143
|
title: "Tokens d'entrée",
|
|
144
|
-
html: "<p>Les tokens d'entrée représentent tout ce qui est envoyé <strong>au</strong> modèle
|
|
144
|
+
html: "<p>Les tokens d'entrée représentent tout ce qui est envoyé <strong>au</strong> modèle: votre prompt système, l'historique de la conversation et le message de l'utilisateur. Ils sont moins chers car le modèle les traite en parallèle. Un prompt système typique de 200 mots génère environ 267 tokens d'entrée.</p>",
|
|
145
145
|
},
|
|
146
146
|
{
|
|
147
147
|
type: 'card',
|
|
@@ -21,7 +21,7 @@ const faqData = [
|
|
|
21
21
|
{
|
|
22
22
|
question: 'Mengapa token output lebih mahal daripada token input?',
|
|
23
23
|
answer:
|
|
24
|
-
'Menghasilkan teks (output) mengharuskan model menghitung setiap token secara berurutan, yang secara komputasi lebih intensif daripada membaca input. Sebagian besar penyedia mengenakan biaya 3
|
|
24
|
+
'Menghasilkan teks (output) mengharuskan model menghitung setiap token secara berurutan, yang secara komputasi lebih intensif daripada membaca input. Sebagian besar penyedia mengenakan biaya 3-5 kali lebih mahal untuk token output dibandingkan token input.',
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
question: 'Bagaimana cara mengurangi biaya API LLM saya?',
|
|
@@ -146,7 +146,7 @@ export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
|
146
146
|
{
|
|
147
147
|
type: 'card',
|
|
148
148
|
title: 'Token output',
|
|
149
|
-
html: '<p>Token output dihasilkan satu per satu secara berurutan, sehingga lebih intensif secara komputasi. Sebagian besar penyedia mengenakan biaya <strong>3
|
|
149
|
+
html: '<p>Token output dihasilkan satu per satu secara berurutan, sehingga lebih intensif secara komputasi. Sebagian besar penyedia mengenakan biaya <strong>3-5× lebih mahal</strong> untuk token output. Respons 300 kata menghasilkan sekitar 400 token output. Menjaga respons tetap ringkas adalah salah satu strategi penghematan biaya yang paling efektif.</p>',
|
|
150
150
|
},
|
|
151
151
|
{
|
|
152
152
|
type: 'title',
|
|
@@ -155,7 +155,7 @@ export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
|
155
155
|
},
|
|
156
156
|
{
|
|
157
157
|
type: 'tip',
|
|
158
|
-
html: 'Mulailah dengan model kelas menengah yang mumpuni seperti <code>GPT-4o mini</code> atau <code>Gemini 1.5 Flash</code> dan naik ke model yang lebih besar hanya jika kualitasnya belum memadai. Perbedaan biaya antara model kecil dan besar bisa mencapai 10
|
|
158
|
+
html: 'Mulailah dengan model kelas menengah yang mumpuni seperti <code>GPT-4o mini</code> atau <code>Gemini 1.5 Flash</code> dan naik ke model yang lebih besar hanya jika kualitasnya belum memadai. Perbedaan biaya antara model kecil dan besar bisa mencapai 10-100×.',
|
|
159
159
|
},
|
|
160
160
|
{
|
|
161
161
|
type: 'paragraph',
|
|
@@ -21,7 +21,7 @@ const faqData = [
|
|
|
21
21
|
{
|
|
22
22
|
question: 'Por que os tokens de saída são mais caros que os de entrada?',
|
|
23
23
|
answer:
|
|
24
|
-
'Gerar texto (saída) requer que o modelo compute cada token sequencialmente, o que é computacionalmente mais intensivo do que ler a entrada. A maioria dos provedores cobra 3
|
|
24
|
+
'Gerar texto (saída) requer que o modelo compute cada token sequencialmente, o que é computacionalmente mais intensivo do que ler a entrada. A maioria dos provedores cobra 3-5x mais para tokens de saída do que de entrada.',
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
question: 'Como posso reduzir meus custos de API LLM?',
|
|
@@ -146,7 +146,7 @@ export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
|
146
146
|
{
|
|
147
147
|
type: 'card',
|
|
148
148
|
title: 'Tokens de saída',
|
|
149
|
-
html: '<p>Os tokens de saída são gerados um por um em sequência, tornando-os computacionalmente mais caros. A maioria dos provedores cobra <strong>3
|
|
149
|
+
html: '<p>Os tokens de saída são gerados um por um em sequência, tornando-os computacionalmente mais caros. A maioria dos provedores cobra <strong>3-5× mais</strong> para tokens de saída. Uma resposta de 300 palavras gera aproximadamente 400 tokens de saída. Manter as respostas concisas é uma das estratégias mais eficazes de economia de custos.</p>',
|
|
150
150
|
},
|
|
151
151
|
{
|
|
152
152
|
type: 'title',
|
|
@@ -155,7 +155,7 @@ export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
|
155
155
|
},
|
|
156
156
|
{
|
|
157
157
|
type: 'tip',
|
|
158
|
-
html: 'Comece com um modelo de nível médio capaz como <code>GPT-4o mini</code> ou <code>Gemini 1.5 Flash</code> e atualize apenas se a qualidade for insuficiente. A diferença de custo entre um modelo pequeno e grande pode ser 10
|
|
158
|
+
html: 'Comece com um modelo de nível médio capaz como <code>GPT-4o mini</code> ou <code>Gemini 1.5 Flash</code> e atualize apenas se a qualidade for insuficiente. A diferença de custo entre um modelo pequeno e grande pode ser 10-100×.',
|
|
159
159
|
},
|
|
160
160
|
{
|
|
161
161
|
type: 'paragraph',
|
|
@@ -21,7 +21,7 @@ const faqData = [
|
|
|
21
21
|
{
|
|
22
22
|
question: 'Почему выходные токены дороже входных?',
|
|
23
23
|
answer:
|
|
24
|
-
'Генерирование текста (выход) требует, чтобы модель последовательно вычисляла каждый токен, что вычислительно более интенсивно, чем чтение входа. Большинство провайдеров взимают в 3
|
|
24
|
+
'Генерирование текста (выход) требует, чтобы модель последовательно вычисляла каждый токен, что вычислительно более интенсивно, чем чтение входа. Большинство провайдеров взимают в 3-5 раз больше за выходные токены, чем за входные.',
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
question: 'Как я могу снизить свои расходы на API LLM?',
|
|
@@ -146,7 +146,7 @@ export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
|
146
146
|
{
|
|
147
147
|
type: 'card',
|
|
148
148
|
title: 'Выходные токены',
|
|
149
|
-
html: '<p>Выходные токены генерируются один за другим последовательно, делая их вычислительно более дорогостоящими. Большинство провайдеров взимают <strong>3
|
|
149
|
+
html: '<p>Выходные токены генерируются один за другим последовательно, делая их вычислительно более дорогостоящими. Большинство провайдеров взимают <strong>3-5× больше</strong> за выходные токены. Ответ из 300 слов генерирует примерно 400 выходных токенов. Сохранение ответов краткими - одна из наиболее эффективных стратегий экономии затрат.</p>',
|
|
150
150
|
},
|
|
151
151
|
{
|
|
152
152
|
type: 'title',
|
|
@@ -155,7 +155,7 @@ export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
|
155
155
|
},
|
|
156
156
|
{
|
|
157
157
|
type: 'tip',
|
|
158
|
-
html: 'Начните с способной модели среднего уровня, такой как <code>GPT-4o mini</code> или <code>Gemini 1.5 Flash</code>, и обновляйте, только если качество недостаточно. Разница в стоимости между маленькой и большой моделью может быть 10
|
|
158
|
+
html: 'Начните с способной модели среднего уровня, такой как <code>GPT-4o mini</code> или <code>Gemini 1.5 Flash</code>, и обновляйте, только если качество недостаточно. Разница в стоимости между маленькой и большой моделью может быть 10-100×.',
|
|
159
159
|
},
|
|
160
160
|
{
|
|
161
161
|
type: 'paragraph',
|
|
@@ -21,7 +21,7 @@ const faqData = [
|
|
|
21
21
|
{
|
|
22
22
|
question: 'Varför är utdatatoken dyrare än indatatoken?',
|
|
23
23
|
answer:
|
|
24
|
-
'Att generera text (utdata) kräver att modellen beräknar varje token sekventiellt, vilket är mer beräkningsintensivt än att läsa indata. De flesta leverantörer tar ut 3
|
|
24
|
+
'Att generera text (utdata) kräver att modellen beräknar varje token sekventiellt, vilket är mer beräkningsintensivt än att läsa indata. De flesta leverantörer tar ut 3-5 gånger mer för utdatatoken än indatatoken.',
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
question: 'Hur kan jag minska mina LLM API-kostnader?',
|
|
@@ -146,7 +146,7 @@ export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
|
146
146
|
{
|
|
147
147
|
type: 'card',
|
|
148
148
|
title: 'Utdatatoken',
|
|
149
|
-
html: '<p>Utdatatoken genereras sekventiellt, en i taget, vilket gör dem beräkningsmässigt dyrare. De flesta leverantörer tar ut <strong>3
|
|
149
|
+
html: '<p>Utdatatoken genereras sekventiellt, en i taget, vilket gör dem beräkningsmässigt dyrare. De flesta leverantörer tar ut <strong>3-5× mer</strong> för utdatatoken. Ett svar på 300 ord genererar ungefär 400 utdatatoken. Att hålla svaren korta är en av de mest effektiva kostnadsbesparingsstrategi.</p>',
|
|
150
150
|
},
|
|
151
151
|
{
|
|
152
152
|
type: 'title',
|
|
@@ -155,7 +155,7 @@ export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
|
155
155
|
},
|
|
156
156
|
{
|
|
157
157
|
type: 'tip',
|
|
158
|
-
html: 'Börja med en kapabel mellanniesemodell som <code>GPT-4o mini</code> eller <code>Gemini 1.5 Flash</code> och uppgradera bara om kvaliteten är otillräcklig. Skillnaden i kostnad mellan en liten och stor modell kan vara 10
|
|
158
|
+
html: 'Börja med en kapabel mellanniesemodell som <code>GPT-4o mini</code> eller <code>Gemini 1.5 Flash</code> och uppgradera bara om kvaliteten är otillräcklig. Skillnaden i kostnad mellan en liten och stor modell kan vara 10-100×.',
|
|
159
159
|
},
|
|
160
160
|
{
|
|
161
161
|
type: 'paragraph',
|
|
@@ -21,7 +21,7 @@ const faqData = [
|
|
|
21
21
|
{
|
|
22
22
|
question: 'Çıkış token\'ları neden giriş token\'larından daha pahalıdır?',
|
|
23
23
|
answer:
|
|
24
|
-
'Metin oluşturma (çıkış), modelin her token\'u sırayla hesaplamasını gerektirir ve bu, girişi okumaktan hesaplamalar açısından daha yoğundur. Çoğu sağlayıcı çıkış token\'ları için giriş token\'larından 3
|
|
24
|
+
'Metin oluşturma (çıkış), modelin her token\'u sırayla hesaplamasını gerektirir ve bu, girişi okumaktan hesaplamalar açısından daha yoğundur. Çoğu sağlayıcı çıkış token\'ları için giriş token\'larından 3-5 kat daha fazla ücret alır.',
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
question: 'LLM API maliyetlerimi nasıl azaltabilirim?',
|
|
@@ -146,7 +146,7 @@ export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
|
146
146
|
{
|
|
147
147
|
type: 'card',
|
|
148
148
|
title: 'Çıkış token\'ları',
|
|
149
|
-
html: '<p>Çıkış token\'ları sırayla, teker teker oluşturulur ve bu onları hesaplamalar açısından daha pahalı hale getirir. Çoğu sağlayıcı çıkış token\'ları için <strong>3
|
|
149
|
+
html: '<p>Çıkış token\'ları sırayla, teker teker oluşturulur ve bu onları hesaplamalar açısından daha pahalı hale getirir. Çoğu sağlayıcı çıkış token\'ları için <strong>3-5 kat daha fazla</strong> ücret alır. 300 sözcüklük bir yanıt yaklaşık 400 çıkış token\'ı üretir. Yanıtları kısa tutmak en etkili maliyet tasarrufu stratejilerinden biridir.</p>',
|
|
150
150
|
},
|
|
151
151
|
{
|
|
152
152
|
type: 'title',
|
|
@@ -155,7 +155,7 @@ export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
|
155
155
|
},
|
|
156
156
|
{
|
|
157
157
|
type: 'tip',
|
|
158
|
-
html: '<code>GPT-4o mini</code> veya <code>Gemini 1.5 Flash</code> gibi yetenekli bir orta katman modeliyle başlayın ve yalnızca kalite yetersizse yükseltin. Küçük ve büyük bir model arasındaki maliyet farkı 10
|
|
158
|
+
html: '<code>GPT-4o mini</code> veya <code>Gemini 1.5 Flash</code> gibi yetenekli bir orta katman modeliyle başlayın ve yalnızca kalite yetersizse yükseltin. Küçük ve büyük bir model arasındaki maliyet farkı 10-100× olabilir.',
|
|
159
159
|
},
|
|
160
160
|
{
|
|
161
161
|
type: 'paragraph',
|
|
@@ -21,7 +21,7 @@ const faqData = [
|
|
|
21
21
|
{
|
|
22
22
|
question: '为什么输出代币比输入代币更昂贵?',
|
|
23
23
|
answer:
|
|
24
|
-
'生成文本(输出)需要模型依次计算每个代币,这在计算上比读取输入更密集。大多数提供商对输出代币的收费是输入代币的 3
|
|
24
|
+
'生成文本(输出)需要模型依次计算每个代币,这在计算上比读取输入更密集。大多数提供商对输出代币的收费是输入代币的 3-5 倍。',
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
question: '如何降低我的 LLM API 成本?',
|
|
@@ -146,7 +146,7 @@ export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
|
146
146
|
{
|
|
147
147
|
type: 'card',
|
|
148
148
|
title: '输出代币',
|
|
149
|
-
html: '<p>输出代币按顺序逐个生成,使其在计算上更昂贵。大多数提供商对输出代币的收费<strong>多出 3
|
|
149
|
+
html: '<p>输出代币按顺序逐个生成,使其在计算上更昂贵。大多数提供商对输出代币的收费<strong>多出 3-5 倍</strong>。一个 300 字的响应会生成大约 400 个输出代币。保持响应简洁是最有效的成本节省策略之一。</p>',
|
|
150
150
|
},
|
|
151
151
|
{
|
|
152
152
|
type: 'title',
|
|
@@ -155,7 +155,7 @@ export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
|
155
155
|
},
|
|
156
156
|
{
|
|
157
157
|
type: 'tip',
|
|
158
|
-
html: '从有能力的中等层级模型开始,例如 <code>GPT-4o mini</code> 或 <code>Gemini 1.5 Flash</code>,仅在质量不足时升级。小型和大型模型之间的成本差异可能是 10
|
|
158
|
+
html: '从有能力的中等层级模型开始,例如 <code>GPT-4o mini</code> 或 <code>Gemini 1.5 Flash</code>,仅在质量不足时升级。小型和大型模型之间的成本差异可能是 10-100×。',
|
|
159
159
|
},
|
|
160
160
|
{
|
|
161
161
|
type: 'paragraph',
|
|
@@ -9,6 +9,7 @@ interface Props {
|
|
|
9
9
|
|
|
10
10
|
const { locale = 'es' } = Astro.props;
|
|
11
11
|
const content = await llmCostCalculator.i18n[locale]?.();
|
|
12
|
+
if (!content) return null;
|
|
12
13
|
---
|
|
13
14
|
|
|
14
|
-
{content && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
15
|
+
{content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
@@ -91,7 +91,7 @@ const ui: MobileMockupGeneratorUI = {
|
|
|
91
91
|
presetImageRight: 'Imagen Der.',
|
|
92
92
|
confirmClear: '¿Estás seguro de eliminar todos los mockups?',
|
|
93
93
|
processingExport: 'Procesando...',
|
|
94
|
-
exportDone: 'Listo!',
|
|
94
|
+
exportDone: '¡Listo!',
|
|
95
95
|
};
|
|
96
96
|
|
|
97
97
|
export const content: ToolLocaleContent<MobileMockupGeneratorUI> = {
|
|
@@ -9,6 +9,7 @@ interface Props {
|
|
|
9
9
|
|
|
10
10
|
const { locale = 'es' } = Astro.props;
|
|
11
11
|
const content = await mobileMockupGenerator.i18n[locale]?.();
|
|
12
|
+
if (!content) return null;
|
|
12
13
|
---
|
|
13
14
|
|
|
14
|
-
{content && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
15
|
+
{content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
@@ -160,7 +160,7 @@ export const content: ToolLocaleContent<MusicalTypographyUI> = {
|
|
|
160
160
|
{
|
|
161
161
|
type: 'card',
|
|
162
162
|
title: 'Warum "Musikalisch"',
|
|
163
|
-
html: '<p>Die Pythagoreer entdeckten, dass das Teilen einer Saite in einfache Proportionen (1:2, 2:3, 3:4) Konsonanz erzeugt. Diese Intervalle
|
|
163
|
+
html: '<p>Die Pythagoreer entdeckten, dass das Teilen einer Saite in einfache Proportionen (1:2, 2:3, 3:4) Konsonanz erzeugt. Diese Intervalle - Oktave, reine Quinte und reine Quarte - sind genau die typografischen Ratios. Du komponierst visuelle Musik.</p>',
|
|
164
164
|
},
|
|
165
165
|
{
|
|
166
166
|
type: 'title',
|