| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -261,7 +261,7 @@ msgid "" | |||
| 261 | 261 | "a Python script, such as:" | |
| 262 | 262 | msgstr "" | |
| 263 | 263 | "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`` " | ||
| 265 | 265 | "dizisinin diğer değerleridir. Bu programı :ref:`derler, <compiling>` ve " | |
| 266 | 266 | "bağlarsanız (bitmiş yürütülebilir dosyayı :program:`call` olarak " | |
| 267 | 267 | "adlandıralım) ve onu aşağıdaki gibi bir Python betiğini çalıştırmak için " | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -324,9 +324,9 @@ msgid "" | |||
| 324 | 324 | "`lib` (or :file:`lib.{plat}`) directory contains all Python modules (pure " | |
| 325 | 325 | "Python and extensions) that will be installed." | |
| 326 | 326 | 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 " | ||
| 328 | 328 | "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 " | ||
| 330 | 330 | "salt Python modüllerini içeren modül dağıtımları. Bir modül dağıtımı " | |
| 331 | 331 | "herhangi bir uzantı içeriyorsa (C/C++ ile yazılmış modüller), o zaman iki " | |
| 332 | 332 | "``<plat>`` dizinli ikinci form kullanılır. Bu durumda, :file:`temp.{plat}` " | |
@@ -378,7 +378,7 @@ msgstr "" | |||
| 378 | 378 | "Python modülleri için standart konuma yüklenir . Bu konum, platforma ve " | |
| 379 | 379 | "Python'un kendisini nasıl oluşturduğunuza/kurduğunuza göre değişir. Unix'te " | |
| 380 | 380 | "(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 " | ||
| 382 | 382 | "bağlıdır:" | |
| 383 | 383 | ||
| 384 | 384 | #: install/index.rst:216 | |
@@ -697,8 +697,8 @@ msgid "" | |||
| 697 | 697 | "`/usr/local/`. This scheme can be used by anyone, regardless of the " | |
| 698 | 698 | "operating system they are installing for." | |
| 699 | 699 | 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 " | ||
| 702 | 702 | "fikrinden türetilmiştir, çünkü bir Unix kullanıcısının ev dizininin :file:`/" | |
| 703 | 703 | "usr/` veya :file:`/usr'ye benzer bir düzene sahip olması alışılmadık bir " | |
| 704 | 704 | "durum değildir. /yerel/`. Bu şema, yükledikleri işletim sistemi ne olursa " | |
@@ -775,7 +775,7 @@ msgid "" | |||
| 775 | 775 | "and home schemes come before. However, there are at least two known cases " | |
| 776 | 776 | "where the prefix scheme will be useful." | |
| 777 | 777 | 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 " | ||
| 779 | 779 | "kurulum komut dosyasını çalıştırmak için) bir Python kurulumu kullanmak " | |
| 780 | 780 | "istediğinizde, ancak modülleri farklı bir Python kurulumunun (veya farklı " | |
| 781 | 781 | "bir Python kurulumuna benziyor). Bu kulağa biraz olağandışı geliyorsa, bu--" | |
@@ -793,7 +793,7 @@ msgid "" | |||
| 793 | 793 | msgstr "" | |
| 794 | 794 | "İlk olarak, birçok Linux dağıtımının Python'u daha geleneksel :file:`/usr/" | |
| 795 | 795 | "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 " | ||
| 797 | 797 | "parçasıdır. Ancak, Python modüllerini kaynaktan kuruyorsanız, muhtemelen " | |
| 798 | 798 | "bunların :file:`/usr/lib/python2 yerine :file:`/usr/local/lib/python2.{X}` " | |
| 799 | 799 | "içine girmesini istersiniz.{X }`. Bu :: ile yapılabilir." | |
@@ -1067,7 +1067,7 @@ msgid "" | |||
| 1067 | 1067 | "is whatever your Python interpreter was installed with--- :file:`/usr/local/" | |
| 1068 | 1068 | "python` in this case.)" | |
| 1069 | 1069 | 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 " | ||
| 1071 | 1071 | "durumda Python yorumlayıcınız-- :file:`/usr/local/python` ile birlikte " | |
| 1072 | 1072 | "yüklenir.)" | |
| 1073 | 1073 | ||
@@ -1353,8 +1353,8 @@ msgstr "" | |||
| 1353 | 1353 | "iki veya üç yapılandırma dosyasından birinde saklanabilir. Bu, yapılandırma " | |
| 1354 | 1354 | "dosyalarının varsayılan değerleri geçersiz kılacağı ve komut satırının da " | |
| 1355 | 1355 | "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." | ||
| 1358 | 1358 | ||
| 1359 | 1359 | #: install/index.rst:735 | |
| 1360 | 1360 | msgid "Location and names of config files" | |
@@ -1428,7 +1428,7 @@ msgid "" | |||
| 1428 | 1428 | "On all platforms, the \"personal\" file can be temporarily disabled by " | |
| 1429 | 1429 | "passing the ``--no-user-cfg`` option." | |
| 1430 | 1430 | 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 " | ||
| 1432 | 1432 | "olarak devre dışı bırakılabilir." | |
| 1433 | 1433 | ||
| 1434 | 1434 | #: install/index.rst:769 | |
@@ -1475,7 +1475,7 @@ msgid "" | |||
| 1475 | 1475 | "Windows." | |
| 1476 | 1476 | msgstr "" | |
| 1477 | 1477 | "(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 " | ||
| 1479 | 1479 | "sistem yapılandırma dosyası normalde :file:`C:\\\\Python\\ şeklindedir. " | |
| 1480 | 1480 | "\\Lib\\\\distutils\\\\distutils.cfg`. Python 1.5.2 altında, varsayılan önek :" | |
| 1481 | 1481 | "file:`C:\\\\Program Files\\\\Python` idi ve Distutils standart kitaplığın " | |
@@ -1509,7 +1509,7 @@ msgid "" | |||
| 1509 | 1509 | msgstr "" | |
| 1510 | 1510 | "Distutils yapılandırma dosyalarının tümü aynı Syntax'a sahiptir. " | |
| 1511 | 1511 | "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 " | ||
| 1513 | 1513 | "vardır. Her bölüm, satır başına ``seçenek=değer`` olarak belirtilen bir " | |
| 1514 | 1514 | "seçenekten oluşur." | |
| 1515 | 1515 | ||
@@ -1543,7 +1543,7 @@ msgid "" | |||
| 1543 | 1543 | "command:`build\\*` commands always forcibly rebuild all files with the " | |
| 1544 | 1544 | "following:" | |
| 1545 | 1545 | 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:" | ||
| 1547 | 1547 | "`build\\*` komutlarını aşağıdakilerle tüm dosyaları her zaman zorla yeniden " | |
| 1548 | 1548 | "oluşturabilirsiniz:" | |
| 1549 | 1549 | ||
@@ -1587,7 +1587,7 @@ msgid "" | |||
| 1587 | 1587 | "See also the \"Reference\" section of the \"Distributing Python Modules\" " | |
| 1588 | 1588 | "manual." | |
| 1589 | 1589 | 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." | ||
| 1591 | 1591 | ||
| 1592 | 1592 | #: install/index.rst:861 | |
| 1593 | 1593 | msgid "Building Extensions: Tips and Tricks" | |
@@ -1941,7 +1941,7 @@ msgid "" | |||
| 1941 | 1941 | "directory." | |
| 1942 | 1942 | msgstr "" | |
| 1943 | 1943 | "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, " | ||
| 1945 | 1945 | "kurulum dizininin kökünde görünecektir. Paylaşılan bir kurulumda, sistem " | |
| 1946 | 1946 | "dizininde bulunur." | |
| 1947 | 1947 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -2,3 +2,4 @@ poutils | |||
| 2 | 2 | tqdm | |
| 3 | 3 | sphinx-lint | |
| 4 | 4 | pre-commit | |
| 5 | + polib | ||
| Original file line number | Diff line number | Diff 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)) | ||
| Original file line number | Diff line number | Diff 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) | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments