Client: Prometric
Project: localization of the UI for Surpass Delta product
Periodicity: roughly once a quarter
Task: to translate new strings of text for new features that are being released on Delta
Languages: English to 59 languages (always the same)
Format: Excel (only some sheets/columns)
Booking subcontractors
Assigning jobs
File management
Uploading files
Downloading files
Putting files in the right folder
Reviewing deliverables
Checking completion
Checking tags
Booking subcontractors
Assigning jobs
File management
Uploading files
Downloading files
Putting files in the right folder
Reviewing deliverables
Checking completion
Checking tags
/glossary
/tm
/source
/target
/
/omegat
working TM
master TM
reference TM(s)
terminology
original docs
translated docs
user input
文
extraction
text
skeleton
merge
concordances
leverage (matches)
saved
bilingual
PROJECT ├── dictionary ├── glossary ├── omegat │ ├── filters.xml │ └── filter@configuration.frpm ├── omegat.project ├── source │ └── file.txt ├── target │ └── file.txt └── tm └── file.tmx
PROJECT ├── dictionary ├── glossary ├── omegat │ ├── filters.xml │ └── filter@configuration.frpm ├── omegat.project ├── source │ └── file.txt ├── target │ └── file.txt └── tm └── file.tmx
PROJECT ├── dictionary ├── glossary ├── omegat │ ├── filters.xml │ └── filter@configuration.frpm ├── omegat.project ├── source │ └── file.txt ├── target │ └── file.txt └── tm └── file.tmx
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<omegat>
<project version="1.0">
<source_dir>__DEFAULT__</source_dir>
<source_dir_excludes>
<mask>**/.svn/**</mask>
<mask>**/.git/**</mask>
<mask>**/.hg/**</mask>
<mask>**/.repositories/**</mask>
<mask>**/Thumbs.db</mask>
<mask>**/.DS_Store</mask>
<mask>**/~$*</mask>
</source_dir_excludes>
<target_dir>__DEFAULT__</target_dir>
<tm_dir>__DEFAULT__</tm_dir>
<glossary_dir>__DEFAULT__</glossary_dir>
<glossary_file>__DEFAULT__</glossary_file>
<dictionary_dir>__DEFAULT__</dictionary_dir>
<source_lang>en</source_lang>
<target_lang>bg-BG</target_lang>
<source_tok>org.omegat.tokenizer.LuceneEnglishTokenizer</source_tok>
<target_tok>org.omegat.tokenizer.LuceneBulgarianTokenizer</target_tok>
<sentence_seg>true</sentence_seg>
<support_default_translations>true</support_default_translations>
<remove_tags>false</remove_tags>
</project>
</omegat>
← the working TM sits here (not displayed)
← the reference TM(s) sit here.
← the master TMs are generated inside the project folder (root)
← these are the project settings
~/02_Clients/[CLIENT]/01_PROJECTS/[PROJECT]/01_Translation$ tree -L 1 . ├── 00_Admin ├── 10_History ├── 20_Automation ├── 30_Incoming ├── 40_Jobs ├── 50_Repos ├── 80_Deliverables └── 90_Assets
~/02_Clients/[CLIENT]/01_PROJECTS/[PROJECT]/01_Translation$ tree -L 1 . ├── 00_Admin ├── 10_History ├── 20_Automation ├── 30_Incoming ├── 40_Jobs ├── 50_Repos ├── 80_Deliverables └── 90_Assets
~/02_Clients/[CLIENT]/01_PROJECTS/[PROJECT]/01_Translation$ tree -L 1 . ├── 00_Admin ├── 10_History ├── 20_Automation ├── 30_Incoming ├── 40_Jobs ├── 50_Repos ├── 80_Deliverables └── 90_Assets
input
~/02_Clients/[CLIENT]/01_PROJECTS/[PROJECT]/01_Translation$ tree -L 1 . ├── 00_Admin ├── 10_History ├── 20_Automation ├── 30_Incoming ├── 40_Jobs ├── 50_Repos ├── 80_Deliverables └── 90_Assets
~/02_Clients/[CLIENT]/01_PROJECTS/[PROJECT]/01_Translation$ tree -L 1 . ├── 00_Admin ├── 10_History ├── 20_Automation ├── 30_Incoming ├── 40_Jobs ├── 50_Repos ├── 80_Deliverables └── 90_Assets
output
~/02_Clients/[CLIENT]/01_PROJECTS/[PROJECT]/01_Translation$ tree -L 1
.
├── 00_Admin
├── 10_History
├── 20_Automation
├── 30_Incoming
├── 40_Jobs
├── 50_Repos
├── 80_Deliverables
└── 90_Assets
output
input
2022_AUG02
current year
current month
current job within the month
~/02_Clients/[CLIENT]/01_PROJECTS/[PROJECT]/01_Translation$ tree -L 1 . ├── 00_Admin ├── 10_History ├── 20_Automation ├── 30_Incoming ├── 40_Jobs ├── 50_Repos ├── 80_Deliverables └── 90_Assets
file drop
. ├── 30_Incoming ├── 40_Jobs │ ├── 2022_AUG01
│ │ ├── 00_Admin
│ │ ├── 01_Source
│ │ │ ├── file2_en.xls
│ │ │ └── file2_en.xls
│ │ ├── 02_Target
│ │ └── 03_Review
│ │ ├── Clean_Files │ │ └── Notes_Files ├── 50_Repos ├── 80_Deliverables └── 90_Assets
. ├── 30_Incoming ├── 40_Jobs ├── 50_Repos │ ├── 01_Common │ │ └── PROJ_common_files │ │ ├── files │ │ │ ├── 2022_AUG01 │ │ │ │ ├── file1_en.xls.json │ │ │ │ └── file2_en.xls.json │ │ └── settings │ ├── 02_Versions │ ├── 03_Harvest │ └── repo_urls.txt ├── 80_Deliverables └── 90_Assets
> org="capstan-PROJ"
> common_repo="PROJ_common_files"
> team="translators"
> # ---
> cd /path/to/PROJ_common_files
> git init
> git add . && git commit -m "initial commit"
> gh repo create $org/$common_repo --private --source=.
--remote=origin --team $team
> git push --set-upstream origin master
Create common files repo
> org="capstan-PROJ"
> common_repo="PROJ_common_files"
> team="translators"
> job_dname="2022_AUG01" # for example
> # add pre-processed json files
> cd /path/to/PROJ_common_files
> git add .
> git commit -m "New files added for job $job_dname"
> git push
Push new batch
50_Repos/ ├── 01_Common │ └── Delta_common_files ├── 02_Versions │ ├── Delta_amh-ETH_OMT │ ├── Delta_ara-ZZZ_OMT │ ├── Delta_bul-BGR_OMT │ └── _tech └── repo_urls.txt
> org="capstan-PROJ"
> omtprj_dname="PROJ_VERSION_files"
> team="translators"
> cd /path/to/version/omegat_project_dir
> gh repo create $org/$omtprj_dname --private
--clone --team $team
> # add repository mappings, mask files out of scope
> git add .
> git commit -m "Initial commit -- creating omegat
team project repo"
> git push --set-upstream origin master
Create each version's repo
PROJECT ├── dictionary ├── glossary ├── omegat │ ├── filters.xml │ └── filter@config.frpm ├── omegat.project ├── source │ └── file.txt ├── target └── tm └── file.tmx
common for all
language versions
repository mapping
common files repo
PROJECT ├── dictionary ├── glossary ├── omegat │ ├── filters.xml │ └── filter@config.frpm ├── omegat.project ├── source │ └── file.txt ├── target └── tm └── file.tmx
PROJECT ├── dictionary ├── glossary ├── omegat │ ├── filters.xml │ └── filter@configuration.frpm ├── omegat.project ├── source │ └── file.txt ├── target └── tm └── file.tmx
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<omegat>
<project version="1.0">
<source_dir>__DEFAULT__</source_dir>
<source_dir_excludes>
<mask>**/.svn/**</mask>
<mask>**/.git/**</mask>
<mask>**/.hg/**</mask>
<mask>**/.repositories/**</mask>
<mask>**/Thumbs.db</mask>
<mask>**/.DS_Store</mask>
<mask>**/~$*</mask>
</source_dir_excludes>
<target_dir>__DEFAULT__</target_dir>
<tm_dir>__DEFAULT__</tm_dir>
<glossary_dir>__DEFAULT__</glossary_dir>
<glossary_file>__DEFAULT__</glossary_file>
<dictionary_dir>__DEFAULT__</dictionary_dir>
<source_lang>en</source_lang>
<target_lang>bg-BG</target_lang>
<source_tok>org.omegat.tokenizer.LuceneEnglishTokenizer</source_tok>
<target_tok>org.omegat.tokenizer.LuceneBulgarianTokenizer</target_tok>
<sentence_seg>true</sentence_seg>
<support_default_translations>true</support_default_translations>
<remove_tags>false</remove_tags>
</project>
</omegat>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<omegat>
<project version="1.0">
<source_dir>__DEFAULT__</source_dir>
<source_dir_excludes>
<mask>**/.svn/**</mask>
<mask>**/.git/**</mask>
<mask>**/.hg/**</mask>
<mask>**/.repositories/**</mask>
<mask>**/Thumbs.db</mask>
<mask>**/.DS_Store</mask>
<mask>**/~$*</mask>
</source_dir_excludes>
<target_dir>__DEFAULT__</target_dir>
<tm_dir>__DEFAULT__</tm_dir>
<glossary_dir>__DEFAULT__</glossary_dir>
<glossary_file>__DEFAULT__</glossary_file>
<dictionary_dir>__DEFAULT__</dictionary_dir>
<source_lang>en</source_lang>
<target_lang>bg-BG</target_lang>
<source_tok>org.omegat.tokenizer.LuceneEnglishTokenizer</source_tok>
<target_tok>org.omegat.tokenizer.LuceneBulgarianTokenizer</target_tok>
<sentence_seg>true</sentence_seg>
<support_default_translations>true</support_default_translations>
<remove_tags>false</remove_tags>
<repositories>
<repository type="git" url="https://github.com/capstanlqc-delta/Delta_common_files.git">
<mapping local="source" repository="files"/>
<mapping local="omegat/okf_json@delta.fprm" repository="settings/okf_json@delta.fprm"/>
<mapping local="omegat/filters.xml" repository="settings/filters.xml"/>
</repository>
</repositories>
</project>
</omegat>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<omegat>
<project version="1.0">
<source_dir>__DEFAULT__</source_dir>
<source_dir_excludes>
<mask>**/.svn/**</mask>
<mask>**/.git/**</mask>
<mask>**/.hg/**</mask>
<mask>**/.repositories/**</mask>
<mask>**/Thumbs.db</mask>
<mask>**/.DS_Store</mask>
<mask>**/~$*</mask>
</source_dir_excludes>
<target_dir>__DEFAULT__</target_dir>
<tm_dir>__DEFAULT__</tm_dir>
<glossary_dir>__DEFAULT__</glossary_dir>
<glossary_file>__DEFAULT__</glossary_file>
<dictionary_dir>__DEFAULT__</dictionary_dir>
<source_lang>en</source_lang>
<target_lang>bg-BG</target_lang>
<source_tok>org.omegat.tokenizer.LuceneEnglishTokenizer</source_tok>
<target_tok>org.omegat.tokenizer.LuceneBulgarianTokenizer</target_tok>
<sentence_seg>true</sentence_seg>
<support_default_translations>true</support_default_translations>
<remove_tags>false</remove_tags>
<repositories>
<repository type="git" url="https://github.com/capstanlqc-delta/Delta_bul-BGR_OMT.git">
<mapping local="/" repository="/"/>
</repository>
<repository type="git" url="https://github.com/capstanlqc-delta/Delta_common_files.git">
<mapping local="source" repository="files"/>
<mapping local="omegat/okf_json@delta.fprm" repository="settings/okf_json@delta.fprm"/>
<mapping local="omegat/filters.xml" repository="settings/filters.xml"/>
</repository>
</repositories>
</project>
</omegat>
50_Repos/ ├── 01_Common │ └── Delta_common_files ├── 02_Versions │ ├── Delta_amh-ETH_OMT │ ├── Delta_ara-ZZZ_OMT │ ├── Delta_bul-BGR_OMT │ └── _tech ├── 03_Harvest │ ├── Delta_amh-ETH_OMT │ ├── Delta_ara-ZZZ_OMT │ └── Delta_bul-BGR_OMT └── repo_urls.txt
40_Jobs ├── 2022_AUG01
│ ├── 00_Admin
│ ├── 01_Source
│ ├── 02_Target
│ └── 03_Review
50_Repos ├── 01_Common ├── 02_Versions
├── 03_Harvest │ ├── Delta_amh-ETH_OMT │ ├── Delta_ara-ZZZ_OMT │ └── Delta_bul-BGR_OMT └── 80_Deliverables
target
JSON files
done
XLS files
~/02_Clients/[CLIENT]/01_PROJECTS/[PROJECT]/01_Translation$ tree -L 1
.
├── 00_Admin
├── 10_History
├── 20_Automation
├── 30_Incoming
├── 40_Jobs
├── 50_Repos
├── 80_Deliverables
└── 90_Assets
output
input
> org="capstan-PROJ"
> omtprj_dname="PROJ_VERSION_files"
> team="translators"
> cd /path/to/harvest/folder
# if never cloned:
> gh repo clone $org/$omtprj_dname
# if already cloned:
> cd /path/to/harvest/folder/$omtprj_dname
> git fetch --all
> git reset --hard origin/master
Pull version's target files
Automated notifications:
Automated comment handling:
Automated access management:
In other words: no file uploads/downloads
Work in progress
Work in progress
Three options:
* bash 5.1
* omegat 5.7
* github
* python 3.8
* nextcloud