babelquartoによるQuartoウェブサイトの多言語化

Making a multilingual Quarto website with babelquarto


ニッタ ジョエル
Joel NITTA


自己紹介:@joelnitta

  • 千葉大学 准教授
  • シダ植物の進化と生態学
  • Rパッケージ開発
    (進化生態学向け)

https://www.joelnitta.com

Image of Joel Nitta in field

Quarto はすごいぞ

  • QuartoはRやPythonの計算結果を直接文章に入れるツール。
    • HTML(ウェブサイト、スライド、本)
    • PDF
    • MS Word

Artwork from “Hello, Quarto” keynote by Julia Lowndes and Mine Çetinkaya-Rundel, presented at RStudio Conference 2022. Illustrated by Allison Horst.

Quartoの多言語機能は未完成

  • しかし、Quartoは比較的新しいため、まだ欠けて
    いる機能があります。

  • 標準では多言語機能
    ありません。

https://github.com/quarto-dev/quarto-cli/issues/275

babelquarto

  • @maelle@NenuialによるQuarto BookやWebsiteの各言語のバージョンをレンダーする Rパッケージ。

  • (翻訳とは別)

例:ソフトウェア・カーペントリー日本

Example: https://swcarpentry-ja.github.io/

注意

  • 将来的にQuartoに多言語機能が加わる可能性が
    あります。

  • その場合、babelquartoは不要になるでしょう。

  • しかし、現時点で多言語のニーズがある場合は十分活用できます。

babelquarto demo

基本的なサイトを作る

library(quarto)
quarto_create_project(
  name = "example",
  type = "website",
  no_prompt = TRUE,
  quiet = TRUE
)
example
├── _quarto.yml
├── about.qmd
├── index.qmd
└── styles.css

基本的なサイトを作る

library(quarto)
quarto_create_project(
  name = "example",
  type = "website",
  no_prompt = TRUE,
  quiet = TRUE
)
example/_quarto.yml
project:
  type: website

website:
  title: "example"
  navbar:
    left:
      - href: index.qmd
        text: Home
      - about.qmd

format:
  html:
    theme: cosmo
    css: styles.css
    toc: true

主言語を登録する

library(babelquarto)
register_main_language(
  main_language = "ja",
  project_path = "example"
)
example/_quarto.yml
project:
  type: website

website:
  title: "example"
  navbar:
    left:
      - href: index.qmd
        text: Home
      - about.qmd

format:
  html:
    theme: cosmo
    css: styles.css
    toc: true




babelquarto:
  languagecodes:
  - name: ja
    text: "Version in ja"
  mainlanguage: 'ja'
lang: ja

翻訳言語を追加する

library(babelquarto)
register_further_languages(
  further_languages = c("en"),
  project_path = "example"
)
example/_quarto.yml
project:
  type: website

website:
  title: "example"
  navbar:
    left:
      - href: index.qmd
        text: Home
      - about.qmd

format:
  html:
    theme: cosmo
    css: styles.css
    toc: true




babelquarto:
  languagecodes:
  - name: en
    text: "Version in en"
  - name: ja
    text: "Version in ja"
  mainlanguage: 'ja'
  languages: ['en']
title-en: title in en
description-en: description in en
author-en: author in en
lang: ja

_quarto.ymlを編集する

example/_quarto.yml
project:
  type: website

website:
  title: "example"
  navbar:
    left:
      - href: index.qmd
        text: Home
      - about.qmd

format:
  html:
    theme: cosmo
    css: styles.css
    toc: true




babelquarto:
  languagecodes:
  - name: en
    text: "Version in en"
  - name: ja
    text: "Version in ja"
  mainlanguage: 'ja'
  languages: ['en']
title-en: title in en
description-en: description in en
author-en: author in en
lang: ja

example/_quarto.yml
project:
  type: website

website:
  title: "テスト用のサイト"
  navbar:
    left:
      - index.qmd
      - about.qmd

format:
  html:
    theme: cosmo
    css: styles.css
    toc: true




babelquarto:
  languagecodes:
  - name: en
    text: "English"
  - name: ja
    text: "日本語"
  mainlanguage: 'ja'
  languages: ['en']
title-en: Test Site
description-en: My test website
author-en: Joel Nitta
lang: ja

翻訳ファイルを追加する

example
├── _quarto.yml
├── about.qmd
├── index.qmd
└── styles.css

example
├── _quarto.yml
├── about.en.qmd
├── about.qmd
├── index.en.qmd
├── index.qmd
└── styles.css
example/index.qmd
---
title: "ホーム"
---

これは Quarto のウェブサイトです。

Quarto のウェブサイトについて詳しく知りたい場合は、<https://quarto.org/docs/websites> をご覧ください。
example/index.en.qmd
---
title: "Home"
---

This is a Quarto website.

To learn more about Quarto websites visit <https://quarto.org/docs/websites>.

レンダーする

注意:quarto renderが使えません

render_website(project_path = "example")

[1/2] about.qmd

[2/2] index.qmd

Output created: _site/index.html


[1/2] about.qmd

[2/2] index.qmd

Output created: _site/index.html

サーブする

注意:quarto previewが使えません

servr::httw("example/_site")

https://joelnitta.github.io/example-babelquarto/

内容の自動翻訳

  • Markdownやコードごと翻訳されると困ります。
  • 「ChatGPT、これを翻訳してね」

::: {.columns}

::: {.列}

  • いや、だからそうではなく・・

内容の自動翻訳

  • 解決策 ①:Custom GPT。プロンプトでMarkdownをいじらないように頼む。

内容の自動翻訳

  • 解決策 ②babeldown。DeepLに送る前にMarkdownをXMLにパースすることで内容だけを翻訳する。

翻訳の維持

  • 元の文章が変わると翻訳を更新する
    必要があります。

  • POファイルの使用によって、各文章とその翻訳を管理できます。

  • CrowdinやTransifexなどのクラウドツールは、POファイルを裏で使っています。

https://localazy.com/term/free-po-editor

翻訳の維持

  • ザ・カーペントリーズではCrowdinを使っています

まとめ

多言語化はアクセスを増やすためだけでなく、コミュニティを育むためにも重要です!

Enjoy!