Merge remote-tracking branch 'i18n/master' into master

This commit is contained in:
Seth Hillbrand 2020-10-19 17:20:24 -07:00
commit 56cb974757
32 changed files with 998211 additions and 0 deletions

5
.gitignore vendored
View File

@ -110,3 +110,8 @@ CMakeSettings.json
# KDevelop
.kdev4/
*.kdev4
# Translations
*.mo
i18n_status.svg
i18n_status.csv

View File

@ -0,0 +1,47 @@
cmake_minimum_required( VERSION 2.8.4 FATAL_ERROR )
if ( ${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR} )
message( FATAL_ERROR
"In-source builds not allowed. Please make a new directory (called"
" a build directory) and run CMake from there, points here."
" You may need to remove CMakeCache.txt." )
endif()
project( kicad-i18n NONE )
find_package( Gettext REQUIRED )
option( KICAD_I18N_UNIX_STRICT_PATH
"Use standard Unix locale lookup path (default OFF)."
OFF
)
if( UNIX AND KICAD_I18N_UNIX_STRICT_PATH )
set( KICAD_I18N_PATH ${CMAKE_INSTALL_PREFIX}/share/locale
CACHE PATH "Location of KiCad i18n files." )
else()
# Default Unix inconvenient locale lookup path
set( KICAD_I18N_PATH share/kicad/internat
CACHE PATH "Location of KiCad i18n files." )
endif()
file(STRINGS LINGUAS LANG_ARRAY REGEX "^[^#].*")
foreach( LANG ${LANG_ARRAY} )
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/${LANG})
execute_process( COMMAND ${GETTEXT_MSGFMT_EXECUTABLE}
${CMAKE_SOURCE_DIR}/${LANG}/kicad.po
-o ${CMAKE_BINARY_DIR}/${LANG}/kicad.mo )
if( UNIX AND KICAD_I18N_UNIX_STRICT_PATH )
install( FILES ${CMAKE_BINARY_DIR}/${LANG}/kicad.mo
DESTINATION ${KICAD_I18N_PATH}/${LANG}/LC_MESSAGES
COMPONENT resources )
else()
install( FILES ${CMAKE_BINARY_DIR}/${LANG}/kicad.mo
DESTINATION ${KICAD_I18N_PATH}/${LANG}
COMPONENT resources )
endif()
endforeach()

27
translation/LINGUAS Normal file
View File

@ -0,0 +1,27 @@
# please keep this list sorted alphabetically
#
bg
ca
cs
de
el
en
es
fi
fr
hu
it
ja
ko
lt
nl
no
pl
pt
ru
sk
sl
sv
tr
zh_CN
zh_TW

14
translation/POTDIRS Normal file
View File

@ -0,0 +1,14 @@
3d-viewer
bitmap2component
common
cvpcb
eeschema
gerbview
include
libs
kicad
pagelayout_editor
pcb_calculator
pcbnew
plugins
tools

67
translation/README.adoc Normal file
View File

@ -0,0 +1,67 @@
= KiCad GUI translations
This is the repository for the po files that is used for the GUI
translations for KiCad.
It is cmake equipped to conform with the rest of the installation
principles for KiCad.
== How to submit translations
No general details about translating po-files will be described here,
there are plenty of resources on the rest of the www. But a suggestion
on how to handle updates and translations will be provided.
When you start translating we need to make sure there is an updated
po-file. You can either ask someone to do push an update or do it
yourself with the `update-po-files.sh` script. You can add your
language code as the first argument to the script to only update that
single language.
When you did update the po-file, please make a commit with the
following text if you update the german language relative to the kicad
master branch:
```
Update german to master
ca264f898290158f60d4c9dcd55d0428b7fa7965
```
Here we included the language, branch and sha of the kicad source at
the time of updating. Now make your translations and commit that and
push the pull request.
This is not mandatory, but it makes it easer for other people to
review your changes when we seperate the automatic update from the
human edits.
== Depends
- Cmake
- Gettext
== How to install
```sh
$ cd kicad-i18n
$ BUILD_SRC=$(pwd)
$ mkdir -p ~/tmp/kicad-i18n-build
$ cd ~/tmp/kicad-i18n-build
$ cmake ${BUILD_SRC}
$ make install
$ cd ..
$ rm -rf ~/tmp/kicad-i18n-build
```
If you want to change the default install prefix to match your KiCad
build, you can add `cmake` option for example use:
```
-DCMAKE_INSTALL_PREFIX=/usr
```
If you occurred some problems, use `cmake --trace -DCMAKE_VERBOSE_MAKEFILE=ON` instead `cmake` to
make build log more verbose, when you fill issue report.
== Why are we not using transifex or similar service
We would like to make it easier for people to help translate, but I
don't really know how to make transifex work in synergy with a
workflow where people can also update by working with the po files
here directly.

