Skip to content

Commit d96a037

Browse files
feature: multilingual support for 9 additional languages (#56)
* Add OpenAI-based translation system * added proper github actions * github actions fix * git acitons fix * Fix typo in admin documentation * Auto-translate documentation Translated files: - docs/en/administration/admin.md * Update admin.md * Auto-translate documentation Translated files: - docs/en/administration/admin.md * Fix grammatical error in admin documentation * Auto-translate documentation Translated files: - docs/en/administration/admin.md * added new translations files and added navigation translation * homepage transalted * refactoring and cleaning up * removed duplicate image and added more languages * translated docs to more languages * added it, fi and da translations without docs yet * added ukrainian, tested search because lunr.js is supposed to not support ukrainian. works fine anyways :) * added it, da, fi and uk. Tested ukrainan search because lunr.js supposedly does not support it. still works --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 parent 7f15050 commit d96a037

File tree

744 files changed

+32907
-125
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

744 files changed

+32907
-125
lines changed

.env.example

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# OpenAI API Key for translation
2+
3+
# Get your key from: https://platform.openai.com/api-keys
4+
OPENAI_API_KEY=sk-proj--YOUR_API_KEY_HERE

.github/workflows/translate.yml

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
name: Auto-Translate Documentation
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
paths:
8+
- "docs/en/**/*.md"
9+
workflow_dispatch: # Allow manual triggering
10+
11+
jobs:
12+
translate:
13+
runs-on: ubuntu-latest
14+
15+
permissions:
16+
contents: write # Required to push translations
17+
18+
steps:
19+
- name: Checkout repository
20+
uses: actions/checkout@v4
21+
with:
22+
fetch-depth: 0 # Fetch all history for git diff
23+
token: ${{ secrets.GITHUB_TOKEN }} # Use GitHub token for auth
24+
25+
- name: Set up Python
26+
uses: actions/setup-python@v5
27+
with:
28+
python-version: "3.11"
29+
30+
- name: Install dependencies
31+
run: |
32+
python -m pip install --upgrade pip
33+
pip install -r requirements.txt
34+
35+
- name: Get changed files
36+
id: changed-files
37+
run: |
38+
# Get list of changed Markdown files in docs/en/
39+
CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD | grep '^docs/en/.*\.md$' || true)
40+
41+
if [ -z "$CHANGED_FILES" ]; then
42+
echo "No Markdown files changed in docs/en/"
43+
echo "changed=false" >> $GITHUB_OUTPUT
44+
else
45+
echo "Changed files:"
46+
echo "$CHANGED_FILES"
47+
48+
# Convert to space-separated list for easier processing
49+
FILES_LIST=$(echo "$CHANGED_FILES" | tr '\n' ' ')
50+
echo "files=$FILES_LIST" >> $GITHUB_OUTPUT
51+
echo "changed=true" >> $GITHUB_OUTPUT
52+
fi
53+
54+
- name: Translate changed files
55+
if: steps.changed-files.outputs.changed == 'true'
56+
env:
57+
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
58+
run: |
59+
# Translate each changed file
60+
for file in ${{ steps.changed-files.outputs.files }}; do
61+
# Remove 'docs/en/' prefix to get relative path
62+
RELATIVE_PATH="${file#docs/en/}"
63+
64+
echo "Translating: $RELATIVE_PATH"
65+
python translate.py --file "$RELATIVE_PATH" --lang all --force
66+
done
67+
68+
- name: Check for translation changes
69+
id: check-changes
70+
if: steps.changed-files.outputs.changed == 'true'
71+
run: |
72+
# Check if any translations were actually changed
73+
74+
# ADD NEW LANGUAGES HERE
75+
if git diff --quiet docs/de/ docs/fr/ docs/es/ docs/zh/ docs/vi/ docs/tr/ docs/ru/ docs/pt/ docs/ja/ docs/da/ docs/fi/ docs/it/ docs/uk/; then
76+
echo "No translation changes"
77+
echo "has_changes=false" >> $GITHUB_OUTPUT
78+
else
79+
echo "Translation changes detected"
80+
echo "has_changes=true" >> $GITHUB_OUTPUT
81+
fi
82+
83+
- name: Commit translations
84+
if: steps.check-changes.outputs.has_changes == 'true'
85+
run: |
86+
git config --local user.email "github-actions[bot]@users.noreply.github.com"
87+
git config --local user.name "github-actions[bot]"
88+
89+
# ADD NEW LANGUAGES HERE
90+
git add docs/de/ docs/fr/ docs/es/ docs/zh/ docs/vi/ docs/tr/ docs/ru/ docs/pt/ docs/ja/ docs/da/ docs/fi/ docs/it/ docs/uk/
91+
92+
# Create commit message with list of translated files
93+
COMMIT_MSG="Auto-translate documentation\n\nTranslated files:\n"
94+
for file in ${{ steps.changed-files.outputs.files }}; do
95+
COMMIT_MSG="${COMMIT_MSG}- ${file}\n"
96+
done
97+
98+
git commit -m "$(echo -e "$COMMIT_MSG")"
99+
100+
- name: Push changes
101+
if: steps.check-changes.outputs.has_changes == 'true'
102+
run: |
103+
git push
104+
105+
- name: Summary
106+
if: steps.changed-files.outputs.changed == 'true'
107+
run: |
108+
echo "## Translation Summary" >> $GITHUB_STEP_SUMMARY
109+
echo "" >> $GITHUB_STEP_SUMMARY
110+
echo "Changed files in docs/en/:" >> $GITHUB_STEP_SUMMARY
111+
for file in ${{ steps.changed-files.outputs.files }}; do
112+
echo "- $file" >> $GITHUB_STEP_SUMMARY
113+
done
114+
echo "" >> $GITHUB_STEP_SUMMARY
115+
116+
if [ "${{ steps.check-changes.outputs.has_changes }}" == "true" ]; then
117+
echo "✅ Translations updated and committed" >> $GITHUB_STEP_SUMMARY
118+
else
119+
echo "ℹ️ No translation changes needed" >> $GITHUB_STEP_SUMMARY
120+
fi

