Участник:BsivkoBot/Перевод cite book
Описание
[править | править код]Мотивация
[править | править код]Шаблон {{cite book}} во многом не поддерживается и остаётся для совместимости. Зачастую он попадает в русскоязычный раздел в результате копирования с других разделов Википедии, где другие правила и другой шаблон {{cite book}}. Как следствие, остаётся много артефактов и несоответствий. Близким к нему является шаблон {{книга}}, который находится в актуальном состоянии, и более понятен русскоязычным участникам. Помимо всего, {{книга}} рекомендуется использовать вместо {{cite book}}. Идея заключается в преобразовании одного шаблона в другой с минимальным количеством ошибок и потери данных.
Шаблон {{книга}} выбран потому, что в нем более полно можно отразить параметры при переводе, и с меньшей потерей данных.
Реализация
[править | править код]Бот находит шаблон {{cite book}} или его аналоги и производит замену на {{книга}} согласно описанным ниже преобразованиям.
Описание преобразований при переводе:
Параметр | Описание | Тип | Статус | |
---|---|---|---|---|
authorN | authorN | author, first, last, authorlink, coauthors совместно в «автор». N - здесь и далее - пусто или число, проверяется до 300. | Строковый (без форматирования) | необязательный |
lastN | lastN | author, first, last, authorlink, coauthors совместно в «автор». | Строковый (без форматирования) | необязательный |
authorlinkN | authorlinkN | author, first, last, authorlink, coauthors совместно в «автор». Аналогично для author-linkN. | Строковый (без форматирования) | необязательный |
firstN | firstN | author, first, last, authorlink, coauthors совместно в «автор». | Строковый (без форматирования) | необязательный |
author | author | author, first, last, authorlink, coauthors совместно в «автор». | Строковый (без форматирования) | необязательный |
auteurN | auteurN | author, first, last, authorlink, coauthors совместно в «автор». | Строковый (без форматирования) | необязательный |
author-maskN | author-maskN | Удаляется. | Строковый (без форматирования) | необязательный |
displayauthors | displayauthors | Если значение «etal», то в конце списка авторов ставится «et al.». Далее удаляется (отстутствие аналога). Аналогично с 'display-authors'. | Строковый (без форматирования) | необязательный |
last-author-amp | last-author-amp | Удаляется. | Строковый (без форматирования) | необязательный |
translator-lastN | translator-lastN | (?) | Строковый (без форматирования) | необязательный |
translator-firstN | translator-firstN | (?) | Строковый (без форматирования) | необязательный |
translator-linkN | translator-linkN | (?) | Строковый (без форматирования) | необязательный |
translator-maskN | translator-maskN | (?) | Строковый (без форматирования) | необязательный |
date | date | date, year, month, day, совместно в «год», «месяц», «день». | Строковый (без форматирования) | необязательный |
year | year | date, year, month, day, совместно в «год», «месяц», «день». | Строковый (без форматирования) | необязательный |
month | month | date, year, month, day, совместно в «год», «месяц», «день». | Строковый (без форматирования) | необязательный |
orig-year | orig-year | Удаляется. По возможности переименовывается в «год». | Строковый (без форматирования) | необязательный |
année | année | Удаляется. По возможности переименовывается в «год». | Строковый (без форматирования) | необязательный |
ano | ano | Удаляется. По возможности переименовывается в «год». | Строковый (без форматирования) | необязательный |
origdate | origdate | Удаляется. По возможности переименовывается в «год». | Строковый (без форматирования) | необязательный |
chapter | chapter | Переименование в «часть». | Неизвестно | необязательный |
part | part | Переименование в «часть». | Неизвестно | необязательный |
section | section | Переименование в «часть». | Неизвестно | необязательный |
chaptertitle | chaptertitle | Переименование в «часть». | Неизвестно | необязательный |
titre chapitre | titre chapitre | Переименование в «часть». | Неизвестно | необязательный |
script-chapter | script-chapter | Удаляется. | Неизвестно | необязательный |
trans-chapter | trans-chapter | Удаляется. | Неизвестно | необязательный |
chapter-url | chapter-url | Переименование в «ссылка часть». | Неизвестно | необязательный |
chapterurl | chapterurl | Переименование в «ссылка часть». | Неизвестно | необязательный |
chapter-format | chapter-format | Удаляется. | Неизвестно | необязательный |
editor-firstN | editor-firstN | Переименование в «ответственныйN» совместно с editor-lastN и «editor-linkN». | Строковый (без форматирования) | необязательный |
editor-lastN | editor-lastN | Переименование, см. «editor-firstN». | Строковый (без форматирования) | необязательный |
editor-linkN | editor-linkN | Переименование, см. «editor-firstN». | Строковый (без форматирования) | необязательный |
directeur-firstN | directeur-firstN | Переименование в «ответственныйN» совместно с editor-lastN и «editor-linkN». | Строковый (без форматирования) | необязательный |
directeur-lastN | directeur-lastN | Переименование, см. «editor-firstN». | Строковый (без форматирования) | необязательный |
directeur-linkN | directeur-linkN | Переименование, см. «editor-firstN». | Строковый (без форматирования) | необязательный |
editors | editors | Переименование в «ответственныйN» совместно с editor-lastN и «editor-linkN». | Строковый (без форматирования) | необязательный |
editorial | editorial | Переименование в «ответственныйN» совместно с editor-lastN и «editor-linkN». | Строковый (без форматирования) | необязательный |
veditors | veditors | Переименование в «ответственныйN» совместно с editor-lastN и «editor-linkN». | Строковый (без форматирования) | необязательный |
éditeur | éditeur | Переименование в «издательство». | Строковый (без форматирования) | необязательный |
translator | translator | Переименование в «ответственный2». | Строковый (без форматирования) | необязательный |
display-editors | display-editors | Удаляется. | Неизвестно | необязательный |
title | title | Переименование в «заглавие». | Строковый (без форматирования) | необязательный |
titre | titre | Переименование в «заглавие». | Строковый (без форматирования) | необязательный |
título | título | Переименование в «заглавие». | Строковый (без форматирования) | необязательный |
script-title | script-title | Переименование в «оригинал». | Строковый (без форматирования) | необязательный |
trans-title | trans-title | Удаляется. | Неизвестно | необязательный |
quotes | quotes | Удаляется. | Строковый (без форматирования) | необязательный |
curly | curly | Удаляется. | Неизвестно | необязательный |
lire en ligne | lire en ligne | Переименование в «ссылка». | Строковый (без форматирования) | необязательный |
url | url | Переименование в «ссылка». | Строковый (без форматирования) | необязательный |
link | link | Переименование в «ссылка». | Строковый (без форматирования) | необязательный |
format | format | Удаляется. | Неизвестно | необязательный |
type | type | Удаляется. | Строковый (без форматирования) | необязательный |
series | series | Переименование в «серия». | Строковый (без форматирования) | необязательный |
language | language | Переименование в «язык». Значение переводится в [[ISO 639]] формат (оставляется 2 или 3 символа; сначала 3, далее если последний '-', то он убирается). Т.е. «en-GB» → «en». | Строковый (без форматирования) | необязательный |
lang | lang | Переименование в «язык»; аналогично ''language''. | Строковый (без форматирования) | необязательный |
volume | volume | Переименование в «том». | Строковый (без форматирования) | необязательный |
issue | issue | Переименование в «номер». (?) | Строковый (без форматирования) | необязательный |
edition | edition | Переименование в «издание». | Строковый (без форматирования) | необязательный |
location | location | Переименование в «место». | Строковый (без форматирования) | необязательный |
city | city | Переименование в «место». | Строковый (без форматирования) | необязательный |
ort | ort | Переименование в «место». | Строковый (без форматирования) | необязательный |
lieu | lieu | Переименование в «место». | Строковый (без форматирования) | необязательный |
publicationplace | publicationplace | Переименование в «место». | Строковый (без форматирования) | необязательный |
publisher | publisher | Переименование в «издательство». | Строковый (без форматирования) | необязательный |
verlag | verlag | Переименование в «издательство». | Строковый (без форматирования) | необязательный |
editora | editora | Переименование в «издательство». | Строковый (без форматирования) | необязательный |
published | published | Переименование в «издательство». | Строковый (без форматирования) | необязательный |
place | place | Переименование в «место». | Строковый (без форматирования) | необязательный |
publication-place | publication-place | Переименование в «место». | Строковый (без форматирования) | необязательный |
pages | pages | Переименование в «страницы». | Строковый (без форматирования) | необязательный |
page | page | Переименование в «страницы». | Строковый (без форматирования) | необязательный |
at | at | Переименование в «страницы». | Строковый (без форматирования) | необязательный |
allpages | allpages | Переименование в «страниц». | Строковый (без форматирования) | необязательный |
paginas | paginas | Переименование в «страницы». | Строковый (без форматирования) | необязательный |
pp | pp | Переименование в «страницы». | Строковый (без форматирования) | необязательный |
p | p | Переименование в «страницы». | Строковый (без форматирования) | необязательный |
passage | passage | Переименование в «страницы». | Строковый (без форматирования) | необязательный |
seiten | seiten | Переименование в «страницы». | Строковый (без форматирования) | необязательный |
nopp | nopp | Удаляется. | Строковый (без форматирования) | необязательный |
arxiv | arxiv | Без изменений. | Строковый (без форматирования) | необязательный |
asin | asin | Без изменений. | Строковый (без форматирования) | необязательный |
doi | doi | Без изменений. | Строковый (без форматирования) | необязательный |
doi-broken-date | doi-broken-date | Удаляется. | Строковый (без форматирования) | необязательный |
issn | issn | Без изменений. | Строковый (без форматирования) | необязательный |
pmid | pmid | Без изменений. | Строковый (без форматирования) | необязательный |
bibcode | bibcode | Без изменений. | Строковый (без форматирования) | необязательный |
id | id | Без изменений. | Строковый (без форматирования) | необязательный |
accessdate | accessdate | Удаляется. | Строковый (без форматирования) | необязательный |
access-date | access-date | Удаляется. | Строковый (без форматирования) | необязательный |
quote | quote | Переименование в «цитата». | Строковый (без форматирования) | необязательный |
référence | référence | Переименование в «цитата». | Строковый (без форматирования) | необязательный |
via | via | Удаляется. | Строковый (без форматирования) | необязательный |
archive-url | archive-url | Переименование в «ссылка». Это переименование более приоритетно, чем url. То есть, если есть «ссылка» или «url», то значение «archive-url»/«archiveurl» записывает поверх «ссылка» (прежние значения «ссылка»/«url» пропадают). | Строковый (без форматирования) | необязательный |
archive-date | archive-date | Переименование в «дата ссылки». | Строковый (без форматирования) | необязательный |
registration | registration | Удаляется. | Строковый (без форматирования) | необязательный |
subscription | subscription | Удаляется. | Строковый (без форматирования) | необязательный |
lay-summary | lay-summary | Удаляется. | Строковый (без форматирования) | необязательный |
lay-source | lay-source | Удаляется. | Строковый (без форматирования) | необязательный |
lay-date | lay-date | Удаляется. | Строковый (без форматирования) | необязательный |
name-list-format | name-list-format | Удаляется. | Строковый (без форматирования) | необязательный |
mode | mode | Удаляется. | Строковый (без форматирования) | необязательный |
postscript | postscript | Удаляется. | Строковый (без форматирования) | необязательный |
agency | agency | Удаляется. | Строковый (без форматирования) | необязательный |
url-status | url-status | Удаляется. | Строковый (без форматирования) | необязательный |
title-link | title-link | Удаляется. | Строковый (без форматирования) | необязательный |
version | version | Удаляется. | Строковый (без форматирования) | необязательный |
contribution | contribution | Удаляется. | Строковый (без форматирования) | необязательный |
author-separator | author-separator | Удаляется. | Неизвестно | необязательный |
authorformat | authorformat | Удаляется. | Неизвестно | необязательный |
authormask | authormask | Удаляется. | Неизвестно | необязательный |
consulté le | consulté le | Удаляется. | Неизвестно | необязательный |
isbn-status | isbn-status | Удаляется. | Неизвестно | необязательный |
isbn status | isbn status | Удаляется. | Неизвестно | необязательный |
isbn13 | isbn13 | Переименование в «isbn». | Строковый (без форматирования) | необязательный |
isbn10 | isbn10 | Переименование в «isbn». | Строковый (без форматирования) | необязательный |
isbn9 | isbn9 | Переименование в «isbn». | Строковый (без форматирования) | необязательный |
ref | ref | Без изменений. | Строковый (без форматирования) | необязательный |
isbn | isbn | Без изменений. | Строковый (без форматирования) | необязательный |
Для параметров «издательство», «заглавие», «цитата», «место», «оригинал», «издание», «автор», «ответственный» проверяется наличие красных ссылок. Если такая есть, то проверяется, есть ли англоязычная статья. Если есть, то линкуется либо на ru-статью по ВД, если такой нет, то через шаблон на англоязычную.
Если язык неизвестен, то проставляется поле язык=und
(см. {{Ref-und}}).
Исходный код
[править | править код]См. также Участник:BsivkoBot/Перевод/Исходный_код
import copy import mwparserfromhell from bot_logging.log import log_warning_json from template_translating.common import process_author, process_editor, try_to_detect_language, process_date from text_processing.languages import lang_to_iso_639 from text_processing.wikilink import wikilink_to_text, make_wikilink from wiki_requests.english_wiki_links import get_end_target_page, process_text_with_likely_english_links from wiki_requests.get_wikidata import get_wikidata_item from wiki_requests.site import en_site from wiki_template_processing.endings_format import process_leading_and_ending_param_values, detect_format_endings from wiki_template_processing.template_collector import one_of_templates_or_their_redirects_is_present_en, \ template_or_its_redirect_is_present from wiki_template_processing.template_params import adjust_template_params, names_to_lower_case, delete_params, \ search_of_english_wikilinks, check_unknown_fields, log_unknown_names, remove_equal CITE_BOOK_NAME = "Шаблон:cite book" TASK_DESCRIPTION_CITE_BOOK_TRANSLATING = u"перевод cite book" NUMBER_OF_AUTHORS = 300 def simple_mapping(template): name_map = { 'language': 'язык', 'lang': 'язык', 'title': 'заглавие', 'titre': 'заглавие', 'название': 'заглавие', 'título': 'заглавие', 'url': 'ссылка', 'lire en ligne': 'ссылка', 'link': 'ссылка', 'chapter': 'часть', 'chaptertitle': 'часть', 'titre chapitre': 'часть', 'part': 'часть', 'section': 'часть', 'chapter-url': 'ссылка часть', 'chapterurl': 'ссылка часть', 'issue': 'номер', 'volume': 'том', 'series': 'серия', 'edition': 'издание', 'type': 'вид', 'verlag': 'издательство', 'publisher': 'издательство', 'publiser': 'издательство', 'editora': 'издательство', 'published': 'издательство', 'pages': 'страницы', 'allpages': 'страниц', 'page': 'страницы', 'paginas': 'страницы', 'at': 'страницы', 'pp': 'страницы', 'pages totales': 'страницы', 'p': 'страницы', 'passage': 'страницы', 'seiten': 'страницы', 'location': 'место', 'local': 'место', 'city': 'место', 'ort': 'место', 'lieu': 'место', 'place': 'место', 'publication-place': 'место', 'publicationplace': 'место', 'archive-url': 'архив', 'archive-date': 'дата ссылки', 'archiveurl': 'архив', 'archivedate': 'дата ссылки', 'work': 'издание', 'periodical': 'издание', 'wydanie': 'издание', 'wolumin': 'том', 'quote': 'цитата', 'description': 'цитата', 'référence': 'цитата', 'authors': 'author', 'auteur': 'author', 'coauthor': 'coauthors', 'adres czasopisma': 'место', 'czasopismo': 'издание', 'datepublished': 'date', 'editor': 'ответственный', 'editors': 'ответственный', 'editorial': 'ответственный', 'veditors': 'ответственный', 'éditeur': 'издательство', 'translator': 'ответственный2', 'script-title': 'оригинал', 'miejsce': 'место', 'jezyk': 'язык', 'idioma': 'язык', 'year': 'год', 'année': 'год', 'ano': 'год', 'origdate': 'год', 'origmonth': 'месяц', 'isbn13': 'isbn', 'isbn10': 'isbn', 'isbn9': 'isbn' } years = ['origyear', 'orig-year', 'publication-date'] for year in years: if template.has('год'): break if template.has(year): template.add('год', template.get(year).value) n = "" i = 0 while i < 10: name_map['author-link' + n] = 'authorlink' + n name_map['author' + n + '-link'] = 'authorlink' + n name_map['author link' + n] = 'authorlink' + n name_map['author link' + n] = 'authorlink' + n name_map['editor' + n] = 'editor-last' + n name_map['editor' + n + '-last'] = 'editor-last' + n name_map['editor' + n + '-first'] = 'editor-first' + n name_map['directeur' + n] = 'editor-last' + n name_map['directeur' + n + '-last'] = 'editor-last' + n name_map['directeur' + n + '-first'] = 'editor-first' + n name_map['editor-link' + n] = 'editorlink' + n name_map['editor' + n + '-link'] = 'editorlink' + n name_map['editor link' + n] = 'editorlink' + n i += 1 n = str(i) for key, val in name_map.items(): if template.has(key): template.get(key).name = val if template.has("архив"): if template.has("ссылка"): template.get("ссылка").value = template.get("архив").value else: template.add("ссылка", template.get("архив").value) template.remove("архив") return def detect_publisher(language, title, text): infoboxes = ["infobox publisher"] box_is_present = one_of_templates_or_their_redirects_is_present_en(text, infoboxes) if box_is_present: return True item = get_wikidata_item(language, title) try: p31 = item.claims.get('P31') if p31 is not None: for i in p31: try: if str(i.target._link) == "[[Q1320047]]": return True except AttributeError: continue try: if str(i.target._link) == "[[Q2085381]]": return True except AttributeError: continue except AttributeError: return False return False def publisher_wikilink_processing(template): if template.has('издательство'): publisher_name = str(template.get("издательство").value).strip() publisher_name = wikilink_to_text(publisher_name) publisher_page = get_end_target_page(en_site(), publisher_name) if publisher_page is None or publisher_page.text is None or publisher_page.text == "": return if not detect_publisher("en", publisher_page._link._text, publisher_page.text): return publisher_en_text_link = make_wikilink(str(publisher_page._link._text), publisher_name) text = process_text_with_likely_english_links(publisher_en_text_link) template.get('издательство').value = text return template def form_to_delete(): result = ['display-authors', 'displayauthors', 'last-author-amp', 'script-chapter', 'trans-chapter', 'chapter-format', 'origyear', 'orig-year', 'publication-date', 'author-separator', 'display-editors', 'displayeditors', 'trans-title', 'curly', 'df', 'format', 'deadurl', 'dead-url', 'unused_data', 'agency', 'url-status', 'title-link', 'lastauthoramp', 'authorformat', 'others', 'nopp', 'accessdate', 'access-date', 'doi-broken-date', 'registration', 'subscription', 'data', 'department', 'version', 'website', 'consulté le', 'authormask', 'laydate', 'laysource', 'laysummary', 'lay-date', 'lay-source', 'lay-summary', 'separator', 'number', 'trans-title', 'contribution', 'isbn status', 'isbn-status', 'trans_title', 'name', 'bibcode-access', 'doi-access', 'hdl-access', 'jstor-access', 'ol-access', 'osti-access', 'via', 'registration', 'subscription', 'url-access', 'quotes', 'name-list-format', 'mode', 'postscript'] n = "" i = 0 while i < NUMBER_OF_AUTHORS: result.append('author-mask' + n) result.append('translator-last' + n) result.append('translator-first' + n) result.append('translator-link' + n) result.append('translator-mask' + n) result.append('editor-mask' + n) i += 1 n = str(i) return result def process_date_cite_book(template): process_date(template) if template.has("число"): template.get("число").name = "день" return def process_one_template(template, names, title, unknown_names): matches = False for name in names: if template.name.matches(name): matches = True break if not matches: return template adjust_template_params(template) names_to_lower_case(template) remove_equal(template) force_etal_authors = False force_etal_editors = False if template.has('display-authors'): if template.get("display-authors").value.strip() == 'etal': force_etal_authors = True if template.has('displayauthors'): if template.get("displayauthors").value.strip() == 'etal': force_etal_authors = True if template.has('displayeditors'): if template.get("displayeditors").value.strip() == 'etal': force_etal_editors = True if template.has('display-editors'): if template.get("display-editors").value.strip() == 'etal': force_etal_editors = True if template.has('last') and not template.has('ref'): template.add('ref', template.get('last').value) if template.has('last') and template.has('ref') and str(template.get('ref').value).strip() == 'harv': template.get('ref').value = str(template.get('last').value) delete_params(template, form_to_delete()) simple_mapping(template) if not template.has('язык') and template.has('заглавие'): template_title = template.get('заглавие').value.strip() # 3 attempts because of euristic alg lang_name = try_to_detect_language(template_title, length=40, title=title) if lang_name == "": lang_name = try_to_detect_language(template_title, length=40, title=title) if lang_name == "": lang_name = try_to_detect_language(template_title, length=40, title=title) if lang_name != "": template.add('язык', lang_name) if template.has('язык'): template.get("язык").value = lang_to_iso_639(template.get("язык").value) if not template.has('язык'): template.add('язык', "und") process_author(template, force_etal_authors, title) process_editor(template, force_etal_editors, title) process_date_cite_book(template) publisher_wikilink_processing(template) search_of_english_wikilinks(template, ["издательство", "заглавие", "цитата", "место", "оригинал", "издание", "автор", "ответственный"]) check_unknown_fields(template, unknown_names, form_known_fields()) process_leading_and_ending_param_values(template) template.name = "книга" + detect_format_endings(template) return template def form_known_fields(): result = ["язык", "автор", "doi", "издательство", "заглавие", "issn", "id", "цитата", "вид", "ответственный", "том", "год", "isbn", "страницы", "число", "arxiv", "asin", "ref", "место", "номер", 'deadlink', "ссылка", "bibcode", "месяц", "оригинал", "издание", "pmid", "archiveurl", "archivedate", 'hdl', 'citeseerx', 'jfm', 'eissn', 'jstor', 'lccn', 'mr', 'oclc', 'ol', 'osti', 'pmc', 'rfc', 'ssrn', 'pmcid', "часть", "ссылка часть", "архив", "дата архива", "основной автор", "день", "выпуск", "страниц", "серия", "дата ссылки", 'тираж', 'ответственный2'] n = "" i = 0 while i < NUMBER_OF_AUTHORS: result.append('автор' + n) result.append('автор' + n + " ссылка") result.append('автор' + n + " имя") i += 1 n = str(i) return result # process all article def translate_cite_book_for_article(text, names, title="unknown"): if template_or_its_redirect_is_present(text, "sfnp"): return text const_names = ["cite_book", "Cite book", "cite book", "cite book", "Cite book", "cite book "] for i in const_names: if not (i in names): names.append(i) for index, item in enumerate(names): if names[index][:7] == "Шаблон:": names[index] = names[index][7:] unknown_names = {} data = { 'заглавие': [], 'издание': [], 'автор': [], } parsed = mwparserfromhell.parse(text) for template in parsed.ifilter_templates(): if template.has("quote"): continue process_one_template(template, names, title, unknown_names) to_data = ["заглавие", "издание", "автор"] for i in to_data: if template.has(i): data[i].append(str(template.get(i).value)) output = str(parsed) log_unknown_names(unknown_names, title, "cite book", data = data) return output
Тестирование
[править | править код]from external_sources.add import get_all_redirects_to_page from template_translating.cite_book.translate_cite_book_for_article import CITE_BOOK_NAME, \ translate_cite_book_for_article def test_translate_cite_book_for_article(): names = get_all_redirects_to_page(CITE_BOOK_NAME) names.append(CITE_BOOK_NAME) text = translate_cite_book_for_article( '{{cite book| title = Simple Name | year = 2006 | lang = de}}', names) assert "{{книга" in text assert "cite book" not in text assert "заглавие=" in text assert "год=" in text assert "Simple Name" in text text = translate_cite_book_for_article( '{{cite book| title = ABC | date = 10 november 2006 | lang = en | author = QWE}}', names) assert "{{книга" in text assert "cite book" not in text assert "день=10" in text assert "год=2006" in text assert "месяц=11" in text assert "ABC" in text assert "автор=" in text text = translate_cite_book_for_article( '{{cite book| title =Oil Spill Case Histories 1967–1991, Report No. HMRAD 92-11| publisher =[[National Oceanic and Atmospheric Administration]]| month =September | year =1992| location =[[Seattle]] | page =80| url =http://response.restoration.noaa.gov/book_shelf/26_spilldb.pdf| format =PDF| accessdate= 2008-03-10|archive-url=ZXC|archive-date=2010 }}', names) assert "{{книга" in text assert "дата ссылки=2010" in text assert "ссылка=ZXC" in text text = translate_cite_book_for_article( '{{cite book|last=Harris,|first=Colin S.|title=Engineering Geology of the Channel Tunnel|url=https://books.google.com/books?id=Ui_qSldWobYC&pg=PA71|accessdate=15 December 2015|date=1996-01-01|publisher=Thomas Telford|isbn=9780727720450|page=71}}', names) assert "автор имя" not in text text = translate_cite_book_for_article( '{{cite book| title =Oil|archive-url=ZXC|archive-date=2010|url=ABC }}', names) assert "ссылка=ZXC" in text assert "архив" not in text text = translate_cite_book_for_article( '{{cite book| title = ABC | date = 10 november 2006 | lang = tr | author = QWE}}', names) assert "книга" not in text text = translate_cite_book_for_article( '{{cite book| title = ABC | date = 10 november 2006 | lang = tr | author = QWE}} {{cite book| title = ABC | lang = ru }}', names) assert text.count("книга") == 1 text = translate_cite_book_for_article( '{{cite book |author1= Kenneth M. Setton|author2=Marshall W. Baldwin|title=A History of the Crusades: The First Hundred Years|url=https://books.google.com/books?id=RfO1J6hjcdgC&pg=PA104|accessdate=26 February 2019|year=1969|publisher=Univ of Wisconsin Press|isbn=978-0-299-04834-1|page=104}}', names) assert text.count("Нп3") == 1 text = translate_cite_book_for_article( '{{cite book | last = Cohen | first = Scott | authorlink = | origyear = 1900 | year = 1984 | title = Zap! The Rise and Fall of Atari | publisher = McGraw Hill Book Company | isbn = 0-07-011543-5 }}', names) assert text.count("год") == 1
Состояние и развитие
[править | править код]- Тестируется. Пробный запуск на Final Fantasy X 15:32, 26 ноября 2018 (UTC)
- Развитие заморожено — шаблоны {{книга}} и {{публикация}} не могут полноценно поддержать перевод. Например, в первом нет языка, библиотечных ресурсов. Во языки не все, нет соответствия в автор-основной автор, автор линк. И это только в первом приближении. 22:04, 27 ноября 2018 (UTC)
- Переход на конвертацию в шаблон {{книга}}. Bsivko (обс.) 19:22, 3 июня 2019 (UTC)
- Первые запуски на пробных примерах. Bsivko (обс.) 10:33, 4 июня 2019 (UTC)
- Заменено представление неизвестного языка.
mis
означает Uncoded languages,und
- Undetermined; использованиеund
вместоmis
более верно. Bsivko (обс.) 15:56, 8 июня 2019 (UTC) - Добавлено сведение ссылок к параметру ссылки (включая архив). Пример. Bsivko (обс.) 16:43, 8 июня 2019 (UTC)
- В связи с введением языковых параметров в шаблоне {{книга}} бот переведён в состояние попутной обработки cite book и под наблюдением этого процесса. Бот обрабатывает только cite book, если для него определен один из языков
en, de, ru, und, mis
. Включено преобразование в русскоязычный формат выраженийallpages/kolonnen
→страницы/столбцы
Bsivko (обс.) 11:06, 20 декабря 2019 (UTC) - Отключена обработка шаблонов с
quote
. В процессе переведено больше половины шаблонов на {{книга}}, во время которого найден ряд новых параметров и обновлена для них обработка. Bsivko (обс.) 14:18, 28 декабря 2019 (UTC) - Исправлено поведение при указании авторов author/first вместо author/last (подробности). Bsivko (обс.) 15:15, 3 января 2020 (UTC)