@jjlmoya/utils-language 1.9.0 → 1.10.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/index.ts +2 -1
- package/src/entries.ts +2 -1
- package/src/tests/locale_completeness.test.ts +1 -1
- package/src/tests/tool_validation.test.ts +1 -1
- package/src/tool/language-shadowing-session-planner/bibliography.astro +6 -0
- package/src/tool/language-shadowing-session-planner/bibliography.ts +6 -0
- package/src/tool/language-shadowing-session-planner/component.astro +142 -0
- package/src/tool/language-shadowing-session-planner/controller.ts +152 -0
- package/src/tool/language-shadowing-session-planner/dom-views.ts +82 -0
- package/src/tool/language-shadowing-session-planner/entry.ts +34 -0
- package/src/tool/language-shadowing-session-planner/evaluator.ts +17 -0
- package/src/tool/language-shadowing-session-planner/i18n/de.ts +54 -0
- package/src/tool/language-shadowing-session-planner/i18n/en.ts +128 -0
- package/src/tool/language-shadowing-session-planner/i18n/es.ts +45 -0
- package/src/tool/language-shadowing-session-planner/i18n/fr.ts +45 -0
- package/src/tool/language-shadowing-session-planner/i18n/id.ts +40 -0
- package/src/tool/language-shadowing-session-planner/i18n/it.ts +40 -0
- package/src/tool/language-shadowing-session-planner/i18n/ja.ts +40 -0
- package/src/tool/language-shadowing-session-planner/i18n/ko.ts +40 -0
- package/src/tool/language-shadowing-session-planner/i18n/nl.ts +40 -0
- package/src/tool/language-shadowing-session-planner/i18n/pl.ts +40 -0
- package/src/tool/language-shadowing-session-planner/i18n/pt.ts +40 -0
- package/src/tool/language-shadowing-session-planner/i18n/ru.ts +40 -0
- package/src/tool/language-shadowing-session-planner/i18n/sv.ts +40 -0
- package/src/tool/language-shadowing-session-planner/i18n/tr.ts +40 -0
- package/src/tool/language-shadowing-session-planner/i18n/zh.ts +40 -0
- package/src/tool/language-shadowing-session-planner/index.ts +14 -0
- package/src/tool/language-shadowing-session-planner/language-shadowing-session-planner.css +561 -0
- package/src/tool/language-shadowing-session-planner/logic.test.ts +53 -0
- package/src/tool/language-shadowing-session-planner/logic.ts +94 -0
- package/src/tool/language-shadowing-session-planner/seo.astro +9 -0
- package/src/tool/language-shadowing-session-planner/storage.ts +18 -0
- package/src/tool/language-shadowing-session-planner/timer-view.ts +55 -0
- package/src/tool/language-shadowing-session-planner/timer.test.ts +50 -0
- package/src/tool/language-shadowing-session-planner/timer.ts +158 -0
- package/src/tool/language-shadowing-session-planner/types.ts +32 -0
- package/src/tool/language-shadowing-session-planner/ui.ts +55 -0
- package/src/tools.ts +2 -1
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { ShadowingSessionUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const ui: ShadowingSessionUI = {
|
|
6
|
+
quickStarts: 'Inícios rápidos', quickShort: 'Ciclo de 5 min', quickFocused: 'Foco de 12 min', quickLong: 'Profundo de 25 min', totalMinutes: 'Orçamento da sessão', clipSeconds: 'Duração do clipe', repetitions: 'Passadas de shadowing', pauseSeconds: 'Pausa entre passadas', minutesUnit: 'min', secondsUnit: 's', passesUnit: 'passadas', resetLabel: 'Repor valores padrão', scheduledShadowing: 'Shadowing programado', passesLabel: 'passadas previstas', minutesScheduled: 'tempo de prática', activeSpeaking: 'Tempo a falar', pauseTime: 'Tempo de pausa', flexibleBuffer: 'Margem flexível', timelineLabel: 'Linha temporal da sessão', shadowBlock: 'Passada de shadowing', pauseBlock: 'Pausa', bufferBlock: 'Repetição ou notas', statusFits: 'Encaixe exato', statusShort: 'Orçamento insuficiente', statusBuffer: 'Margem disponível', shortDetail: 'Apenas {planned} das {requested} passadas pedidas cabem como clipes completos. Encurte o clipe, reduza as repetições ou acrescente tempo.', bufferDetail: 'Todas as passadas pedidas cabem. Sobram {remaining} para repetir, verificar uma gravação ou fazer anotações.', fitsDetail: 'Todas as passadas e pausas pedidas cabem no orçamento da sessão.', budgetNote: 'Orçamento: {budget}', useBuffer: 'Use o último bloco para repetir com menos apoio, fazer uma gravação rápida ou anotar o som que quer imitar.', cueTitle: 'Pistas de ensaio', cuePlay: 'Reproduza o clipe inteiro antes de mudar o objetivo.', cueSpeak: 'Siga primeiro o ritmo e depois aperfeiçoe um som.', cueNotice: 'Deixe uma nota que mude a próxima passada.', timerTitle: 'Executar este ensaio', startTimer: 'Iniciar contagem decrescente', pauseTimer: 'Pausar contagem', resumeTimer: 'Retomar contagem', resetTimer: 'Repor temporizador', timerSoundOn: 'Som ligado', timerSoundOff: 'Som desligado', timerIdle: 'Pronto', timerRunning: 'Em curso', timerPaused: 'Em pausa', timerComplete: 'Concluído', timerCompleteDetail: 'Sessão concluída. Reponha o temporizador para a executar novamente.', timerStartHint: 'Prima iniciar quando o clipe estiver pronto.', timerNoSchedule: 'Acrescente tempo suficiente para uma passada completa para iniciar o temporizador.', legendShadow: 'Passada de shadowing', legendPause: 'Pausa', legendBuffer: 'Tempo flexível', inputHelp: 'Uma passada é uma reprodução completa enquanto fala ao mesmo tempo. As pausas acontecem apenas entre passadas completas.', numberLocale: 'pt-PT',
|
|
7
|
+
};
|
|
8
|
+
const faq = [
|
|
9
|
+
{ question: 'O que calcula este planeador de shadowing?', answer: 'Transforma o orçamento da sessão, a duração do clipe, o número de passadas e a duração das pausas numa linha temporal. Conta apenas passadas completas, mostrando quantas cabem e quanto tempo flexível resta.' },
|
|
10
|
+
{ question: 'O que é uma passada de shadowing?', answer: 'É uma reprodução completa do clipe enquanto repete a fala com a maior precisão e rapidez possíveis. O planeador usa a duração do clipe que introduzir.' },
|
|
11
|
+
{ question: 'Porque é que o planeador para antes de uma passada parcial?', answer: 'Uma passada parcial não é útil num plano porque altera o clipe que queria repetir. O aviso ajuda a alterar o orçamento, a duração, as repetições ou as pausas antes de começar.' },
|
|
12
|
+
{ question: 'Como devo usar a margem flexível?', answer: 'Use-a para uma repetição intencional, uma gravação curta para comparar ou notas sobre ritmo, ligações, acento ou um som a rever. Mais repetições não produzem automaticamente uma pronúncia melhor.' },
|
|
13
|
+
{ question: 'Isto mede a pronúncia ou garante progresso?', answer: 'Não. Organiza apenas o tempo. Não ouve a sua voz, não avalia a precisão, não estima o nível nem garante melhorias. Escolha um clipe que compreenda suficientemente bem e procure feedback quando a precisão for importante.' },
|
|
14
|
+
];
|
|
15
|
+
const howTo = [
|
|
16
|
+
{ name: 'Definir o orçamento', text: 'Introduza os minutos totais que pode reservar para esta sessão de prática.' },
|
|
17
|
+
{ name: 'Introduzir a duração do clipe', text: 'Use a duração de um clipe de áudio ou vídeo completo.' },
|
|
18
|
+
{ name: 'Escolher passadas e pausas', text: 'Defina o número de passadas completas e a pausa necessária entre elas.' },
|
|
19
|
+
{ name: 'Seguir a linha temporal', text: 'Complete as passadas numeradas, faça as pausas marcadas e use o bloco flexível final para repetir, comparar ou tomar notas.' },
|
|
20
|
+
];
|
|
21
|
+
const appSchema: SoftwareApplication = { '@type': 'SoftwareApplication', name: 'Planeador de sessões de shadowing de línguas', applicationCategory: 'EducationalApplication', operatingSystem: 'Any', isAccessibleForFree: true, url: 'https://gamebob.dev/pt/planeador-sessao-shadowing-linguas' };
|
|
22
|
+
const howToSchema: HowTo = { '@type': 'HowTo', name: 'Planear uma sessão de shadowing de línguas', step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) };
|
|
23
|
+
const faqSchema: FAQPage = { '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) };
|
|
24
|
+
|
|
25
|
+
export const content: ToolLocaleContent<ShadowingSessionUI> = {
|
|
26
|
+
slug: 'planeador-sessao-shadowing-linguas', title: 'Planeador de sessões de shadowing de línguas', description: 'Crie uma sessão de prática de shadowing com tempo definido a partir da duração do clipe, repetições, pausas e tempo disponível.', ui,
|
|
27
|
+
seo: [
|
|
28
|
+
{ type: 'title', text: 'Transforme um clipe de shadowing numa sessão que consegue terminar', level: 2 },
|
|
29
|
+
{ type: 'paragraph', html: 'É fácil abandonar o shadowing quando o bloco de prática não tem uma forma definida. Este planeador transforma um clipe numa prática finita: as passadas completas ficam numeradas, as pausas são visíveis e o orçamento restante torna-se um período intencional para repetir ou tomar notas. Pode ajustar o plano antes de iniciar, em vez de descobrir a meio que a sessão não cabe no tempo.' },
|
|
30
|
+
{ type: 'title', text: 'Como funciona o cálculo do tempo', level: 2 },
|
|
31
|
+
{ type: 'paragraph', html: 'O cálculo trata cada passada como uma reprodução completa do clipe. Adiciona a pausa apenas entre passadas, nunca depois da última. Por exemplo, um clipe de 30 segundos repetido quatro vezes com pausas de 10 segundos demora 2 minutos e 10 segundos: 120 segundos a falar mais 30 segundos de pausas. Se o orçamento for inferior à próxima passada completa, ela não é colocada na linha temporal.' },
|
|
32
|
+
{ type: 'title', text: 'Ler a linha do ensaio', level: 2 },
|
|
33
|
+
{ type: 'table', headers: ['Marca', 'Significado', 'Ação útil'], rows: [['Blocos corais numerados', 'Passadas completas que cabem no orçamento.', 'Fale com o clipe e use o número como ponto de paragem.'], ['Blocos azuis', 'A pausa entre duas passadas completas.', 'Respire, volte a concentrar-se e escolha o som que vai ouvir a seguir.'], ['Bloco dourado', 'Tempo restante depois de todas as passadas pedidas.', 'Faça uma repetição, compare uma gravação ou escreva uma nota breve em vez de acrescentar volume automaticamente.']] },
|
|
34
|
+
{ type: 'title', text: 'Tornar cada passada mais útil', level: 2 },
|
|
35
|
+
{ type: 'paragraph', html: 'Escolha um clipe suficientemente curto para repetir sem perder a voz do falante. Nas primeiras passadas, dê prioridade ao ritmo; mais tarde, procure o acento, as reduções, as ligações ou uma consoante que consiga descrever. Se o clipe continuar difícil, reduza a velocidade ou escolha um excerto mais curto antes de acrescentar repetições.' },
|
|
36
|
+
{ type: 'list', items: ['Escolha áudio que possa repetir sem procurar o segmento seguinte.', 'Introduza a duração real do clipe, incluindo o final completo.', 'Use as pausas para nomear uma característica sonora em vez de ler explicações.', 'Use a margem final para uma comparação ou nota que altere a sessão seguinte.', 'Peça feedback a um professor ou parceiro quando a precisão for importante.'] },
|
|
37
|
+
{ type: 'tip', title: 'O que o planeador não consegue dizer', html: 'A linha temporal é aritmética, não uma avaliação da pronúncia. Não ouve a sua voz, não avalia a imitação nem estabelece um nível. A investigação sobre shadowing estuda alunos, tarefas e condições específicas. Use este horário como um espaço prático para praticar, não como prova de progresso garantido.' },
|
|
38
|
+
], faq, bibliography: [{ name: '日本語聴解学習におけるシャドーイングの効果', url: 'https://www.jstage.jst.go.jp/article/jlem/29/1/29_26/_article/-char/ja' }, { name: 'British Council: Teaching English pronunciation online: Practical tips and benefits of shadowing', url: 'https://americas.britishcouncil.org/new-ways-of-teaching/events/teaching-english-pronunciation-online' }], howTo,
|
|
39
|
+
schemas: [{ '@context': 'https://schema.org', ...appSchema } as unknown as Record<string, unknown>, { '@context': 'https://schema.org', ...howToSchema } as unknown as Record<string, unknown>, { '@context': 'https://schema.org', ...faqSchema } as unknown as Record<string, unknown>],
|
|
40
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { ShadowingSessionUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const ui: ShadowingSessionUI = {
|
|
6
|
+
quickStarts: 'Быстрый старт', quickShort: 'Цикл 5 мин', quickFocused: 'Фокус 12 мин', quickLong: 'Глубокая сессия 25 мин', totalMinutes: 'Время сессии', clipSeconds: 'Длина клипа', repetitions: 'Повторы шэдоуинга', pauseSeconds: 'Пауза между повторами', minutesUnit: 'мин', secondsUnit: 'сек', passesUnit: 'повторов', resetLabel: 'Сбросить значения', scheduledShadowing: 'План шэдоуинга', passesLabel: 'запланированных повторов', minutesScheduled: 'время практики', activeSpeaking: 'Время речи', pauseTime: 'Время пауз', flexibleBuffer: 'Гибкий запас', timelineLabel: 'Шкала сессии', shadowBlock: 'Повтор шэдоуинга', pauseBlock: 'Пауза', bufferBlock: 'Повтор или заметки', statusFits: 'Точное совпадение', statusShort: 'Времени мало', statusBuffer: 'Есть запас', shortDetail: 'Полностью помещаются только {planned} из {requested} запрошенных повторов. Уменьшите клип, число повторов или добавьте время.', bufferDetail: 'Все запрошенные повторы помещаются. Оставшиеся {remaining} можно потратить на повтор, проверку записи или заметки.', fitsDetail: 'Все запрошенные повторы и паузы помещаются в отведённое время.', budgetNote: 'Время: {budget}', useBuffer: 'Используйте последний блок для повтора с меньшей поддержкой, короткой самостоятельной записи или заметки о звуке, который хотите повторить.', cueTitle: 'Подсказки для тренировки', cuePlay: 'Прослушайте клип целиком, прежде чем менять цель.', cueSpeak: 'Сначала держите ритм, затем улучшайте один звук.', cueNotice: 'Оставьте заметку, которая изменит следующий повтор.', timerTitle: 'Запустить тренировку', startTimer: 'Начать обратный отсчёт', pauseTimer: 'Поставить на паузу', resumeTimer: 'Продолжить отсчёт', resetTimer: 'Сбросить таймер', timerSoundOn: 'Звук включён', timerSoundOff: 'Звук выключен', timerIdle: 'Готово', timerRunning: 'Идёт', timerPaused: 'На паузе', timerComplete: 'Завершено', timerCompleteDetail: 'Сессия завершена. Сбросьте таймер, чтобы запустить её снова.', timerStartHint: 'Нажмите старт, когда клип будет готов.', timerNoSchedule: 'Добавьте время хотя бы для одного полного повтора, чтобы запустить таймер.', legendShadow: 'Повтор шэдоуинга', legendPause: 'Пауза', legendBuffer: 'Гибкое время', inputHelp: 'Повтор означает полное воспроизведение клипа, во время которого вы говорите одновременно с записью. Паузы возникают только между полными повторами.', numberLocale: 'ru-RU',
|
|
7
|
+
};
|
|
8
|
+
const faq = [
|
|
9
|
+
{ question: 'Что рассчитывает этот планировщик шэдоуинга?', answer: 'Он превращает время сессии, длину клипа, число повторов и длительность пауз в шкалу. Учитываются только полные повторы, поэтому вы видите точное число подходящих повторов и оставшееся гибкое время.' },
|
|
10
|
+
{ question: 'Что такое один повтор шэдоуинга?', answer: 'Это полное воспроизведение клипа, во время которого вы как можно точнее и быстрее повторяете речь. Планировщик использует указанную вами длину клипа.' },
|
|
11
|
+
{ question: 'Почему планировщик не добавляет неполный повтор?', answer: 'Неполный повтор не даёт полноценно потренировать выбранный клип. Предупреждение помогает изменить время, длину клипа, число повторов или паузы до начала сессии.' },
|
|
12
|
+
{ question: 'Как использовать гибкий запас?', answer: 'Потратьте его на осознанный повтор, короткую запись для сравнения или заметки о ритме, связках, ударении и звуке для дальнейшей проверки. Большее число повторов не гарантирует лучшего произношения.' },
|
|
13
|
+
{ question: 'Измеряет ли инструмент произношение и гарантирует ли прогресс?', answer: 'Нет. Он только планирует время. Инструмент не слушает голос, не оценивает точность, не определяет уровень и не обещает улучшение. Когда точность важна, используйте обратную связь.' },
|
|
14
|
+
];
|
|
15
|
+
const howTo = [
|
|
16
|
+
{ name: 'Задайте время сессии', text: 'Введите общее число минут, которое вы можете выделить на тренировку.' },
|
|
17
|
+
{ name: 'Введите длину клипа', text: 'Укажите длительность полного аудио- или видеоклипа.' },
|
|
18
|
+
{ name: 'Выберите повторы и паузы', text: 'Задайте число полных повторов и нужную паузу между ними.' },
|
|
19
|
+
{ name: 'Следуйте шкале', text: 'Выполняйте повторы по номерам, соблюдайте отмеченные паузы и используйте последний гибкий блок для повтора, сравнения или заметок.' },
|
|
20
|
+
];
|
|
21
|
+
const appSchema: SoftwareApplication = { '@type': 'SoftwareApplication', name: 'Планировщик языковых сессий шэдоуинга', applicationCategory: 'EducationalApplication', operatingSystem: 'Any', isAccessibleForFree: true, url: 'https://gamebob.dev/ru/planirovshchik-sessii-shadowing-yazykov' };
|
|
22
|
+
const howToSchema: HowTo = { '@type': 'HowTo', name: 'Спланировать языковую сессию шэдоуинга', step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) };
|
|
23
|
+
const faqSchema: FAQPage = { '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) };
|
|
24
|
+
|
|
25
|
+
export const content: ToolLocaleContent<ShadowingSessionUI> = {
|
|
26
|
+
slug: 'planirovshchik-sessii-shadowing-yazykov', title: 'Планировщик языковых сессий шэдоуинга', description: 'Составьте тренировочную сессию шэдоуинга по длине клипа, числу повторов, паузам и доступному времени.', ui,
|
|
27
|
+
seo: [
|
|
28
|
+
{ type: 'title', text: 'Превратите клип для шэдоуинга в завершённую тренировку', level: 2 },
|
|
29
|
+
{ type: 'paragraph', html: 'Шэдоуинг легко бросить, если у тренировочного блока нет понятной формы. Планировщик превращает один клип в ограниченную по времени репетицию: полные повторы получают номера, паузы становятся видимыми, а оставшееся время превращается в отдельное место для повтора или заметок. Вы меняете план до старта, а не обнаруживаете посреди занятия, что времени не хватает.' },
|
|
30
|
+
{ type: 'title', text: 'Как считается время', level: 2 },
|
|
31
|
+
{ type: 'paragraph', html: 'Каждый повтор считается полной длиной клипа. Пауза добавляется только между повторами, но не после последнего. Например, клип длиной 30 секунд, повторённый четыре раза с паузами по 10 секунд, занимает 2 минуты 10 секунд: 120 секунд речи и 30 секунд пауз. Если времени меньше, чем нужно для следующего полного повтора, он не попадает на шкалу.' },
|
|
32
|
+
{ type: 'title', text: 'Как читать линию тренировки', level: 2 },
|
|
33
|
+
{ type: 'table', headers: ['Обозначение', 'Значение', 'Полезное действие'], rows: [['Нумерованные коралловые блоки', 'Полные повторы, которые помещаются во время.', 'Говорите вместе с клипом и используйте номер как точку остановки.'], ['Синие блоки', 'Пауза между двумя полными повторами.', 'Вдохните, верните внимание и выберите следующий звук для прослушивания.'], ['Золотой блок', 'Время, оставшееся после всех запрошенных повторов.', 'Сделайте повтор, сравните запись или напишите короткую заметку.']] },
|
|
34
|
+
{ type: 'title', text: 'Сделайте каждый повтор полезнее', level: 2 },
|
|
35
|
+
{ type: 'paragraph', html: 'Выбирайте достаточно короткий клип, чтобы повторять его и не терять голос говорящего. В первых повторах сосредоточьтесь на ритме, а позже слушайте ударение, редукции, связки или один согласный звук, который можете описать. Если клип всё ещё слишком сложен, замедлите его или выберите более короткий фрагмент до добавления повторов.' },
|
|
36
|
+
{ type: 'list', items: ['Выберите аудио, которое можно включить снова без поиска следующего сегмента.', 'Укажите настоящую длину клипа, включая полное окончание.', 'Используйте паузы, чтобы назвать один признак звука, а не читать новые объяснения.', 'Оставьте запас для сравнения или заметки, которая изменит следующую сессию.', 'Обратитесь к преподавателю или партнёру за отзывом, когда точность важна.'] },
|
|
37
|
+
{ type: 'tip', title: 'Чего планировщик не может сказать', html: 'Шкала показывает арифметику, а не оценивает произношение. Она не слышит ваш голос, не проверяет точность имитации и не определяет уровень. Исследования шэдоуинга рассматривают конкретных учащихся, задания и условия, поэтому используйте этот план как практическую рамку, а не как гарантию прогресса.' },
|
|
38
|
+
], faq, bibliography: [{ name: '日本語聴解学習におけるシャドーイングの効果', url: 'https://www.jstage.jst.go.jp/article/jlem/29/1/29_26/_article/-char/ja' }, { name: 'British Council: Teaching English pronunciation online: Practical tips and benefits of shadowing', url: 'https://americas.britishcouncil.org/new-ways-of-teaching/events/teaching-english-pronunciation-online' }], howTo,
|
|
39
|
+
schemas: [{ '@context': 'https://schema.org', ...appSchema } as unknown as Record<string, unknown>, { '@context': 'https://schema.org', ...howToSchema } as unknown as Record<string, unknown>, { '@context': 'https://schema.org', ...faqSchema } as unknown as Record<string, unknown>],
|
|
40
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { ShadowingSessionUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const ui: ShadowingSessionUI = {
|
|
6
|
+
quickStarts: 'Snabbstart', quickShort: '5 min loop', quickFocused: '12 min fokus', quickLong: '25 min djup', totalMinutes: 'Sessionsbudget', clipSeconds: 'Klippets längd', repetitions: 'Shadowingvarv', pauseSeconds: 'Paus mellan varv', minutesUnit: 'min', secondsUnit: 'sek', passesUnit: 'varv', resetLabel: 'Återställ standardvärden', scheduledShadowing: 'Planerad shadowing', passesLabel: 'planerade varv', minutesScheduled: 'övningstid', activeSpeaking: 'Taltid', pauseTime: 'Paus', flexibleBuffer: 'Flexibel marginal', timelineLabel: 'Sessionens tidslinje', shadowBlock: 'Shadowingvarv', pauseBlock: 'Paus', bufferBlock: 'Repetition eller anteckningar', statusFits: 'Passar exakt', statusShort: 'För lite tid', statusBuffer: 'Tid över', shortDetail: 'Bara {planned} av {requested} önskade varv får plats som hela klipp. Korta klippet, minska antalet repetitioner eller lägg till tid.', bufferDetail: 'Alla önskade varv får plats. Du har {remaining} kvar för en repetition, en inspelningskontroll eller anteckningar.', fitsDetail: 'Alla önskade varv och pauser ryms inom sessionsbudgeten.', budgetNote: 'Budget: {budget}', useBuffer: 'Använd det sista blocket för en repetition med mindre stöd, en snabb egen inspelning eller en anteckning om ljudet du vill härma.', cueTitle: 'Övningspunkter', cuePlay: 'Spela hela klippet innan du byter mål.', cueSpeak: 'Följ rytmen först och finslipa sedan ett ljud.', cueNotice: 'Skriv en anteckning som ändrar nästa varv.', timerTitle: 'Kör övningen', startTimer: 'Starta nedräkning', pauseTimer: 'Pausa nedräkning', resumeTimer: 'Fortsätt nedräkning', resetTimer: 'Återställ timer', timerSoundOn: 'Ljud på', timerSoundOff: 'Ljud av', timerIdle: 'Klar', timerRunning: 'Pågår', timerPaused: 'Pausad', timerComplete: 'Klar', timerCompleteDetail: 'Sessionen är klar. Återställ timern för att köra den igen.', timerStartHint: 'Tryck på start när klippet är redo.', timerNoSchedule: 'Lägg till tillräckligt med tid för ett helt varv för att starta timern.', legendShadow: 'Shadowingvarv', legendPause: 'Paus', legendBuffer: 'Flexibel tid', inputHelp: 'Ett varv är en full uppspelning medan du pratar med. Pauser sker bara mellan hela varv.', numberLocale: 'sv-SE',
|
|
7
|
+
};
|
|
8
|
+
const faq = [
|
|
9
|
+
{ question: 'Vad räknar den här shadowingplaneraren ut?', answer: 'Den gör om sessionsbudget, klippets längd, antal varv och pauser till en tidslinje. Bara hela varv räknas, så du ser exakt hur många som får plats och hur mycket flexibel tid som återstår.' },
|
|
10
|
+
{ question: 'Vad är ett shadowingvarv?', answer: 'Det är en hel uppspelning av klippet där du upprepar talet så exakt och direkt som möjligt. Planeraren använder klippets längd som du anger.' },
|
|
11
|
+
{ question: 'Varför stannar planeraren före ett delvis varv?', answer: 'Ett delvis varv är inte användbart i en övningsplan eftersom det ändrar klippet du tänkte upprepa. Varningen hjälper dig att ändra budget, klipplängd, repetitioner eller pauser före start.' },
|
|
12
|
+
{ question: 'Hur använder jag den flexibla marginalen?', answer: 'Använd den för en medveten repetition, en kort inspelning att jämföra eller anteckningar om rytm, bindningar, betoning eller ett ljud att återvända till. Fler repetitioner ger inte automatiskt bättre uttal.' },
|
|
13
|
+
{ question: 'Mäter detta mitt uttal eller garanterar framsteg?', answer: 'Nej. Verktyget planerar bara tid. Det lyssnar inte på din röst, bedömer inte precision, uppskattar inte nivå och garanterar ingen förbättring. Använd återkoppling när precision är viktig.' },
|
|
14
|
+
];
|
|
15
|
+
const howTo = [
|
|
16
|
+
{ name: 'Ställ in sessionsbudgeten', text: 'Ange det totala antalet minuter du kan avsätta för övningen.' },
|
|
17
|
+
{ name: 'Ange klippets längd', text: 'Använd längden på ett helt ljud- eller videoklipp.' },
|
|
18
|
+
{ name: 'Välj varv och pauser', text: 'Ställ in antalet hela shadowingvarv och pausen du behöver mellan dem.' },
|
|
19
|
+
{ name: 'Följ tidslinjen', text: 'Gör de numrerade varven, ta de markerade pauserna och använd det sista flexibla blocket för repetition, jämförelse eller anteckningar.' },
|
|
20
|
+
];
|
|
21
|
+
const appSchema: SoftwareApplication = { '@type': 'SoftwareApplication', name: 'Planerare för språkshadowing', applicationCategory: 'EducationalApplication', operatingSystem: 'Any', isAccessibleForFree: true, url: 'https://gamebob.dev/sv/planerare-sprak-shadowing-session' };
|
|
22
|
+
const howToSchema: HowTo = { '@type': 'HowTo', name: 'Planera en språkshadowingsession', step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) };
|
|
23
|
+
const faqSchema: FAQPage = { '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) };
|
|
24
|
+
|
|
25
|
+
export const content: ToolLocaleContent<ShadowingSessionUI> = {
|
|
26
|
+
slug: 'planerare-sprak-shadowing-session', title: 'Planerare för språkshadowing', description: 'Bygg en tidsatt shadowingövning utifrån klippets längd, repetitioner, pauser och tillgänglig tid.', ui,
|
|
27
|
+
seo: [
|
|
28
|
+
{ type: 'title', text: 'Gör om ett shadowingklipp till en session du kan slutföra', level: 2 },
|
|
29
|
+
{ type: 'paragraph', html: 'Shadowing är lätt att överge när övningsblocket saknar form. Den här planeraren gör ett klipp till en avgränsad repetition: hela varv får nummer, pauser syns och den återstående budgeten blir ett medvetet utrymme för repetition eller anteckningar. Du kan justera planen innan du startar i stället för att upptäcka halvvägs att sessionen inte ryms.' },
|
|
30
|
+
{ type: 'title', text: 'Så fungerar tidsberäkningen', level: 2 },
|
|
31
|
+
{ type: 'paragraph', html: 'Beräkningen behandlar varje shadowingvarv som klippets hela längd. Pausen läggs bara mellan varven, aldrig efter det sista. Ett klipp på 30 sekunder som upprepas fyra gånger med pauser på 10 sekunder tar till exempel 2 minuter och 10 sekunder: 120 sekunder tal plus 30 sekunder pauser. Om budgeten är kortare än nästa hela varv placeras det inte på tidslinjen.' },
|
|
32
|
+
{ type: 'title', text: 'Läs övningslinjen', level: 2 },
|
|
33
|
+
{ type: 'table', headers: ['Markering', 'Betydelse', 'Användbar åtgärd'], rows: [['Numrerade korallfärgade block', 'Hela shadowingvarv som ryms i budgeten.', 'Prata med klippet och använd numret som slutpunkt.'], ['Blå block', 'Pausen mellan två hela varv.', 'Andas, samla uppmärksamheten och välj nästa ljud att lyssna efter.'], ['Guldblock', 'Tid som blir över efter de önskade varven.', 'Gör en repetition, jämför en inspelning eller skriv en kort anteckning.']] },
|
|
34
|
+
{ type: 'title', text: 'Gör varje varv mer användbart', level: 2 },
|
|
35
|
+
{ type: 'paragraph', html: 'Välj ett klipp som är kort nog att upprepa utan att tappa talaren. Fokusera först på rytmen och lyssna senare efter betoning, reduktioner, bindningar eller en konsonant du kan beskriva. Om klippet fortfarande är för svårt, sänk hastigheten eller välj ett kortare utdrag innan du lägger till fler repetitioner.' },
|
|
36
|
+
{ type: 'list', items: ['Välj ljud du kan spela igen utan att leta efter nästa segment.', 'Ange klippets verkliga längd, inklusive hela slutet.', 'Använd pauserna till att namnge en ljudeffekt i stället för att läsa fler förklaringar.', 'Använd den sista marginalen till en jämförelse eller anteckning som ändrar nästa session.', 'Be en lärare eller övningspartner om återkoppling när precision är viktig.'] },
|
|
37
|
+
{ type: 'tip', title: 'Vad planeraren inte kan säga', html: 'Tidslinjen är matematik, inte en uttalsbedömning. Den hör inte din röst, bedömer inte din imitation och fastställer inte en nivå. Forskning om shadowing gäller särskilda elever, uppgifter och villkor, så använd planen som en praktisk ram för övning och inte som bevis på garanterade framsteg.' },
|
|
38
|
+
], faq, bibliography: [{ name: '日本語聴解学習におけるシャドーイングの効果', url: 'https://www.jstage.jst.go.jp/article/jlem/29/1/29_26/_article/-char/ja' }, { name: 'British Council: Teaching English pronunciation online: Practical tips and benefits of shadowing', url: 'https://americas.britishcouncil.org/new-ways-of-teaching/events/teaching-english-pronunciation-online' }], howTo,
|
|
39
|
+
schemas: [{ '@context': 'https://schema.org', ...appSchema } as unknown as Record<string, unknown>, { '@context': 'https://schema.org', ...howToSchema } as unknown as Record<string, unknown>, { '@context': 'https://schema.org', ...faqSchema } as unknown as Record<string, unknown>],
|
|
40
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { ShadowingSessionUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const ui: ShadowingSessionUI = {
|
|
6
|
+
quickStarts: 'Hızlı başlangıç', quickShort: '5 dk döngü', quickFocused: '12 dk odak', quickLong: '25 dk derin çalışma', totalMinutes: 'Oturum bütçesi', clipSeconds: 'Klip uzunluğu', repetitions: 'Shadowing tekrarları', pauseSeconds: 'Tekrarlar arası mola', minutesUnit: 'dk', secondsUnit: 'sn', passesUnit: 'tekrar', resetLabel: 'Varsayılanları sıfırla', scheduledShadowing: 'Planlanan shadowing', passesLabel: 'planlanan tekrar', minutesScheduled: 'pratik süresi', activeSpeaking: 'Konuşma süresi', pauseTime: 'Mola süresi', flexibleBuffer: 'Esnek süre', timelineLabel: 'Oturum zaman çizelgesi', shadowBlock: 'Shadowing tekrarı', pauseBlock: 'Mola', bufferBlock: 'Tekrar veya notlar', statusFits: 'Tam uydu', statusShort: 'Süre yetersiz', statusBuffer: 'Boşluk var', shortDetail: 'İstenen {requested} tekrardan yalnızca {planned} tanesi tam klip olarak sığıyor. Klipi kısaltın, tekrar sayısını azaltın veya süre ekleyin.', bufferDetail: 'İstenen tüm tekrarlar sığıyor. Tekrar, kayıt kontrolü veya notlar için {remaining} kaldı.', fitsDetail: 'İstenen tüm tekrarlar ve molalar oturum bütçesine sığıyor.', budgetNote: 'Bütçe: {budget}', useBuffer: 'Son bloğu daha az destekle tekrar, kısa bir öz kayıt veya taklit etmek istediğiniz sesle ilgili bir not için kullanın.', cueTitle: 'Pratik ipuçları', cuePlay: 'Hedefi değiştirmeden önce klibin tamamını oynatın.', cueSpeak: 'Önce ritmi takip edin, sonra tek bir sesi geliştirin.', cueNotice: 'Sonraki tekrarınızı değiştirecek bir not bırakın.', timerTitle: 'Bu provayı çalıştır', startTimer: 'Geri sayımı başlat', pauseTimer: 'Geri sayımı duraklat', resumeTimer: 'Geri sayıma devam et', resetTimer: 'Zamanlayıcıyı sıfırla', timerSoundOn: 'Ses açık', timerSoundOff: 'Ses kapalı', timerIdle: 'Hazır', timerRunning: 'Devam ediyor', timerPaused: 'Duraklatıldı', timerComplete: 'Tamamlandı', timerCompleteDetail: 'Oturum tamamlandı. Yeniden çalıştırmak için zamanlayıcıyı sıfırlayın.', timerStartHint: 'Klibiniz hazır olduğunda başlat düğmesine basın.', timerNoSchedule: 'Zamanlayıcıyı başlatmak için en az bir tam tekrara yetecek süre ekleyin.', legendShadow: 'Shadowing tekrarı', legendPause: 'Mola', legendBuffer: 'Esnek süre', inputHelp: 'Bir tekrar, siz eş zamanlı konuşurken klibin baştan sona oynatılmasıdır. Molalar yalnızca tam tekrarların arasında olur.', numberLocale: 'tr-TR',
|
|
7
|
+
};
|
|
8
|
+
const faq = [
|
|
9
|
+
{ question: 'Bu shadowing planlayıcı neyi hesaplar?', answer: 'Oturum bütçesini, klip uzunluğunu, tekrar sayısını ve mola süresini bir zaman çizelgesine dönüştürür. Yalnızca tam tekrarları sayar; böylece kaç tekrarın sığdığını ve ne kadar esnek süre kaldığını görürsünüz.' },
|
|
10
|
+
{ question: 'Bir shadowing tekrarı nedir?', answer: 'Klibi tamamen oynatırken konuşmayı mümkün olduğunca doğru ve anında tekrar etmektir. Planlayıcı, girdiğiniz klip uzunluğunu kullanır.' },
|
|
11
|
+
{ question: 'Planlayıcı neden kısmi tekrarı eklemiyor?', answer: 'Kısmi tekrar, hedeflediğiniz klibin tamamını çalışmadığı için pratik planında yararlı değildir. Uyarı, başlamadan önce bütçeyi, klip uzunluğunu, tekrarları veya molaları değiştirmenize yardımcı olur.' },
|
|
12
|
+
{ question: 'Esnek süreyi nasıl kullanmalıyım?', answer: 'Bir bilinçli tekrar, karşılaştırmak için kısa bir kayıt veya ritim, bağlantılar, vurgu ya da yeniden bakılacak bir ses hakkında not için kullanın. Daha fazla tekrar otomatik olarak daha iyi telaffuz sağlamaz.' },
|
|
13
|
+
{ question: 'Telaffuzumu ölçer veya ilerlemeyi garanti eder mi?', answer: 'Hayır. Araç yalnızca zamanı planlar. Sesinizi dinlemez, doğruluğu değerlendirmez, seviyenizi tahmin etmez ve gelişme garantisi vermez. Doğruluk önemli olduğunda geri bildirim alın.' },
|
|
14
|
+
];
|
|
15
|
+
const howTo = [
|
|
16
|
+
{ name: 'Oturum bütçesini ayarla', text: 'Bu pratik için ayırabileceğiniz toplam dakikayı girin.' },
|
|
17
|
+
{ name: 'Klip uzunluğunu gir', text: 'Tam bir ses veya video klibinin süresini kullanın.' },
|
|
18
|
+
{ name: 'Tekrarları ve molaları seç', text: 'Tam shadowing tekrarlarının sayısını ve aralarındaki molayı belirleyin.' },
|
|
19
|
+
{ name: 'Zaman çizelgesini takip et', text: 'Numaralı tekrarları tamamlayın, işaretli molaları yapın ve son esnek bloğu tekrar, karşılaştırma veya notlar için kullanın.' },
|
|
20
|
+
];
|
|
21
|
+
const appSchema: SoftwareApplication = { '@type': 'SoftwareApplication', name: 'Dil Shadowing Oturum Planlayıcısı', applicationCategory: 'EducationalApplication', operatingSystem: 'Any', isAccessibleForFree: true, url: 'https://gamebob.dev/tr/dil-shadowing-oturum-planlayicisi' };
|
|
22
|
+
const howToSchema: HowTo = { '@type': 'HowTo', name: 'Bir dil shadowing oturumu planlama', step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) };
|
|
23
|
+
const faqSchema: FAQPage = { '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) };
|
|
24
|
+
|
|
25
|
+
export const content: ToolLocaleContent<ShadowingSessionUI> = {
|
|
26
|
+
slug: 'dil-shadowing-oturum-planlayicisi', title: 'Dil Shadowing Oturum Planlayıcısı', description: 'Klip uzunluğu, tekrarlar, molalar ve kullanılabilir zamana göre süreli bir shadowing pratik oturumu oluşturun.', ui,
|
|
27
|
+
seo: [
|
|
28
|
+
{ type: 'title', text: 'Bir shadowing klibini tamamlayabileceğiniz bir oturuma dönüştürün', level: 2 },
|
|
29
|
+
{ type: 'paragraph', html: 'Pratik bloğunun bir şekli olmadığında shadowing çalışmasını bırakmak kolaydır. Bu planlayıcı tek bir klibi sınırlı bir provaya dönüştürür: tam tekrarlar numaralanır, molalar görünür ve kalan bütçe bilinçli bir tekrar veya not zamanı olur. Oturumun ortasında sürenin yetmediğini anlamak yerine planı başlamadan önce değiştirebilirsiniz.' },
|
|
30
|
+
{ type: 'title', text: 'Zaman hesabı nasıl çalışır', level: 2 },
|
|
31
|
+
{ type: 'paragraph', html: 'Hesaplama her tekrarı klibin tam uzunluğu olarak kabul eder. Molayı yalnızca tekrarların arasına ekler, son tekrardan sonra eklemez. Örneğin 30 saniyelik bir klip, 10 saniyelik molalarla dört kez tekrarlandığında 120 saniye konuşma ve 30 saniye mola olmak üzere 2 dakika 10 saniye sürer. Bütçe bir sonraki tam tekrardan kısaysa o tekrar zaman çizelgesine eklenmez.' },
|
|
32
|
+
{ type: 'title', text: 'Pratik çizgisini okuma', level: 2 },
|
|
33
|
+
{ type: 'table', headers: ['İşaret', 'Anlamı', 'Yararlı eylem'], rows: [['Numaralı mercan bloklar', 'Bütçeye sığan tam shadowing tekrarları.', 'Klip ile birlikte konuşun ve numarayı bitiş noktası olarak kullanın.'], ['Mavi bloklar', 'İki tam tekrar arasındaki mola.', 'Nefes alın, dikkatinizi yenileyin ve sıradaki sesi seçin.'], ['Altın blok', 'İstenen tekrarların ardından kalan süre.', 'Bir tekrar yapın, kaydı karşılaştırın veya kısa bir not yazın.']] },
|
|
34
|
+
{ type: 'title', text: 'Her tekrarı daha yararlı yapın', level: 2 },
|
|
35
|
+
{ type: 'paragraph', html: 'Konuşmacıyı kaybetmeden tekrar edebileceğiniz kadar kısa bir klip seçin. İlk tekrarda ritme, sonraki tekrarlarda vurguya, ses düşmelerine, bağlantılara veya açıklayabileceğiniz tek bir ünsüze odaklanın. Klip hâlâ zorsa tekrar eklemeden önce hızı azaltın veya daha kısa bir bölüm seçin.' },
|
|
36
|
+
{ type: 'list', items: ['Sonraki bölümü aramadan yeniden oynatabileceğiniz bir ses seçin.', 'Tam sonu dahil ederek klibin gerçek uzunluğunu girin.', 'Molaları açıklama okumak yerine bir ses özelliğini adlandırmak için kullanın.', 'Son esnek süreyi bir karşılaştırmaya veya sonraki oturumu değiştirecek nota ayırın.', 'Doğruluk önemli olduğunda öğretmen veya çalışma arkadaşından geri bildirim alın.'] },
|
|
37
|
+
{ type: 'tip', title: 'Planlayıcının söyleyemeyeceği şeyler', html: 'Zaman çizelgesi aritmetiktir, telaffuz değerlendirmesi değildir. Sesinizi duymaz, taklidinizin doğruluğunu değerlendirmez ve bir seviye belirlemez. Shadowing araştırmaları belirli öğrencileri, görevleri ve koşulları inceler; bu planı garantili ilerlemenin kanıtı değil, pratik için kullanılabilir bir çerçeve olarak görün.' },
|
|
38
|
+
], faq, bibliography: [{ name: '日本語聴解学習におけるシャドーイングの効果', url: 'https://www.jstage.jst.go.jp/article/jlem/29/1/29_26/_article/-char/ja' }, { name: 'British Council: Teaching English pronunciation online: Practical tips and benefits of shadowing', url: 'https://americas.britishcouncil.org/new-ways-of-teaching/events/teaching-english-pronunciation-online' }], howTo,
|
|
39
|
+
schemas: [{ '@context': 'https://schema.org', ...appSchema } as unknown as Record<string, unknown>, { '@context': 'https://schema.org', ...howToSchema } as unknown as Record<string, unknown>, { '@context': 'https://schema.org', ...faqSchema } as unknown as Record<string, unknown>],
|
|
40
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { ShadowingSessionUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const ui: ShadowingSessionUI = {
|
|
6
|
+
quickStarts: '快速开始', quickShort: '5分钟循环', quickFocused: '12分钟专注', quickLong: '25分钟深入', totalMinutes: '练习时长', clipSeconds: '片段长度', repetitions: '跟读次数', pauseSeconds: '每次跟读间隔', minutesUnit: '分钟', secondsUnit: '秒', passesUnit: '次', resetLabel: '恢复默认值', scheduledShadowing: '跟读计划', passesLabel: '计划次数', minutesScheduled: '练习时间', activeSpeaking: '开口时间', pauseTime: '休息时间', flexibleBuffer: '灵活余量', timelineLabel: '练习时间线', shadowBlock: '跟读', pauseBlock: '休息', bufferBlock: '复听或笔记', statusFits: '刚好合适', statusShort: '时间不足', statusBuffer: '还有余量', shortDetail: '计划的{requested}次跟读中,只有{planned}次完整片段可以安排。请缩短片段、减少次数或增加时间。', bufferDetail: '所有计划的跟读都能安排。你还剩{remaining}可用于复听、检查录音或记录笔记。', fitsDetail: '所有计划的跟读和休息都在本次练习时长内。', budgetNote: '时长:{budget}', useBuffer: '把最后一段时间用于减少提示后的复听、快速自录,或记录想模仿的声音。', cueTitle: '练习提示', cuePlay: '更换目标前,先播放完整片段。', cueSpeak: '先跟住节奏,再打磨一个声音。', cueNotice: '留下一条能改变下一次练习的笔记。', timerTitle: '开始这次练习', startTimer: '开始倒计时', pauseTimer: '暂停倒计时', resumeTimer: '继续倒计时', resetTimer: '重置计时器', timerSoundOn: '声音已开', timerSoundOff: '声音已关', timerIdle: '准备好了', timerRunning: '进行中', timerPaused: '已暂停', timerComplete: '已完成', timerCompleteDetail: '练习完成。重置计时器即可再次开始。', timerStartHint: '片段准备好后按开始。', timerNoSchedule: '请增加足够完成一次完整跟读的时间,才能启动计时器。', legendShadow: '跟读', legendPause: '休息', legendBuffer: '灵活时间', inputHelp: '一次跟读是完整播放片段并同时开口模仿。休息只出现在完整跟读之间。', numberLocale: 'zh-CN',
|
|
7
|
+
};
|
|
8
|
+
const faq = [
|
|
9
|
+
{ question: '这个跟读计划器计算什么?', answer: '它根据练习时长、片段长度、跟读次数和休息时间生成时间线。它只计算完整跟读,因此你能准确看到可以完成多少次以及还剩多少灵活时间。' },
|
|
10
|
+
{ question: '一次跟读是什么?', answer: '完整播放片段,同时尽可能准确、及时地重复说话内容。计划器使用你输入的片段长度。' },
|
|
11
|
+
{ question: '为什么不安排不完整的跟读?', answer: '不完整的跟读无法练习原本选定的完整片段,因此对计划帮助不大。提示可以让你在开始前调整时长、片段、次数或休息。' },
|
|
12
|
+
{ question: '如何使用灵活余量?', answer: '可以用来有目的地复听、比较一段短录音,或记录节奏、连读、重音和需要再次检查的声音。增加次数并不会自动带来更好的发音。' },
|
|
13
|
+
{ question: '它会测量发音或保证进步吗?', answer: '不会。它只安排时间,不会听你的声音、判断准确度、估计水平或保证进步。需要准确反馈时,请使用老师或同伴的意见。' },
|
|
14
|
+
];
|
|
15
|
+
const howTo = [
|
|
16
|
+
{ name: '设置练习时长', text: '输入这次练习可以使用的总分钟数。' },
|
|
17
|
+
{ name: '输入片段长度', text: '使用一段完整音频或视频片段的时长。' },
|
|
18
|
+
{ name: '选择次数和休息', text: '设置完整跟读的次数,以及每次之间需要的休息时间。' },
|
|
19
|
+
{ name: '按照时间线练习', text: '完成带编号的跟读,遵守标出的休息,并把最后的灵活时间用于复听、比较或记笔记。' },
|
|
20
|
+
];
|
|
21
|
+
const appSchema: SoftwareApplication = { '@type': 'SoftwareApplication', name: '语言跟读练习计划器', applicationCategory: 'EducationalApplication', operatingSystem: 'Any', isAccessibleForFree: true, url: 'https://gamebob.dev/zh/language-shadowing-session-planner' };
|
|
22
|
+
const howToSchema: HowTo = { '@type': 'HowTo', name: '规划一次语言跟读练习', step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) };
|
|
23
|
+
const faqSchema: FAQPage = { '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) };
|
|
24
|
+
|
|
25
|
+
export const content: ToolLocaleContent<ShadowingSessionUI> = {
|
|
26
|
+
slug: 'language-shadowing-session-planner', title: '语言跟读练习计划器', description: '根据片段长度、跟读次数、休息和可用时间,创建有明确时间安排的语言跟读练习。', ui,
|
|
27
|
+
seo: [
|
|
28
|
+
{ type: 'title', text: '把跟读片段变成可以完成的练习', level: 2 },
|
|
29
|
+
{ type: 'paragraph', html: '当练习没有清晰的结构时,跟读很容易被放弃。这个计划器把一个片段变成有限的练习:完整跟读带有编号,休息清晰可见,剩余时长则成为复听或记笔记的专门时间。你可以在开始前调整计划,而不是练到一半才发现时间不够。' },
|
|
30
|
+
{ type: 'title', text: '时间如何计算', level: 2 },
|
|
31
|
+
{ type: 'paragraph', html: '计算把每次跟读视为片段的完整时长。休息只加在两次跟读之间,不会加在最后一次之后。例如,30秒片段跟读四次、每次休息10秒,总时长就是2分10秒:说话120秒,加上休息30秒。如果剩余时间不够下一次完整跟读,就不会把它放进时间线。' },
|
|
32
|
+
{ type: 'title', text: '如何阅读练习线', level: 2 },
|
|
33
|
+
{ type: 'table', headers: ['标记', '含义', '可以做什么'], rows: [['带编号的珊瑚色区块', '在时长内可以完成的完整跟读。', '跟着片段开口,并把编号作为结束点。'], ['蓝色区块', '两次完整跟读之间的休息。', '呼吸、重新集中注意力,并决定接下来听哪个声音。'], ['金色区块', '完成所有计划跟读后剩余的时间。', '用来复听、比较录音或写一条简短笔记。']] },
|
|
34
|
+
{ type: 'title', text: '让每次跟读更有价值', level: 2 },
|
|
35
|
+
{ type: 'paragraph', html: '选择足够短的片段,这样重复时不会跟丢说话人。前几次先关注节奏,之后再听重音、弱读、连读或一个可以描述的辅音。如果片段仍然太难,先降低速度或换成更短的片段,再增加次数。' },
|
|
36
|
+
{ type: 'list', items: ['选择不必寻找下一段就能重新播放的音频。', '输入包含完整结尾的真实片段时长。', '利用休息说出一个声音特征,而不是继续阅读解释。', '把最后的余量用于改变下一次练习的比较或笔记。', '当准确度重要时,请老师或练习伙伴提供反馈。'] },
|
|
37
|
+
{ type: 'tip', title: '计划器无法告诉你的事', html: '时间线是算术计划,不是发音评估。它不会听你的声音、判断模仿是否准确,也不会确定语言水平。跟读研究通常针对特定学习者、任务和训练条件,因此请把这个计划当作实用的练习框架,而不是进步保证。' },
|
|
38
|
+
], faq, bibliography: [{ name: '日本語聴解学習におけるシャドーイングの効果', url: 'https://www.jstage.jst.go.jp/article/jlem/29/1/29_26/_article/-char/ja' }, { name: 'British Council: Teaching English pronunciation online: Practical tips and benefits of shadowing', url: 'https://americas.britishcouncil.org/new-ways-of-teaching/events/teaching-english-pronunciation-online' }], howTo,
|
|
39
|
+
schemas: [{ '@context': 'https://schema.org', ...appSchema } as unknown as Record<string, unknown>, { '@context': 'https://schema.org', ...howToSchema } as unknown as Record<string, unknown>, { '@context': 'https://schema.org', ...faqSchema } as unknown as Record<string, unknown>],
|
|
40
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ToolDefinition } from '../../types';
|
|
2
|
+
import { languageShadowingSessionPlanner } from './entry';
|
|
3
|
+
|
|
4
|
+
export type { ShadowingSessionUI } from './ui';
|
|
5
|
+
export type { ShadowingBlock, ShadowingBlockKind, ShadowingPlanInputs, ShadowingPlanResult, ShadowingPlanStatus } from './types';
|
|
6
|
+
export { calculateShadowingPlan, DEFAULT_SHADOWING_INPUTS, normalizeShadowingInputs } from './logic';
|
|
7
|
+
export { languageShadowingSessionPlanner } from './entry';
|
|
8
|
+
|
|
9
|
+
export const LANGUAGE_SHADOWING_SESSION_PLANNER_TOOL: ToolDefinition = {
|
|
10
|
+
entry: languageShadowingSessionPlanner,
|
|
11
|
+
Component: () => import('./component.astro'),
|
|
12
|
+
SEOComponent: () => import('./seo.astro'),
|
|
13
|
+
BibliographyComponent: () => import('./bibliography.astro'),
|
|
14
|
+
};
|