diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs index bdf806145c..00f9a99d6a 100644 --- a/docs/astro.config.mjs +++ b/docs/astro.config.mjs @@ -160,6 +160,7 @@ export default defineConfig({ id: 'Panduan', 'zh-CN': '指南', 'pt-BR': 'Guias', + 'pt-PT': 'Guias', ko: '가이드', tr: 'Rehber', ru: 'Руководства', @@ -194,6 +195,7 @@ export default defineConfig({ 'zh-CN': '资源', fr: 'Ressources', 'pt-BR': 'Recursos', + 'pt-PT': 'Recursos', ja: 'リソース', ru: 'Ресурсы', }, diff --git a/docs/src/assets/showcase/docs.fontawesome.com.png b/docs/src/assets/showcase/docs.fontawesome.com.png new file mode 100644 index 0000000000..f63c9cb537 Binary files /dev/null and b/docs/src/assets/showcase/docs.fontawesome.com.png differ diff --git a/docs/src/assets/showcase/ion.sst.dev.png b/docs/src/assets/showcase/ion.sst.dev.png new file mode 100644 index 0000000000..67908448fd Binary files /dev/null and b/docs/src/assets/showcase/ion.sst.dev.png differ diff --git a/docs/src/components/showcase-sites.astro b/docs/src/components/showcase-sites.astro index 7b67fac80a..2a04c52e29 100644 --- a/docs/src/components/showcase-sites.astro +++ b/docs/src/components/showcase-sites.astro @@ -120,4 +120,10 @@ import FluidGrid from './fluid-grid.astro'; href="https://sudovanilla.com/docs/minpluto/" thumbnail="sudovanilla.com.png" /> + + diff --git a/docs/src/content/docs/pt-pt/resources/community-content.mdx b/docs/src/content/docs/pt-pt/resources/community-content.mdx new file mode 100644 index 0000000000..466af6d829 --- /dev/null +++ b/docs/src/content/docs/pt-pt/resources/community-content.mdx @@ -0,0 +1,129 @@ +--- +title: Conteúdo da Comunidade +description: Descubra guias produzidos pela comunidade, artigos e vídeos para ajudar a aprender e construir com o Starlight! +--- + +:::tip[Inclua o seu!] +Já produziu conteúdo sobre Starlight? +Então abra um PR e adicione o seu link nesta página! +::: + +import { CardGrid, LinkCard } from '@astrojs/starlight/components'; + +## Artigos e Avaliações + +Aqui está uma coleção de posts e artigos para aprender mais sobre Starlight e sobre as experiências de outras pessoas: + + + + + + + +## Receitas e Guias + +Receitas são tipicamente guias passo a passo, curtos e focados, que levam o leitor a completar um exemplo funcional de uma tarefa específica. +As receitas são também uma ótima maneira de adicionar novas funcionalidades ou comportamentos para seu projeto Starlight bastando seguir simples instruções passo a passo! +Outros guias podem explicar conceitos relacionados a determinada área de conteúdo, como por exemplo usar imagens ou trabalhar com MDX. + +Explore o conteúdo produzido pela comunidade e mantido pelos utilizadores Starlight: + + + + + + + + + + + + +## Conteúdo de Vídeo + +Descubra os vídeos e canais com conteúdo Starlight, incluíndo transmissões ao vivo e conteúdo educacional. + +import YouTubeGrid from '~/components/youtube-grid.astro'; + +### Videos oficiais do Astro + + + +### Vídeos e Transmissões da Comunidade + + diff --git a/docs/src/content/docs/pt-pt/resources/plugins.mdx b/docs/src/content/docs/pt-pt/resources/plugins.mdx new file mode 100644 index 0000000000..778578cce4 --- /dev/null +++ b/docs/src/content/docs/pt-pt/resources/plugins.mdx @@ -0,0 +1,96 @@ +--- +title: Plugins e Integrações +description: Descubra ferramentas da comunidade e integrações que estendem o Starlight! +sidebar: + order: 1 +--- + +:::tip[Inclua o seu!] +Já construiu um plugin ou uma ferramenta para o Starlight? +Então abra um PR e adicione o seu link nesta página! +::: + +## Plugins + +Os [plugins](/pt-pt/reference/plugins/) podem personalizar ou estender a configuração do Starlight, a interface do utilizador e o comportamento, sendo também fáceis de compartilhar e de reutilizar. + +Estenda o seu site com os plugins oficiais suportados pela equipa Starlight e com plugins da comunidade mantidos por outros utilizadores Starlight. + +### Plugins oficiais + + + + + +### Plugins da comunidade + + + + + + + + + + + +## Ferramentas e integrações da comunidade + +import { CardGrid, LinkCard } from '@astrojs/starlight/components'; + +Estas ferramentas e integrações da comunidade podem ser usadas para adicionar funcionalidades ao seu site Starlight. + + + + + + + diff --git a/docs/src/content/docs/pt-pt/resources/showcase.mdx b/docs/src/content/docs/pt-pt/resources/showcase.mdx new file mode 100644 index 0000000000..ba58e224bb --- /dev/null +++ b/docs/src/content/docs/pt-pt/resources/showcase.mdx @@ -0,0 +1,21 @@ +--- +title: Montra Starlight +description: Descubra sites construídos com Starlight! +sidebar: + label: Montra de Sites +--- + +:::tip[Inclua o seu!] +Já construiu um site com o Starlight? +Então abra um PR e adicione o seu link nesta página! +::: + +## Sites + +import ShowcaseSites from '~/components/showcase-sites.astro'; + +O Starlight já está a ser usado em muitos sites em produção. Estes são alguns desses sites já espalhados pela web: + + + +Pesquise todos os [repositórios de projetos públicos que usam o Starlight no GitHub](https://github.com/withastro/starlight/network/dependents). diff --git a/examples/basics/package.json b/examples/basics/package.json index 1202a658e5..651be529bd 100644 --- a/examples/basics/package.json +++ b/examples/basics/package.json @@ -11,7 +11,7 @@ "astro": "astro" }, "dependencies": { - "@astrojs/starlight": "^0.21.3", + "@astrojs/starlight": "^0.21.4", "astro": "^4.3.5", "sharp": "^0.32.5" } diff --git a/examples/tailwind/package.json b/examples/tailwind/package.json index 38daf745d9..19f2dc57b0 100644 --- a/examples/tailwind/package.json +++ b/examples/tailwind/package.json @@ -11,7 +11,7 @@ "astro": "astro" }, "dependencies": { - "@astrojs/starlight": "^0.21.3", + "@astrojs/starlight": "^0.21.4", "@astrojs/starlight-tailwind": "^2.0.1", "@astrojs/tailwind": "^5.1.0", "astro": "^4.3.5", diff --git a/packages/starlight/CHANGELOG.md b/packages/starlight/CHANGELOG.md index fd46ad4fcc..ff35d1c9a0 100644 --- a/packages/starlight/CHANGELOG.md +++ b/packages/starlight/CHANGELOG.md @@ -1,5 +1,13 @@ # @astrojs/starlight +## 0.21.4 + +### Patch Changes + +- [#1703](https://github.com/withastro/starlight/pull/1703) [`b26238f2`](https://github.com/withastro/starlight/commit/b26238f22990dcf8ba002bea6a50c66f20ad5786) Thanks [@HiDeoo](https://github.com/HiDeoo)! - Fixes aside custom titles rendering for nested asides. + +- [#1708](https://github.com/withastro/starlight/pull/1708) [`a72cb966`](https://github.com/withastro/starlight/commit/a72cb96600798c1fbc7558f8fd24556ca442d312) Thanks [@HiDeoo](https://github.com/HiDeoo)! - Fixes translation issues with Expressive Code when using a default language other than English + ## 0.21.3 ### Patch Changes diff --git a/packages/starlight/__tests__/i18n/translations-ec.test.ts b/packages/starlight/__tests__/i18n/translations-ec.test.ts new file mode 100644 index 0000000000..cbefb76fe8 --- /dev/null +++ b/packages/starlight/__tests__/i18n/translations-ec.test.ts @@ -0,0 +1,117 @@ +import { pluginFramesTexts } from 'astro-expressive-code'; +import { afterEach, expect, test, vi } from 'vitest'; +import { addTranslations } from '../../integrations/expressive-code/translations'; +import { StarlightConfigSchema, type StarlightUserConfig } from '../../utils/user-config'; + +vi.mock('astro-expressive-code', async () => { + const mod = await vi.importActual( + 'astro-expressive-code' + ); + return { + ...mod, + pluginFramesTexts: { + ...mod.pluginFramesTexts, + overrideTexts: vi.fn(), + }, + }; +}); + +afterEach(() => { + vi.clearAllMocks(); +}); + +test('adds default english translations with no i18n config', async () => { + const [config, useTranslations] = getStarlightConfigAndUseTranslations(undefined); + + addTranslations(config, useTranslations); + + expect(getExpressiveCodeOverridenLanguages()).toEqual(['en']); +}); + +test('adds translations in a monolingual site with english as root locale', async () => { + const [config, useTranslations] = getStarlightConfigAndUseTranslations({ + root: { label: 'English', lang: 'en' }, + }); + + addTranslations(config, useTranslations); + + expect(getExpressiveCodeOverridenLanguages()).toEqual(['en']); +}); + +test('adds translations in a monolingual site with french as root locale', async () => { + const [config, useTranslations] = getStarlightConfigAndUseTranslations({ + root: { label: 'Français', lang: 'fr' }, + }); + + addTranslations(config, useTranslations); + + expect(getExpressiveCodeOverridenLanguages()).toEqual(['fr']); +}); + +test('add translations in a multilingual site with english as root locale', async () => { + const [config, useTranslations] = getStarlightConfigAndUseTranslations({ + root: { label: 'English', lang: 'en' }, + fr: { label: 'French' }, + }); + + addTranslations(config, useTranslations); + + expect(getExpressiveCodeOverridenLanguages()).toEqual(['en', 'fr']); +}); + +test('add translations in a multilingual site with french as root locale', async () => { + const [config, useTranslations] = getStarlightConfigAndUseTranslations({ + root: { label: 'French', lang: 'fr' }, + ru: { label: 'Русский', lang: 'ru' }, + }); + + addTranslations(config, useTranslations); + + expect(getExpressiveCodeOverridenLanguages()).toEqual(['fr', 'ru']); +}); + +test('add translations in a multilingual site with english as default locale', async () => { + const [config, useTranslations] = getStarlightConfigAndUseTranslations( + { + en: { label: 'English', lang: 'en' }, + fr: { label: 'French' }, + }, + 'en' + ); + + addTranslations(config, useTranslations); + + expect(getExpressiveCodeOverridenLanguages()).toEqual(['en', 'fr']); +}); + +test('add translations in a multilingual site with french as default locale', async () => { + const [config, useTranslations] = getStarlightConfigAndUseTranslations( + { + fr: { label: 'French', lang: 'fr' }, + ru: { label: 'Русский', lang: 'ru' }, + }, + 'fr' + ); + + addTranslations(config, useTranslations); + + expect(getExpressiveCodeOverridenLanguages()).toEqual(['fr', 'ru']); +}); + +function getStarlightConfigAndUseTranslations( + locales: StarlightUserConfig['locales'], + defaultLocale?: StarlightUserConfig['defaultLocale'] +) { + return [ + StarlightConfigSchema.parse({ + title: 'Expressive Code Translations Test', + locales, + defaultLocale, + }), + vi.fn().mockReturnValue(() => 'test UI string'), + ] as const; +} + +function getExpressiveCodeOverridenLanguages() { + return [...new Set(vi.mocked(pluginFramesTexts.overrideTexts).mock.calls.map(([lang]) => lang))]; +} diff --git a/packages/starlight/__tests__/remark-rehype/asides.test.ts b/packages/starlight/__tests__/remark-rehype/asides.test.ts index ba3548c953..cb145e12b5 100644 --- a/packages/starlight/__tests__/remark-rehype/asides.test.ts +++ b/packages/starlight/__tests__/remark-rehype/asides.test.ts @@ -106,6 +106,35 @@ Nested tip. expect(res.code).toMatchFileSnapshot('./snapshots/nested-asides.html'); }); +test('nested asides with custom titles', async () => { + const res = await processor.render(` +:::::caution[Caution with a custom title] +Nested caution. + +::::note +Nested note. + +:::tip[Tip with a custom title] +Nested tip. +::: + +:::: + +::::: +`); + const labels = [...res.code.matchAll(/aria-label="(?