Skip to content

Commit f7589cc

Browse files
committed
Add useful scripts
1 parent 5349bc7 commit f7589cc

File tree

5 files changed

+168
-17
lines changed

5 files changed

+168
-17
lines changed

extending/embedding.po

+1-1
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ msgid ""
261261
"a Python script, such as:"
262262
msgstr ""
263263
"Bu kod, ``argv[1]`` kullanarak bir Python betiği yükler ve ``argv[2]`` "
264-
"içinde adlandırılan fonksiyonu çağırır. Tamsayı argümanları, \"argv\" "
264+
"içinde adlandırılan fonksiyonu çağırır. Tamsayı argümanları, ``argv`` "
265265
"dizisinin diğer değerleridir. Bu programı :ref:`derler, <compiling>` ve "
266266
"bağlarsanız (bitmiş yürütülebilir dosyayı :program:`call` olarak "
267267
"adlandıralım) ve onu aşağıdaki gibi bir Python betiğini çalıştırmak için "

install/index.po

+16-16
Original file line numberDiff line numberDiff line change
@@ -324,9 +324,9 @@ msgid ""
324324
"`lib` (or :file:`lib.{plat}`) directory contains all Python modules (pure "
325325
"Python and extensions) that will be installed."
326326
msgstr ""
327-
"Burada <plat> mevcut işletim sistemi/donanım platformunun ve Python "
327+
"Burada ``<plat>`` mevcut işletim sistemi/donanım platformunun ve Python "
328328
"sürümünün kısa bir açıklamasına genişler. Yalnızca bir :file:`lib` dizini "
329-
"içeren ilk biçim, saf modül dağıtımları için kullanılır --yani, yalnızca "
329+
"içeren ilk biçim, \"saf modül dağıtımları\" için kullanılır---yani, yalnızca "
330330
"salt Python modüllerini içeren modül dağıtımları. Bir modül dağıtımı "
331331
"herhangi bir uzantı içeriyorsa (C/C++ ile yazılmış modüller), o zaman iki "
332332
"``<plat>`` dizinli ikinci form kullanılır. Bu durumda, :file:`temp.{plat}` "
@@ -378,7 +378,7 @@ msgstr ""
378378
"Python modülleri için standart konuma yüklenir . Bu konum, platforma ve "
379379
"Python'un kendisini nasıl oluşturduğunuza/kurduğunuza göre değişir. Unix'te "
380380
"(ve aynı zamanda Unix tabanlı olan macOS'ta), yüklenen modül dağıtımının saf "
381-
"Python olup olmadığına veya uzantılar (non pürse) içerip içermediğine de "
381+
"Python olup olmadığına veya uzantılar (\"non pürse\") içerip içermediğine de "
382382
"bağlıdır:"
383383

384384
#: install/index.rst:216
@@ -697,8 +697,8 @@ msgid ""
697697
"`/usr/local/`. This scheme can be used by anyone, regardless of the "
698698
"operating system they are installing for."
699699
msgstr ""
700-
"Ev planının arkasındaki fikir, Python modüllerinin kişisel bir zulasını "
701-
"oluşturmanız ve sürdürmenizdir. Bu şemanın adı, Unix'teki bir “ev” dizini "
700+
"\"Ev planı\"nın arkasındaki fikir, Python modüllerinin kişisel bir zulasını "
701+
"oluşturmanız ve sürdürmenizdir. Bu şemanın adı, Unix'teki bir \"ev\" dizini "
702702
"fikrinden türetilmiştir, çünkü bir Unix kullanıcısının ev dizininin :file:`/"
703703
"usr/` veya :file:`/usr'ye benzer bir düzene sahip olması alışılmadık bir "
704704
"durum değildir. /yerel/`. Bu şema, yükledikleri işletim sistemi ne olursa "
@@ -775,7 +775,7 @@ msgid ""
775775
"and home schemes come before. However, there are at least two known cases "
776776
"where the prefix scheme will be useful."
777777
msgstr ""
778-
"Prefix şeması, oluşturma/kurulum işlemini gerçekleştirmek için (yani "
778+
"\"Prefix şeması\", oluşturma/kurulum işlemini gerçekleştirmek için (yani "
779779
"kurulum komut dosyasını çalıştırmak için) bir Python kurulumu kullanmak "
780780
"istediğinizde, ancak modülleri farklı bir Python kurulumunun (veya farklı "
781781
"bir Python kurulumuna benziyor). Bu kulağa biraz olağandışı geliyorsa, bu--"
@@ -793,7 +793,7 @@ msgid ""
793793
msgstr ""
794794
"İlk olarak, birçok Linux dağıtımının Python'u daha geleneksel :file:`/usr/"
795795
"local` yerine :file:`/usr` içine koyduğunu düşünün. Bu tamamen uygundur, "
796-
"çünkü bu durumlarda Python yerel bir eklentiden ziyade sistemin bir "
796+
"çünkü bu durumlarda Python yerel bir eklentiden ziyade \"sistemin\" bir "
797797
"parçasıdır. Ancak, Python modüllerini kaynaktan kuruyorsanız, muhtemelen "
798798
"bunların :file:`/usr/lib/python2 yerine :file:`/usr/local/lib/python2.{X}` "
799799
"içine girmesini istersiniz.{X }`. Bu :: ile yapılabilir."
@@ -1067,7 +1067,7 @@ msgid ""
10671067
"is whatever your Python interpreter was installed with--- :file:`/usr/local/"
10681068
"python` in this case.)"
10691069
msgstr ""
1070-
"(Bu, ön ek şemasını kullanarak bir yükleme gerçekleştirir; burada önek, bu "
1070+
"(Bu, \"ön ek şemasını\" kullanarak bir yükleme gerçekleştirir; burada önek, bu "
10711071
"durumda Python yorumlayıcınız-- :file:`/usr/local/python` ile birlikte "
10721072
"yüklenir.)"
10731073