.gitignore

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1-
.venv
2-
.DS_Store
3-
.idea*
4-
.packer_cache
5-
*.bbprojectd
1+
.venv
2+
.DS_Store
3+
.idea*
4+
.packer_cache
5+
*.bbprojectd
6+
venv/
7+
venv
8+
site
9+
site/
10+
.env

CONTRIBUTING.md

Lines changed: 137 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,153 @@ Thanks for helping to improve the Gramps Web documentation! This guide will help
44

55
## Finding your way around
66

7-
The documentation pages are written in Markdown and stored in the `docs` directory. Each page on [grampsweb.org](https://www.grampsweb.org/) corresponds to a `.md` file in this directory.
7+
The documentation pages are written in Markdown and stored in the `docs/en` directory. Each page on [grampsweb.org](https://www.grampsweb.org/) corresponds to a `.md` file in this directory.
88

99
The navigation structure is defined in the `mkdocs.yml` file at the root of the repository. This file controls how the pages are organized and displayed in the sidebar.
1010

11+
There is a automated translation service implemented, which will translate all new/changed files in `docs/en` to the other languages.
12+
1113
## Making changes
1214

13-
To make changes to the documentation, simply change the relevant Markdown files in the `docs` directory and submit a pull request.
15+
To make changes to the documentation, simply change the relevant Markdown files in the `docs/en` directory and submit a pull request.
1416

1517
If you are proficient with git, you can clone the repository, make your changes locally, and push them to your fork. If you're not familiar with git, you can also edit files directly on Github using the web interface.
1618

1719
## Adding new pages
1820

19-
To add a new page to the documentation, create a new Markdown file in the `docs` directory and add it to the `mkdocs.yml` file under the appropriate section. Make sure to follow the existing structure and formatting.
21+
To add a new page to the documentation, create a new Markdown file in the `docs/en` directory and add it to the `mkdocs.yml` file under the appropriate section. Make sure to follow the existing structure and formatting. If you can, also add the translations for the navigation under `mkdocs.yml` .
22+
23+
## Adding translations
24+
25+
The documentation currently supports:
26+
27+
1. **English** (en) - Default
28+
2. **Deutsch** (de) - German
29+
3. **Français** (fr) - French
30+
4. **Español** (es) - Spanish
31+
5. **简体中文** (zh) - Simplified Chinese
32+
6. **Tiếng Việt** (vi) - Vietnamese
33+
7. **Türkçe** (tr) - Turkish
34+
8. **Русский** (ru) - Russian
35+
9. **Português** (pt) - Portuguese
36+
10. **日本語** (ja) - Japanese
37+
11. **Dansk** (da) - Danish
38+
12. **Suomi** (fi) - Finnish
39+
13. **Italiano** (it) - Italian
40+
14. **Українська** (uk) - Ukrainian
41+
42+
The translations of the actual `.md files` are managed automatically using OpenAI GPT-4o-mini. The navigation (under `mkdocs.yml`) and `home.html` need to be translated manually.
43+
44+
### Adding a new language
45+
46+
To add a new language to the documentation:
47+
48+
1. **Update the configuration** in `translate.py` and add the Language under **LANGUAGE_NAMES**:
49+
50+
```python
51+
CONFIG = {
52+
"translation": {
53+
"target_languages": ["de", "fr", "es"], # Add your language code
54+
...
55+
}
56+
}
57+
58+
# Language names for prompting and display
59+
LANGUAGE_NAMES = {
60+
"de": "German",
61+
"fr": "French",
62+
"es": "Spanish",
63+
"it": "Italian",
64+
"en": "English"
65+
}
66+
```
67+
68+
2. **Add the language to MkDocs** in `mkdocs.yml` and add the navigation translations:
69+
70+
```yaml
71+
plugins:
72+
- i18n:
73+
languages:
74+
- locale: es
75+
name: Español
76+
build: true
77+
nav_translations:
78+
Home: Inicio
79+
Features: Características
80+
# ... add all navigation translations
81+
```
82+
83+
3. **Extend github workflow in** `.github\workflows\translate.yml`:
84+
85+
```
86+
- name: Check for translation changes
87+
id: check-changes
88+
if: steps.changed-files.outputs.changed == 'true'
89+
run: |
90+
# Check if any translations were actually changed
91+
92+
# ADD NEW LANGUAGES HERE
93+
if git diff --quiet docs/de/ docs/fr/ docs/es/ docs/zh-hans/ docs/vi/ docs/uk/ docs/tr/ docs/ru/ docs/pt/ docs/ja/; then
94+
echo "No translation changes"
95+
echo "has_changes=false" >> $GITHUB_OUTPUT
96+
else
97+
echo "Translation changes detected"
98+
echo "has_changes=true" >> $GITHUB_OUTPUT
99+
fi
100+
101+
- name: Commit translations
102+
if: steps.check-changes.outputs.has_changes == 'true'
103+
run: |
104+
git config --local user.email "github-actions[bot]@users.noreply.github.com"
105+
git config --local user.name "github-actions[bot]"
106+
107+
# ADD NEW LANGUAGES HERE
108+
git add docs/de/ docs/fr/ docs/es/ docs/zh-hans/ docs/vi/ docs/uk/ docs/tr/ docs/ru/ docs/pt/ docs/ja/
109+
110+
# Create commit message with list of translated files
111+
COMMIT_MSG="Auto-translate documentation\n\nTranslated files:\n"
112+
for file in ${{ steps.changed-files.outputs.files }}; do
113+
COMMIT_MSG="${COMMIT_MSG}- ${file}\n"
114+
done
115+
116+
git commit -m "$(echo -e "$COMMIT_MSG")"
117+
```
118+
119+
4. **Add homepage translations** in `overrides/translations/home.yml`:
120+
121+
```yaml
122+
hero:
123+
es:
124+
title: "Gramps Web"
125+
description: "..."
126+
demo_button: "..."
127+
learn_more:
128+
es:
129+
title: "..."
130+
# ... add all homepage translations
131+
```
132+
133+
5. **Run the translation**:
134+
135+
```bash
136+
python translate.py --lang es
137+
```
138+
139+
### Translating content
140+
141+
All English source files are in `docs/en/`. When you modify an English file, translations are automatically generated via GitHub Actions. For manual translation:
142+
143+
```bash
144+
# Set up your OpenAI API key
145+
cp .env.example .env
146+
# Add your API key to .env
147+
148+
# Translate specific file
149+
python translate.py --file user-guide/blog.md --lang de
150+
151+
# Translate all files
152+
python translate.py --lang all
153+
```
20154

21155
## Previewing changes
22156

docs/CNAME

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
www.grampsweb.org
1+
www.grampsweb.org

docs/da/administration/admin.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Gramps Web Administratorens Guide
2+
3+
Uanset om du har opsat din egen instans af Gramps Web eller tilmeldt dig en forudinstalleret, er næste skridt at befolke og administrere din slægtstrædatabase.
4+
5+
Fokus for denne sektion er på administrative opgaver udført af **træejere**. Normalt er der én træejer for hver slægtstrædatabase (selvom du som træejer også kan oprette andre træejerkonti).
6+
7+
Denne sektion omhandler kun handlinger, der kan udføres fra webgrænsefladen. For kommandolinjeværktøjer eller serverkonfiguration, se den forrige sektion [Opsætning](../install_setup/setup.md).

docs/da/administration/export.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
## Sikkerhedskopier dit slægtstræ
2+
3+
For at oprette en sikkerhedskopi af dit slægtstræ, skal du åbne eksport-siden i Gramps Web og vælge Gramps XML-formatet.
4+
5+
Ved at klikke på "eksport" vil filen blive genereret og downloadet, når den er klar.
6+
7+
Bemærk, at hvis din Gramps Web-bruger ikke har tilladelse til at se private optegnelser, vil eksporten ikke være en fuld sikkerhedskopi, da den ikke vil indeholde nogen private optegnelser.
8+
9+
## Del dit slægtstræ med brugere af andre slægtsforskningsprogrammer
10+
11+
Når deling af genealogiske data som Gramps XML ikke er en mulighed, kan du også eksportere en GEDCOM-fil. Bemærk, at dette ikke er egnet som en sikkerhedskopi af dit Gramps Web-træ.
12+
13+
## Sikkerhedskopier dine mediefiler
14+
15+
For at sikkerhedskopiere dine mediefiler kan du oprette og downloade et ZIP-arkiv af alle mediefiler på eksport-siden.
16+
17+
Bemærk, at dette, især for store træer, kan være en dyr operation for serveren og kun bør gøres, hvis det er absolut nødvendigt.
18+
19+
En bedre mulighed for regelmæssigt at sikkerhedskopiere dine mediefiler er at bruge [Gramps Web Sync-tilføjelsen](sync.md) (som i sig selv ikke er en sikkerhedsløsning) og oprette inkrementelle sikkerhedskopier på din lokale computer.
20+
21+
I begge tilfælde, hvis din Gramps Web-bruger ikke har tilladelse til at se private optegnelser, vil eksporten ikke indeholde filer af private medieobjekter.
22+
23+
## Flyt til en anden Gramps Web-instans
24+
25+
Gramps Web låser dig ikke til en specifik udbyder, og du kan altid flytte til en anden Gramps Web-instans uden at miste data og uden at have direkte adgang til nogen af serverne.
26+
27+
For at opnå en fuld migration, følg disse trin (forudsat at du har ejerrettigheder til træet):
28+
29+
1. Gå til eksport-siden og eksportér dit træ som en Gramps XML (`.gramps`) fil. Hvis du bruger [Sync-tilføjelsen](sync.md), kan du også generere eksporten i Gramps desktop.
30+
2. På eksport-siden, generer og download et mediearkiv. Hvis du bruger [Sync-tilføjelsen](sync.md), kan du også blot ZIP'e din lokale Gramps mediemappe.
31+
3. Gå til Indstillinger > Administration > Administrer brugere og klik på knappen "Eksportér brugeroplysninger". Det vil downloade en JSON-fil.
32+
4. I den nye Gramps Web-instans, åbn import-siden. Importér den `.gramps` fil, der blev eksporteret i trin 1.
33+
5. På import-siden af den nye Gramps Web-instans, upload mediearkivet (ZIP).
34+
6. Gå til Indstillinger > Administration > Administrer brugere af den nye Gramps Web-instans. Klik på knappen "Importer brugerkonti" og upload JSON-filen, der blev downloadet i trin 3.
35+
36+
Bemærk, at mens dine brugerkonti vil blive migreret, skal alle dine brugere indstille nye adgangskoder ved at bruge linket "glemt adgangskode", da adgangskoder opbevares i krypteret form og ikke kan eksporteres.

docs/da/administration/import.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
## Forbered din Gramps-database
2+
3+
Hvis du bruger Gramps Desktop, er der to trin til at forberede din database for at sikre, at alt kører glat i det følgende. Hvis du migrerer fra et andet slægtsforskningsprogram, kan du springe dette trin over.
4+
5+
1. Tjek og reparer databasen
6+
- Valgfrit: opret en databasebackup ved at eksportere til Gramps XML
7+
- Kør [Tjek og reparer databaseværktøjet](https://gramps-project.org/wiki/index.php/Gramps_5.2_Wiki_Manual_-_Tools#Check_and_Repair_Database). Dette retter nogle interne inkonsistenser, der kan føre til problemer i Gramps Web.
8+
2. Konverter mediestier til relative
9+
- Brug Gramps Media Manager til at [konvertere alle mediestier fra absolutte til relative](https://gramps-project.org/wiki/index.php/Gramps_5.2_Wiki_Manual_-_Tools#Convert_paths_from_relative_to_absolute). Bemærk, at selv med relative stier vil mediefiler uden for din Gramps mediemappe ikke fungere korrekt, når de synkroniseres med Gramps Web.
10+
11+
## Importer slægtsdata
12+
13+
For at importere et eksisterende slægtstræ, brug "Import" siden og upload en fil i et af de filformater, der understøttes af Gramps &ndash; se [Import fra et andet slægtsforskningsprogram](https://www.gramps-project.org/wiki/index.php/Import_from_another_genealogy_program) i Gramps Wiki.
14+
15+
Hvis du allerede bruger Gramps Desktop, anbefales det stærkt at bruge Gramps XML (`.gramps`) formatet for at sikre, at dine online og offline træer bruger de samme identifikatorer og kan [synkroniseres](sync.md).
16+
17+
## Hvorfor ingen support for Gramps XML-pakke?
18+
19+
Mens Gramps XML (`.gramps`) er det foretrukne format til import af data, understøttes Gramps XML *pakke* (`.gpkg`) ikke af Gramps Web. Dette skyldes, at import- og eksportrutinerne for mediefiler ikke er velegnede til brug på en webserver.
20+
21+
For at importere mediefilerne, der tilhører en importeret `.gramps` fil, se næste sektion.
22+
23+
## Importer mediefiler
24+
25+
Hvis du har uploadet et slægtstræ og har brug for at uploade de tilsvarende mediefiler, kan du bruge knappen "importer mediearkiv" på "Import" siden.
26+
27+
Det forventer en ZIP-fil med de manglende mediefiler indeni. Mappestrukturen i ZIP-filen behøver ikke at være den samme som mappestrukturen inde i Gramps mediemappe, da filerne matches til medieobjekter ved deres checksum.
28+
29+
Bemærk, at denne funktion kun fungerer for filer, der har den korrekte checksum i Gramps-databasen (hvilket bør sikres ved at køre tjek og reparer værktøjet i det første trin).
30+
31+
Når du flytter til Gramps Web fra et andet slægtsforskningsprogram, der inkluderer mediefiler, anbefales det først at importere alt til Gramps Desktop, som har flere muligheder for at associere eksisterende mediefiler med et importeret træ.

0 commit comments

Comments
 (0)