43256
translation/bg/kicad.po Normal file

File diff suppressed because it is too large Load Diff

41269
translation/ca/kicad.po Normal file

File diff suppressed because it is too large Load Diff

47149
translation/cs/kicad.po Executable file

File diff suppressed because it is too large Load Diff

37434
translation/de/kicad.po Normal file

File diff suppressed because it is too large Load Diff

43976
translation/el/kicad.po Normal file

File diff suppressed because it is too large Load Diff

30156
translation/en/kicad.po Normal file

File diff suppressed because it is too large Load Diff

51091
translation/es/kicad.po Normal file

File diff suppressed because it is too large Load Diff

43698
translation/fi/kicad.po Normal file

File diff suppressed because it is too large Load Diff

40169
translation/fr/kicad.po Normal file

File diff suppressed because it is too large Load Diff

40186
translation/hu/kicad.po Normal file

File diff suppressed because it is too large Load Diff

33608
translation/it/kicad.po Normal file

File diff suppressed because it is too large Load Diff

48299
translation/ja/kicad.po Executable file

File diff suppressed because it is too large Load Diff

40756
translation/ko/kicad.po Normal file

File diff suppressed because it is too large Load Diff

45594
translation/lt/kicad.po Normal file

File diff suppressed because it is too large Load Diff

44560
translation/nl/kicad.po Normal file

File diff suppressed because it is too large Load Diff

30987
translation/no/kicad.po Normal file

File diff suppressed because it is too large Load Diff

35458
translation/pl/kicad.po Normal file

File diff suppressed because it is too large Load Diff

71
translation/plot_i18n_status.py Executable file
View File

@ -0,0 +1,71 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#####################################
#
# This program source code file is part of KiCad, a free EDA CAD application.
#
# Copyright (C) 2016 Nick Østergaard <oe.nick at gmail dot com>
# Copyright (C) 2016 KiCad Developers
#
# License GNU GPL Version 3 or any later version.
#
#####################################
import matplotlib.pyplot as plt
import csv
import numpy as np
import time
# Initialize data structure variable
data = []
# Read CSV file
with open('i18n_status.csv', 'r') as csvfile:
spamreader = csv.reader(csvfile, delimiter=';')
for row in spamreader:
data.append(row)
# Replace empyt values with zero and convert numbers to int
for index,value in np.ndenumerate( data ):
if value=='':
data[index[0]][index[1]] = 0
try:
data[index[0]][index[1]] = int(data[index[0]][index[1]])
except:
pass
# Sort data after mostly translated
data[1:] = sorted(data[1:], key=lambda x: int(x[1]), reverse=True)
# Prepare some number for formatting the plot
N = len(data[1:]) # number of languages
width = 0.35 # the width of the bars
ind = np.arange(N)*width*5 # the x locations for the groups
# Plot the bars
fig, ax = plt.subplots()
rects1 = ax.bar(ind, list(zip(*data))[1][1:], width, color='b')
rects2 = ax.bar(ind+width, list(zip(*data))[2][1:], width, color='r')
rects3 = ax.bar(ind+2*width, list(zip(*data))[3][1:], width, color='y')
# Plot ceiling
max_nof_strings = sum(map(int, data[1][1:4]))
plt.plot([0,max(ind)+3*width],[max_nof_strings,max_nof_strings], color='k', linewidth='2')
ax.set_xlim([0,max(ind)+3*width])
# Add some text for labels, title and axes ticks
ax.set_ylabel('Number of strings')
ax.set_title('Translation status')
ax.set_xticks(ind+width*1.5)
ax.set_xticklabels(list(zip(*data))[0][1:])
ax.yaxis.grid(True, which='both') # horizontal lines
ax.legend((rects1[0], rects2[0], rects3[0]), ('TRANSLATED', 'FUZZY', 'UNTRANSLATED'), loc='upper center', bbox_to_anchor=(0.5, -0.05), fancybox=True, ncol=3)
plt.figtext(0.99, 0.96, time.strftime("%d/%m %Y"), horizontalalignment='right')
plt.subplots_adjust(left=0.07, right=0.99, top=0.95, bottom=0.12)
fig.set_size_inches(12, 8)
fig.savefig('i18n_status.svg')
# Show the magic to the user
plt.show()

38272
translation/pt/kicad.po Normal file

File diff suppressed because it is too large Load Diff

35438
translation/ru/kicad.po Normal file

File diff suppressed because it is too large Load Diff

42083
translation/sk/kicad.po Normal file

File diff suppressed because it is too large Load Diff

39494
translation/sl/kicad.po Normal file

File diff suppressed because it is too large Load Diff

35695
translation/sv/kicad.po Normal file

File diff suppressed because it is too large Load Diff