@@ -1353,8 +1353,8 @@ msgstr ""
13531353
"iki veya üç yapılandırma dosyasından birinde saklanabilir. Bu, yapılandırma "
13541354
"dosyalarının varsayılan değerleri geçersiz kılacağı ve komut satırının da "
13551355
"yapılandırma dosyalarını geçersiz kılacağı anlamına gelir. Ayrıca, birden "
1356-
"fazla yapılandırma dosyası geçerliyse, önceki dosyalardan alınan değerler "
1357-
"sonraki dosyalar tarafından geçersiz kılınır."
1356+
"fazla yapılandırma dosyası geçerliyse, \"önceki\" dosyalardan alınan değerler "
1357+
"\"sonraki\" dosyalar tarafından geçersiz kılınır."
13581358

13591359
#: install/index.rst:735
13601360
msgid "Location and names of config files"
@@ -1428,7 +1428,7 @@ msgid ""
14281428
"On all platforms, the \"personal\" file can be temporarily disabled by "
14291429
"passing the ``--no-user-cfg`` option."
14301430
msgstr ""
1431-
"Tüm platformlarda, `-no-user-cfg seçeneği geçilerek kişisel dosya geçici "
1431+
"Tüm platformlarda, ``-no-user-cfg`` seçeneği geçilerek \"kişisel\" dosya geçici "
14321432
"olarak devre dışı bırakılabilir."
14331433

14341434
#: install/index.rst:769
@@ -1475,7 +1475,7 @@ msgid ""
14751475
"Windows."
14761476
msgstr ""
14771477
"(Ayrıca not (1)'e bakın.) Python 1.6 ve sonraki sürümlerde, Python'un "
1478-
"varsayılan kurulum öneki :file:`C:\\\\Python` şeklindedir, bu nedenle "
1478+
"varsayılan \"kurulum öneki\" :file:`C:\\\\Python` şeklindedir, bu nedenle "
14791479
"sistem yapılandırma dosyası normalde :file:`C:\\\\Python\\ şeklindedir. "
14801480
"\\Lib\\\\distutils\\\\distutils.cfg`. Python 1.5.2 altında, varsayılan önek :"
14811481
"file:`C:\\\\Program Files\\\\Python` idi ve Distutils standart kitaplığın "
@@ -1509,7 +1509,7 @@ msgid ""
15091509
msgstr ""
15101510
"Distutils yapılandırma dosyalarının tümü aynı Syntax'a sahiptir. "
15111511
"Yapılandırma dosyaları bölümlere ayrılmıştır. Her Distutils komutu için bir "
1512-
"bölüm ve ayrıca her komutu etkileyen genel seçenekler için bir “genel” bölüm "
1512+
"bölüm ve ayrıca her komutu etkileyen genel seçenekler için bir ``global`` bölüm "
15131513
"vardır. Her bölüm, satır başına ``seçenek=değer`` olarak belirtilen bir "
15141514
"seçenekten oluşur."
15151515

@@ -1543,7 +1543,7 @@ msgid ""
15431543
"command:`build\\*` commands always forcibly rebuild all files with the "
15441544
"following:"
15451545
msgstr ""
1546-
"Varsayılan temel oluşturma dizinini geçersiz kılabilir ve :command:"
1546+
"Varsayılan \"temel oluşturma\" dizinini geçersiz kılabilir ve :command:"
15471547
"`build\\*` komutlarını aşağıdakilerle tüm dosyaları her zaman zorla yeniden "
15481548
"oluşturabilirsiniz:"
15491549

@@ -1587,7 +1587,7 @@ msgid ""
15871587
"See also the \"Reference\" section of the \"Distributing Python Modules\" "
15881588
"manual."
15891589
msgstr ""
1590-
"Ayrıca Python Modüllerini Dağıtma kılavuzunun Referans bölümüne bakın."
1590+
"Ayrıca \"Python Modüllerini Dağıtma\" kılavuzunun \"Referans\" bölümüne bakın."
15911591

