Участник:BsivkoBot/Перевод cite book

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Шаблон {{cite book}} во многом не поддерживается и остаётся для совместимости. Зачастую он попадает в русскоязычный раздел в результате копирования с других разделов Википедии, где другие правила и другой шаблон {{cite book}}. Как следствие, остаётся много артефактов и несоответствий. Близким к нему является шаблон {{книга}}, который находится в актуальном состоянии, и более понятен русскоязычным участникам. Помимо всего, {{книга}} рекомендуется использовать вместо {{cite book}}. Идея заключается в преобразовании одного шаблона в другой с минимальным количеством ошибок и потери данных.

Шаблон {{книга}} выбран потому, что в нем более полно можно отразить параметры при переводе, и с меньшей потерей данных.

Реализация

[править | править код]

Бот находит шаблон {{cite book}} или его аналоги и производит замену на {{книга}} согласно описанным ниже преобразованиям.

Описание преобразований при переводе:

Параметры шаблона

ПараметрОписаниеТипСтатус
authorNauthorN

author, first, last, authorlink, coauthors совместно в «автор». N - здесь и далее - пусто или число, проверяется до 300.

Строковый (без форматирования)необязательный
lastNlastN

author, first, last, authorlink, coauthors совместно в «автор».

Строковый (без форматирования)необязательный
authorlinkNauthorlinkN

author, first, last, authorlink, coauthors совместно в «автор». Аналогично для author-linkN.

Строковый (без форматирования)необязательный
firstNfirstN

author, first, last, authorlink, coauthors совместно в «автор».

Строковый (без форматирования)необязательный
authorauthor

author, first, last, authorlink, coauthors совместно в «автор».

Строковый (без форматирования)необязательный
auteurNauteurN

author, first, last, authorlink, coauthors совместно в «автор».

Строковый (без форматирования)необязательный
author-maskNauthor-maskN

Удаляется.

Строковый (без форматирования)необязательный
displayauthorsdisplayauthors

Если значение «etal», то в конце списка авторов ставится «et al.». Далее удаляется (отстутствие аналога). Аналогично с 'display-authors'.

Строковый (без форматирования)необязательный
last-author-amplast-author-amp

Удаляется.

Строковый (без форматирования)необязательный
translator-lastNtranslator-lastN

(?)

Строковый (без форматирования)необязательный
translator-firstNtranslator-firstN

(?)

Строковый (без форматирования)необязательный
translator-linkNtranslator-linkN

(?)

Строковый (без форматирования)необязательный
translator-maskNtranslator-maskN

(?)

Строковый (без форматирования)необязательный
datedate

date, year, month, day, совместно в «год», «месяц», «день».

Строковый (без форматирования)необязательный
yearyear

date, year, month, day, совместно в «год», «месяц», «день».

Строковый (без форматирования)необязательный
monthmonth

date, year, month, day, совместно в «год», «месяц», «день».

Строковый (без форматирования)необязательный
orig-yearorig-year

Удаляется. По возможности переименовывается в «год».

Строковый (без форматирования)необязательный
annéeannée

Удаляется. По возможности переименовывается в «год».

Строковый (без форматирования)необязательный
anoano

Удаляется. По возможности переименовывается в «год».

Строковый (без форматирования)необязательный
origdateorigdate

Удаляется. По возможности переименовывается в «год».

Строковый (без форматирования)необязательный
chapterchapter

Переименование в «часть».

Неизвестнонеобязательный
partpart

Переименование в «часть».

Неизвестнонеобязательный
sectionsection

Переименование в «часть».

Неизвестнонеобязательный
chaptertitlechaptertitle

Переименование в «часть».

Неизвестнонеобязательный
titre chapitretitre chapitre

Переименование в «часть».

Неизвестнонеобязательный
script-chapterscript-chapter

Удаляется.

Неизвестнонеобязательный
trans-chaptertrans-chapter

Удаляется.

Неизвестнонеобязательный
chapter-urlchapter-url

Переименование в «ссылка часть».

Неизвестнонеобязательный
chapterurlchapterurl

Переименование в «ссылка часть».

Неизвестнонеобязательный
chapter-formatchapter-format

Удаляется.

Неизвестнонеобязательный
editor-firstNeditor-firstN

