Extension:Replace Text

From mediawiki.org
Jump to navigation Jump to search
This page is a translated version of the page Extension:Replace Text and the translation is 100% complete.
Other languages:
Bahasa Indonesia • ‎Deutsch • ‎English • ‎Türkçe • ‎français • ‎polski • ‎українська • ‎日本語
Bu extension MediaWiki 1.31 ve üstü ile gelir. Böylece tekrar indirmek zorunda değilsiniz. Ancak, verilen diğer talimatları izlemeniz gerekir.
MediaWiki manüel uzantıları
OOjs UI icon advanced.svg
ReplaceText
Sürüm durumu: kararlı
Uygulama Özel sayfa
Açıklama Hizmetlilerin hem sayfa içerikleri hem de sayfa başlıkları için tüm vikide dize değişiklikleri yapmasına izin veren bir form sağlar
Yazar(lar) Yaron Koren <yaron57@gmail.com> ve Niklas Laxström
En son sürüm 1.4.1 (Nisan 2019)
Uyumluluk politikası Master maintains backwards compatibility.
MediaWiki 1.32+
Lisans GNU Genel Kamu Lisansı 2.0 veya üstü
İndir
  • $wgReplaceTextResultsLimit
  • replacetext
Translatewiki.net adresinde mevcutsa, Replace Text uzantısını çevirin

Kullanım ve sürüm matrisini kontrol edin.

Sorunlar Açık görevler · Hata bildir

Replace Text, hizmetlilerin vikinin içerik sayfaları hem metni hem de başlıkları üzerinde küresel bir dize bul ve değiştir yapmasına olanak tanıyan özel bir sayfa ve bir komut satırı betiği sağlayan bir MediaWiki uzantısıdır.

Metin değiştirme işlemi, ertelenmiş bir işlemdir ve iş kuyruğuna gönderilir. Değişim işlemini hemen gerçekleştirmek ve iş kuyruğunu işlemek için maintenance klasöründen runJobs.php çalıştırabilirsiniz.

Kurulum

  • Download and place the file(s) in a directory called ReplaceText in your extensions/ folder.
  • LocalSettings.php dosyanızın altına aşağıdaki kodu ekleyin:
    wfLoadExtension( 'ReplaceText' );
    
  • Varsayılan olarak, yalnızca "sysop" kullanıcı grubunun üyeleri Replace Text işlevine erişebilir. LocalSettings.php içindeki $wgGroupPermissions dizisini değiştirerek izin verilen kullanıcılar kümesine ekleme veya değişiklik yapabilirsiniz. Örneğin, "bureaucrat" veya "bot" kullanıcıları için izin eklemek üzere aşağıdakileri eklemelisiniz:
$wgGroupPermissions['bureaucrat']['replacetext'] = true;
  • Yes Yapıldı – Uzantının başarıyla yüklendiğini doğrulamak için vikinizde Special:Version seçeneğine gidin.

Kullanım

Replace Text, genel aramayı ve değiştirmeyi işleyen "Special:ReplaceText" (veya başka bir dildeki karşılığı) özel bir sayfayı tanımlar; aynı zamanda komut satırından da aynı şeyi yapan bir betik, replaceAll.php ile tanımlar. Bu belgelendirme önce özel sayfayı, ardından komut satırı betiğini kapsayacaktır.

Special:ReplaceText sayfası, başlangıçta bir hizmetlinin ara ve değiştir ayrıntılarını doldurması için bir form görüntüler: hizmetli, bir arama dizesi ve onun yerine aranacak ad alanları kümesini girer ve sayfadaki içerikler, sayfa başlıkları veya her ikisi metnin değiştirilip değiştirilmeyeceğini seçer. İsteğe bağlı olarak, hizmetli ayrıca iki ek filtre ekleyebilir: tüm sayfaların ait olması gereken bir kategorinin adı ve tüm sayfa adlarının başlaması gereken bir önektir. Bu form gönderildiğinde, onlara ya o arama dizesini içeren tüm sayfaların bir listesi ya da başlıkları arama dizesini içeren tüm sayfaların bir listesi ya da her ikisi de gösterilir. Her sayfa adının yanında, değiştirilmesini istemedikleri sayfaların seçimini kaldırabilmeleri için her biri için bir onay kutusu bulunur. Kullanıcı daha sonra gerçek değiştirmeyi yapmak için "Değiştir" düğmesine basabilir. Metin değişikliği yapıldığında, doğrudan geri alınamaz; yine de yeni dizeyi orijinal dizeyle değiştirerek her zaman "tersine" değiştirme çalıştırabilirsiniz. Bu nedenle, yedek dize boşsa veya vikide zaten var olan bir dizeyse, kullanıcıya bir uyarı mesajı gösterilir.