15921592
#: install/index.rst:861
15931593
msgid "Building Extensions: Tips and Tricks"
@@ -1941,7 +1941,7 @@ msgid ""
19411941
"directory."
19421942
msgstr ""
19431943
"Yüklü bir :file:`python25.dll` dosyasının konumu, yükleme seçeneklerine ve "
1944-
"Windows sürümüne ve diline bağlı olacaktır. Sadece benim için kurulumda, "
1944+
"Windows sürümüne ve diline bağlı olacaktır. \"Sadece benim için\" kurulumda, "
19451945
"kurulum dizininin kökünde görünecektir. Paylaşılan bir kurulumda, sistem "
19461946
"dizininde bulunur."
19471947

requirements.txt

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ poutils
22
tqdm
33
sphinx-lint
44
pre-commit
5+
polib

scripts/format_check.py

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import collections
2+
import os
3+
import argparse
4+
import contextlib
5+
import glob
6+
import polib
7+
from pprint import pprint
8+
9+
10+
parser = argparse.ArgumentParser()
11+
parser.add_argument(
12+
"subject", nargs="?", default=None, help="Subject to check (file or directory)"
13+
)
14+
parser.add_argument("-t", "--threshold", type=int, default=85)
15+
args = parser.parse_args()
16+
17+
subject = os.path.abspath(
18+
os.path.join(
19+
os.path.dirname(__file__),
20+
"..",
21+
)
22+
)
23+
24+
is_file = False
25+
26+
with contextlib.suppress(TypeError):
27+
if os.path.isdir(args.subject):
28+
is_file = False
29+
subject = os.path.abspath(args.subject)
30+
31+
elif os.path.isfile(args.subject):
32+
is_file = True
33+
subject = (
34+
args.subject
35+
if os.path.isabs(args.subject)
36+
else os.path.join(subject, args.subject)
37+
)
38+
39+
else:
40+
print("Invalid subject, showing all files.")
41+
42+
DELIMITERS = ("``", "*")
43+
44+
45+
def has_delimiters(x):
46+
return any(d in x for d in DELIMITERS)
47+
48+
49+
def main(subject):
50+
subject = [subject] if is_file else glob.glob(f"{subject}**/**/*.po")
51+
files_with_differences = collections.defaultdict(list)
52+
53+
for _, pofilename in enumerate(subject):
54+
po = polib.pofile(pofilename)
55+
if po.percent_translated() < min(args.threshold, 100):
56+
continue
57+
58+
for entry in po:
59+
wordsid = wordsstr = []
60+
61+
if has_delimiters(entry.msgid):
62+
wordsid = [word for word in entry.msgid.split() if has_delimiters(word)]
63+
64+
if has_delimiters(entry.msgstr):
65+
wordsstr = [
66+
word for word in entry.msgstr.split() if has_delimiters(word)
67+
]
68+
69+
if len(wordsid) != len(wordsstr):
70+
key = pofilename
71+
files_with_differences[key].append(
72+
{
73+
"occurrences": entry.occurrences,
74+
"words": {
75+
"original": wordsid,
76+
"translated": wordsstr,
77+
},
78+
}
79+
)
80+
81+
return files_with_differences
82+
83+
84+
if __name__ == "__main__":
85+
pprint(main(subject))

scripts/progress.py

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import os
2+
import argparse
3+
import contextlib
4+
import glob
5+
import polib
6+
7+
8+
parser = argparse.ArgumentParser()
9+
parser.add_argument(
10+
"subject", nargs="?", default=None, help="Subject to check (file or directory)"
11+
)
12+
parser.add_argument("-c", "--completed", action="store_true")
13+
parser.add_argument("-t", "--threshold", type=int, default=90)
14+
args = parser.parse_args()
15+
16+
PO_DIR = os.path.abspath(
17+
os.path.join(
18+
os.path.dirname(__file__),
19+
"..",
20+
)
21+
)
22+
23+
is_file = False
24+
25+
with contextlib.suppress(TypeError):
26+
if os.path.isdir(args.subject):
27+
PO_DIR = os.path.abspath(args.subject)
28+
29+
elif os.path.isfile(args.subject):
30+
is_file = True
31+
args.subject = (
32+
args.subject
33+
if os.path.isabs(args.subject)
34+
else os.path.join(PO_DIR, args.subject)
35+
)
36+
37+
else:
38+
print("Invalid subject, showing all files.")
39+
40+
41+
def main():
42+
files = []
43+
if is_file:
44+
po = polib.pofile(args.subject)
45+
return [[args.subject.replace(PO_DIR, ""), po.percent_translated()]]
46+
47+
for pofilename in glob.glob(f"{PO_DIR}**/*.po"):
48+
po = polib.pofile(pofilename)
49+
files.append((pofilename.replace(PO_DIR, ""), po.percent_translated()))
50+
for pofilename in glob.glob(f"{PO_DIR}**/**/*.po"):
51+
po = polib.pofile(pofilename)
52+
files.append((pofilename.replace(PO_DIR, ""), po.percent_translated()))
53+
return files
54+
55+
56+
if __name__ == "__main__":
57+
results = [f"{file[0]}: {file[1]}%" for file in main()]
58+
59+
for result in results:
60+
if args.completed and int(result.split(" ")[1].replace("%", "")) > min(
61+
args.threshold, 100
62+
):
63+
print(result)
64+
elif not args.completed:
65+
print(result)

0 commit comments

Comments
 (0)