Переименование в «ответственныйN» совместно с editor-lastN и «editor-linkN».

Строковый (без форматирования)необязательный
editor-lastNeditor-lastN

Переименование, см. «editor-firstN».

Строковый (без форматирования)необязательный
editor-linkNeditor-linkN

Переименование, см. «editor-firstN».

Строковый (без форматирования)необязательный
directeur-firstNdirecteur-firstN

Переименование в «ответственныйN» совместно с editor-lastN и «editor-linkN».

Строковый (без форматирования)необязательный
directeur-lastNdirecteur-lastN

Переименование, см. «editor-firstN».

Строковый (без форматирования)необязательный
directeur-linkNdirecteur-linkN

Переименование, см. «editor-firstN».

Строковый (без форматирования)необязательный
editorseditors

Переименование в «ответственныйN» совместно с editor-lastN и «editor-linkN».

Строковый (без форматирования)необязательный
editorialeditorial

Переименование в «ответственныйN» совместно с editor-lastN и «editor-linkN».

Строковый (без форматирования)необязательный
veditorsveditors

Переименование в «ответственныйN» совместно с editor-lastN и «editor-linkN».

Строковый (без форматирования)необязательный
éditeuréditeur

Переименование в «издательство».

Строковый (без форматирования)необязательный
translatortranslator

Переименование в «ответственный2».

Строковый (без форматирования)необязательный
display-editorsdisplay-editors

Удаляется.

Неизвестнонеобязательный
titletitle

Переименование в «заглавие».

Строковый (без форматирования)необязательный
titretitre

Переименование в «заглавие».

Строковый (без форматирования)необязательный
títulotítulo

Переименование в «заглавие».

Строковый (без форматирования)необязательный
script-titlescript-title

Переименование в «оригинал».

Строковый (без форматирования)необязательный
trans-titletrans-title

Удаляется.

Неизвестнонеобязательный
quotesquotes

Удаляется.

Строковый (без форматирования)необязательный
curlycurly

Удаляется.

Неизвестнонеобязательный
lire en lignelire en ligne

Переименование в «ссылка».

Строковый (без форматирования)необязательный
urlurl

Переименование в «ссылка».

Строковый (без форматирования)необязательный
linklink

Переименование в «ссылка».

Строковый (без форматирования)необязательный
formatformat

Удаляется.

Неизвестнонеобязательный
typetype

Удаляется.

Строковый (без форматирования)необязательный
seriesseries

Переименование в «серия».

Строковый (без форматирования)необязательный
languagelanguage

Переименование в «язык». Значение переводится в [[ISO 639]] формат (оставляется 2 или 3 символа; сначала 3, далее если последний '-', то он убирается). Т.е. «en-GB» → «en».

Строковый (без форматирования)необязательный
langlang

Переименование в «язык»; аналогично ''language''.

Строковый (без форматирования)необязательный
volumevolume

Переименование в «том».

Строковый (без форматирования)необязательный
issueissue

Переименование в «номер». (?)

Строковый (без форматирования)необязательный
editionedition

Переименование в «издание».

Строковый (без форматирования)необязательный
locationlocation

Переименование в «место».

Строковый (без форматирования)необязательный
citycity

Переименование в «место».

Строковый (без форматирования)необязательный
ortort

Переименование в «место».

Строковый (без форматирования)необязательный
lieulieu

Переименование в «место».

Строковый (без форматирования)необязательный
publicationplacepublicationplace

Переименование в «место».

Строковый (без форматирования)необязательный
publisherpublisher

Переименование в «издательство».

Строковый (без форматирования)необязательный
verlagverlag

Переименование в «издательство».

Строковый (без форматирования)необязательный
editoraeditora

Переименование в «издательство».

Строковый (без форматирования)необязательный
publishedpublished

Переименование в «издательство».

Строковый (без форматирования)необязательный
placeplace

Переименование в «место».

Строковый (без форматирования)необязательный
publication-placepublication-place

Переименование в «место».

Строковый (без форматирования)необязательный
pagespages

Переименование в «страницы».

Строковый (без форматирования)необязательный
pagepage

Переименование в «страницы».

Строковый (без форматирования)необязательный
atat

Переименование в «страницы».