Arama dizesi bir sayfada birden çok kez yer alıyorsa, bu tür her örnek değiştirilir. Her sayfanın değiştirilenleri (küçük) bir viki düzenlemesi olarak görünür, metin değiştirmeyi yapan yönetici düzenlemeyi yapan kullanıcı olarak ve bir düzenleme özeti "Metin değiştirme: 'arama dizesi ile 'değiştirme dizesi '" gibi görünür.

Bir sayfanın başlığı, vikide zaten var olan bir başlığa veya birden çok satırdan oluşan bir başlığa taşınamaz. Taşınamayan sayfalar, yanlarında bir onay kutusu olmaksızın "seç" sayfasında taşınamaz olarak listelenir.

Arama büyük/küçük harfe duyarlıdır. Büyük/küçük harfe duyarlı olmayacak şekilde nasıl yapılacağını öğrenmek için aşağıda bakın.

Bilinmesi gerekenler

  1. ReplaceText, varsayılan olarak bir seferde yalnızca 250 sayfa işler. Bunu değiştirmek için LocalSettings.php dosyanızda $wgReplaceTextResultsLimit değerini daha büyük bir değere ayarlayabilirsiniz. Ancak, PHP'nin max_input_vars ile sınırlı olabilirsiniz; uzantı böyle bir uyarı bildirirse, onu değiştirmeniz gerekebilir.
  2. Tüm değiştirmeler iş kuyruğuna yerleştirilir. Bu nedenle, çok sayıda sayfayı işlemeniz gerekiyorsa, Replace Text ile çalıştırmanız ve ardından "runJobs.php" (muhtemelen birden çok kez) çalıştırmanız gerekir.

Düzenli ifadeler kullanma

Bir MySQL veya PostgreSQL veritabanı kullanıyorsanız, Special:ReplaceText formunda "Düzenli ifadeler kullan" onay kutusunu göreceksiniz. MS SQL/SQLServer veya SQLite veritabanları için bu onay kutusu görünmez, çünkü bu veritabanı türlerinde yerel "REGEXP" operatörü yoktur.