31017
translation/tr/kicad.po Normal file

File diff suppressed because it is too large Load Diff

134
translation/update-po-files.sh Executable file
View File

@ -0,0 +1,134 @@
#!/bin/bash -e
#####################################
#
# This program source code file is part of KiCad, a free EDA CAD application.
#
# Copyright (C) 2015 Marco Ciampa <ciampix@libero.it>
# Copyright (C) 2015-2016 KiCad Developers
#
# License GNU GPL Version 3 or any later version.
#
#####################################
export LC_ALL=C
display_help() {
echo "Usage: $0 [-k] [-p] [locale]"
echo " -k keep pot template and not delete it"
echo " -p plot the translation statistics [requires python with matplotlib]"
echo " -s=<path> path to kicad source code"
exit
}
# Handle command line arguments
for i in "$@"; do
case $i in
-h|--help)
display_help
shift
;;
-k)
KEEP=1
shift
;;
-p)
PLOT=1
shift
;;
-s=*)
SOURCEDIR="${i#*=}"
shift
;;
*)
SINGLE_LANG=$i
;;
esac
done
if [ -z ${SOURCEDIR} ]; then
SOURCEDIR=../kicad
echo "Using default SOURCEDIR=${SOURCEDIR}"
fi
#Autovars
cd $(dirname ${BASH_SOURCE[0]})
LOCALDIR=$PWD
CSVFILE=${PWD}/i18n_status.csv
LINGUAS=`cat $LOCALDIR/LINGUAS|grep -v '^#'|grep -v '^\s*$'` #Read file without comment and empty lines
POTDIRS=`cat $LOCALDIR/POTDIRS|grep -v '^#'|grep -v '^\s*$'` #Read file without comment and empty lines
cd $SOURCEDIR
#Generate/update template pot file
find $POTDIRS -name '*.cpp' -or -name '*.h' |
sort |
xgettext -f- -k_ -k_HKI -kwxPLURAL:1,2 --force-po --from-code utf-8 -o $LOCALDIR/kicad.pot
#check if present in locale list
validate() { echo $LINGUAS | grep -F -q -w "$1"; }
#If supplied, update only the specified locale
if [ ! "$SINGLE_LANG" = "" ] ; then
if ! validate "$SINGLE_LANG"; then
echo "Error!"
echo "Locale argument \"$1\" not present in current locale list:"
for i in $LINGUAS; do echo -n "$i "; done
echo # newline
exit 1
else
LINGUAS="$SINGLE_LANG"
fi
fi
echo "Writing summary to ${CSVFILE}"
echo "LANG;TRANSLATED;FUZZY;UNTRANSLATED" > "${CSVFILE}"
for i in $LINGUAS
do
echo "## $i"
if [ "$i" = "en" ] ; then
msgmerge --no-location --no-fuzzy-matching --force-po $LOCALDIR/$i/kicad.po $LOCALDIR/kicad.pot -o $LOCALDIR/$i/kicad.po 2> /dev/null
msgen $LOCALDIR/$i/kicad.po -o $LOCALDIR/$i/kicad.po.tmp && mv $LOCALDIR/$i/kicad.po.tmp $LOCALDIR/$i/kicad.po
else
msgmerge --force-po $LOCALDIR/$i/kicad.po $LOCALDIR/kicad.pot -o $LOCALDIR/$i/kicad.po 2> /dev/null
fi
msgfmt --statistics $LOCALDIR/$i/kicad.po -o $LOCALDIR/messages.mo 2>&1 >>/dev/null |
while IFS=",." read A B C D ; do
echo $A
echo $B
echo $C
echo $D
for STRING in "$A" "$B" "$C" "$D" ; do
STRING=${STRING# }
case "$STRING" in
*" translated message"* )
TRANSLATED=${STRING% translated message*}
;;
*" fuzzy translation"* )
FUZZY=${STRING% fuzzy translation*}
;;
*" untranslated message"* )
UNTRANSLATED=${STRING% untranslated message*}
;;
"" )
;;
* )
echo >&2 "$0: Unknown format of \"msgfmt --statistics $LOCALDIR/$i/kicad.po \": \"$STRING\""
exit 1
;;
esac
done
echo "$i;${TRANSLATED};${FUZZY};${UNTRANSLATED}">>"${CSVFILE}"
done
rm $LOCALDIR/messages.mo
done
if [ "$PLOT" = "1" ]; then
cd $LOCALDIR
$LOCALDIR/plot_i18n_status.py
fi
if [ ! "$KEEP" = "1" ]; then
rm $LOCALDIR/kicad.pot
fi

37944
translation/zh_CN/kicad.po Executable file

File diff suppressed because it is too large Load Diff

40257
translation/zh_TW/kicad.po Normal file

File diff suppressed because it is too large Load Diff