Строковый (без форматирования)необязательный
allpagesallpages

Переименование в «страниц».

Строковый (без форматирования)необязательный
paginaspaginas

Переименование в «страницы».

Строковый (без форматирования)необязательный
pppp

Переименование в «страницы».

Строковый (без форматирования)необязательный
pp

Переименование в «страницы».

Строковый (без форматирования)необязательный
passagepassage

Переименование в «страницы».

Строковый (без форматирования)необязательный
seitenseiten

Переименование в «страницы».

Строковый (без форматирования)необязательный
noppnopp

Удаляется.

Строковый (без форматирования)необязательный
arxivarxiv

Без изменений.

Строковый (без форматирования)необязательный
asinasin

Без изменений.

Строковый (без форматирования)необязательный
doidoi

Без изменений.

Строковый (без форматирования)необязательный
doi-broken-datedoi-broken-date

Удаляется.

Строковый (без форматирования)необязательный
issnissn

Без изменений.

Строковый (без форматирования)необязательный
pmidpmid

Без изменений.

Строковый (без форматирования)необязательный
bibcodebibcode

Без изменений.

Строковый (без форматирования)необязательный
idid

Без изменений.

Строковый (без форматирования)необязательный
accessdateaccessdate

Удаляется.

Строковый (без форматирования)необязательный
access-dateaccess-date

Удаляется.

Строковый (без форматирования)необязательный
quotequote

Переименование в «цитата».

Строковый (без форматирования)необязательный
référenceréférence

Переименование в «цитата».

Строковый (без форматирования)необязательный
viavia

Удаляется.

Строковый (без форматирования)необязательный
archive-urlarchive-url

Переименование в «ссылка». Это переименование более приоритетно, чем url. То есть, если есть «ссылка» или «url», то значение «archive-url»/«archiveurl» записывает поверх «ссылка» (прежние значения «ссылка»/«url» пропадают).

Строковый (без форматирования)необязательный
archive-datearchive-date

Переименование в «дата ссылки».

Строковый (без форматирования)необязательный
registrationregistration

Удаляется.

Строковый (без форматирования)необязательный
subscriptionsubscription

Удаляется.

Строковый (без форматирования)необязательный
lay-summarylay-summary

Удаляется.

Строковый (без форматирования)необязательный
lay-sourcelay-source

Удаляется.

Строковый (без форматирования)необязательный
lay-datelay-date

Удаляется.

Строковый (без форматирования)необязательный
name-list-formatname-list-format

Удаляется.

Строковый (без форматирования)необязательный
modemode

Удаляется.

Строковый (без форматирования)необязательный
postscriptpostscript

Удаляется.

Строковый (без форматирования)необязательный
agencyagency

Удаляется.

Строковый (без форматирования)необязательный
url-statusurl-status

Удаляется.

Строковый (без форматирования)необязательный
title-linktitle-link

Удаляется.

Строковый (без форматирования)необязательный
versionversion

Удаляется.

Строковый (без форматирования)необязательный
contributioncontribution

Удаляется.

Строковый (без форматирования)необязательный
author-separatorauthor-separator

Удаляется.

Неизвестнонеобязательный
authorformatauthorformat

Удаляется.

Неизвестнонеобязательный
authormaskauthormask

Удаляется.

Неизвестнонеобязательный
consulté leconsulté le

Удаляется.

Неизвестнонеобязательный
isbn-statusisbn-status

Удаляется.

Неизвестнонеобязательный
isbn statusisbn status

Удаляется.

Неизвестнонеобязательный
isbn13isbn13

Переименование в «isbn».

Строковый (без форматирования)необязательный
isbn10isbn10

Переименование в «isbn».

Строковый (без форматирования)необязательный
isbn9isbn9

Переименование в «isbn».

Строковый (без форматирования)необязательный
refref

Без изменений.

Строковый (без форматирования)необязательный
isbnisbn

Без изменений.

Строковый (без форматирования)необязательный

Для параметров «издательство», «заглавие», «цитата», «место», «оригинал», «издание», «автор», «ответственный» проверяется наличие красных ссылок. Если такая есть, то проверяется, есть ли англоязычная статья. Если есть, то линкуется либо на 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)

Обсуждение

[править | править код]