Bu onay kutusunu tıklarsanız, arama ve değiştirme dizelerinde düzenli ifadeler veya regexps kullanabilirsiniz. The set of regular expressions allowed is basically a small subset of the PHP and MySQL/PostgreSQL regular-expression set. The special characters that one can use in the search string are "( ) . * + ? [ ] |", and within the replacement string one can use values like $1, $2 etc. (To use these as regular characters, you just need to escape them by adding a "\" beforehand - which you would also need to do with the "/" character.) This section will not give a tutorial on using regular expressions (the Wikipedia article is a good place to start for that, as is this page on MySQL regexps), but here is the basic example listed in the inline explanation:

Search string: a(.*)c
Replacement string: ac$1

This would look for pages containing the letter 'a', the letter 'c', and any text in between (signified by the ".*"). It would then put that middle text after the 'a' and 'c' - the "$1" in the replacement string refers to the first element of the search string contained within parentheses (in this case, there's only one).

For every page for which the replace is actually called, the replacement would happen for every occurrence of the search string, not just one - just as happens with regular, non-regular-expression search.

More complex regexps

Search string: hello([0-9]*)\.([0-9]*)
Replacement string: $1,$2

This would replace "hello222.555" with "222,555" and "hello2.55" with "2,55"

First the word "hello" is matched. In brackets follows an expression to search for any digits "0-9". The following asterisk finds multiple matches of the preceding element. The brackets and the asterisk get enclosed with parantheses, so we match the complete term and transfer it to $1. The "\." indicates that it's a true dot, and not a special character. The second expression within parentheses is matched and put into $2.

Replacements followed by numbers

The following will not work:

Search string: 123(.*)456
Replacement string: $1123456

That's because the search will think the number of the replacement is 1123456, not 1. Instead, you should have the following:

Replacement string: {$1}123456

In general, you can always enclose numbered values in curly brackets.

Case-insensitive search

To make your search case-insensitive, use regular expression and the case-insensitive modifier, (?i):

Search string: (?i)iphone
Replacement string: iPhone

The above will unify the casing of all mentions of iPhone/iphone/IPHONE to iPhone.

Command-line script: replaceAll.php

Replace Text offers a script, replaceAll.php, which can be run from the command line, and which does all the same replacements that the page Special:ReplaceText does. The first two arguments for this script should be the search text and the replacement text; you can call this script simply like the following:

php replaceAll.php "Leningrad" "St. Petersburg"

Other possible arguments/flags for this script are:

  • --dry-run - only find the search texts, without doing any actual replacements
  • --regex - regular expressions should be used (default is false)
  • --user - the user to attribute the replacements to (default is the user with ID 1)
  • --yes - skip all prompts with an assumed "yes"
  • --summary - set a custom edit summary for the replacement edits
  • --rename - rename page titles instead of replacing contents
  • --no-announce - do not announce edits on Special:RecentChanges or watchlists
  • --ns - set a comma-separated list of the namespaces to search
  • --nsall - search on all the namespaces; overrides any value set for "--ns"
  • --replacements - the name of a file holding a tab-separated list of replacements to make
  • --debug - display the replacements being made

Additionally, there are two flags that strictly print out helpful information unrelated to a specific text replacement:

  • --show-file-format - show a description of the file format to use with --replacements
  • --listns - show a list of all namespaces on this wiki

(You can also see all of these options by calling "php replaceAll.php --help".)

Assigning replacements to a user

By default, all replacements are credited in the page history to the user who initiated them. However, you can instead have replacements be credited to a pre-set user -- such as a bot account -- by adding a line like this to LocalSettings.php, below the inclusion of Replace Text:

$wgReplaceTextUser = "MyReplaceTextBot";

The username specified must already be an account on the wiki. It will be added to MediaWiki's array of usernames which may not be registered or logged in from.

Authors

Replace Text was mostly written by Yaron Koren, reachable at yaron57@gmail.com. Important contributions were also made by Niklas Laxström, Ankit Garg (who contributed much of the regular expression code), Mark Hershberger (who wrote the command-line script), Brent Laabs, Cindy Cicalese and Nikhil Kumar.

Version history

Replace Text is currently at version 1.4.1. See the entire version history.

Screenshots

Below are images of the workflow of Replace Text. First, the initial page in which "George F. Will" and "George Will" are entered for the target string and replacement string, respectively, and replacing text in page titles is specified as well, on Discourse DB:

Replace-text-prelim-screenshot.png

Note: the check "All" and "None" boxes only show up when using the Vector skin, or skins based off of it.

And here is what the page looks like after the user hits "Continue":

Replace-text-screenshot.png

Hitting "Replace" would replace this value in all of the listed pages, as well as moving the page at the end to its new value.

Known issues

  • The replacement actions themselves are structured as MediaWiki "jobs", to ensure that the system is not overloaded if the user wants to do many at the same time. This means that a large set of replacements will not be done immediately, and may take minutes, hours or even longer to complete. Normally, jobs get activated every time a page is viewed on the wiki; to speed up the process (or slow it down), you can change the number of jobs run when a page is viewed; the default is 1. Thus a Replace Text request can stall soon after it starts if there is not enough front-end activity on the wiki to outrun the other sources of new batch jobs. For information on how to change the default, see the $wgJobRunRate page. To force the wiki to run all jobs immediately, go to the shell and execute the script runJobs.php ; there generally isn't a way to do this from the wiki's front end.
    • If you are still having a problem with getting Replace Text's jobs to run, adding the following to LocalSettings.php may fix the problem:
$wgRunJobsAsync = false;
  • In order for redirects not to be created on page moves (i.e. if the "Save the old titles as redirects to the new titles" checkbox is unchecked), you will have to give the relevant user the 'suppressredirect' permission. Assuming you've given the 'replacetext' permission to a "trusted-editor" user group, you would need to add the following to LocalSettings.php:
$wgGroupPermissions['trusted-editor']['suppressredirect'] = true;
  • If your revisions are compressed (that is, if $wgCompressRevisions is enabled in LocalSettings.php or the script compressOld.php has been executed with the option -t gzip) then ReplaceText will not work, because it makes use of SQL queries that can't search compressed text. (see the MassEditRegex extension as an alternative in this case.)
  • If you have a large number of replacements, some of them may not get done; or you may see an error message that reads "You must select at least one namespace." In both cases, that's due to a limit on the number of form inputs that PHP accepts. This can be fixed in a number of ways:
    • If you have the Suhosin PHP extension installed on your server, that may be source of the problem. You can increase the value of the variables suhosin.post.max_vars and suhosin.request.max_vars; or simply try temporarily disabling Suhosin while you do the replacements.
    • The PHP setting max_input_vars (available since PHP 5.3.9) also affects the number of replacements you can do at any time - you can try setting this to a very large number, like 3000.

Contributing to the project

Bugs and feature requests

Send any bug reports and requests to Yaron Koren, at yaron57@gmail.com.

Contributing patches to the project

If you found some bug and fixed it, or created a new feature, please either do a Git commit with your code, or create a patch by going to the "ReplaceText" directory, and typing:

git diff >descriptivename.patch

If you created a patch, please send it, along with a description, to Yaron Koren.

Translating

Translation of Replace Text is done through translatewiki.net. The translation for this extension can be found here. To add language values or change existing ones, you should create an account on translatewiki.net, then request permission from the administrators to translate a certain language or languages on this page (this is a very simple process). Once you have permission for a given language, you can log in and add or edit whatever messages you want to in that language.

See also