summaryrefslogtreecommitdiff
path: root/languages
diff options
context:
space:
mode:
authorPierre Schmitz <pierre@archlinux.de>2010-07-28 11:52:48 +0200
committerPierre Schmitz <pierre@archlinux.de>2010-07-28 11:52:48 +0200
commit222b01f5169f1c7e69762e0e8904c24f78f71882 (patch)
tree8e932e12546bb991357ec48eb1638d1770be7a35 /languages
parent00ab76a6b686e98a914afc1975812d2b1aaa7016 (diff)
update to MediaWiki 1.16.0
Diffstat (limited to 'languages')
-rw-r--r--languages/Language.php1075
-rw-r--r--languages/LanguageConverter.php1533
-rw-r--r--languages/Names.php84
-rw-r--r--languages/classes/LanguageAm.php16
-rw-r--r--languages/classes/LanguageAr.php31
-rw-r--r--languages/classes/LanguageBe.php3
-rw-r--r--languages/classes/LanguageBe_tarask.php3
-rw-r--r--languages/classes/LanguageBh.php16
-rw-r--r--languages/classes/LanguageBs.php2
-rw-r--r--languages/classes/LanguageCy.php3
-rw-r--r--languages/classes/LanguageEo.php3
-rw-r--r--languages/classes/LanguageGa.php16
-rw-r--r--languages/classes/LanguageGan.php30
-rw-r--r--languages/classes/LanguageGd.php35
-rw-r--r--languages/classes/LanguageHi.php16
-rw-r--r--languages/classes/LanguageHr.php2
-rw-r--r--languages/classes/LanguageJa.php27
-rw-r--r--languages/classes/LanguageKk.php13
-rw-r--r--languages/classes/LanguageKu.php10
-rw-r--r--languages/classes/LanguageLn.php18
-rw-r--r--languages/classes/LanguageLv.php3
-rw-r--r--languages/classes/LanguageMg.php16
-rw-r--r--languages/classes/LanguageMk.php21
-rw-r--r--languages/classes/LanguageMl.php22
-rw-r--r--languages/classes/LanguageMo.php23
-rw-r--r--languages/classes/LanguageNso.php16
-rw-r--r--languages/classes/LanguagePl.php8
-rw-r--r--languages/classes/LanguageRo.php23
-rw-r--r--languages/classes/LanguageRu.php2
-rw-r--r--languages/classes/LanguageSe.php22
-rw-r--r--languages/classes/LanguageSh.php29
-rw-r--r--languages/classes/LanguageSma.php22
-rw-r--r--languages/classes/LanguageSr.php36
-rw-r--r--languages/classes/LanguageTi.php16
-rw-r--r--languages/classes/LanguageTl.php16
-rw-r--r--languages/classes/LanguageTr.php2
-rw-r--r--languages/classes/LanguageUk.php2
-rw-r--r--languages/classes/LanguageWa.php12
-rw-r--r--languages/classes/LanguageYue.php31
-rw-r--r--languages/classes/LanguageZh.php39
-rw-r--r--languages/classes/LanguageZh_hans.php43
-rw-r--r--languages/messages/MessagesAb.php45
-rw-r--r--languages/messages/MessagesAce.php107
-rw-r--r--languages/messages/MessagesAf.php1034
-rw-r--r--languages/messages/MessagesAk.php2
-rw-r--r--languages/messages/MessagesAln.php457
-rw-r--r--languages/messages/MessagesAls.php3
-rw-r--r--languages/messages/MessagesAm.php268
-rw-r--r--languages/messages/MessagesAn.php987
-rw-r--r--languages/messages/MessagesAng.php260
-rw-r--r--languages/messages/MessagesAr.php1175
-rw-r--r--languages/messages/MessagesArc.php437
-rw-r--r--languages/messages/MessagesArn.php89
-rw-r--r--languages/messages/MessagesArz.php1290
-rw-r--r--languages/messages/MessagesAs.php394
-rw-r--r--languages/messages/MessagesAst.php376
-rw-r--r--languages/messages/MessagesAv.php17
-rw-r--r--languages/messages/MessagesAvk.php217
-rw-r--r--languages/messages/MessagesAy.php22
-rw-r--r--languages/messages/MessagesAz.php533
-rw-r--r--languages/messages/MessagesBa.php608
-rw-r--r--languages/messages/MessagesBar.php110
-rw-r--r--languages/messages/MessagesBat_smg.php232
-rw-r--r--languages/messages/MessagesBcc.php713
-rw-r--r--languages/messages/MessagesBcl.php423
-rw-r--r--languages/messages/MessagesBe.php509
-rw-r--r--languages/messages/MessagesBe_tarask.php964
-rw-r--r--languages/messages/MessagesBe_x_old.php3
-rw-r--r--languages/messages/MessagesBg.php923
-rw-r--r--languages/messages/MessagesBh.php119
-rw-r--r--languages/messages/MessagesBi.php10
-rw-r--r--languages/messages/MessagesBm.php15
-rw-r--r--languages/messages/MessagesBn.php612
-rw-r--r--languages/messages/MessagesBo.php24
-rw-r--r--languages/messages/MessagesBpy.php359
-rw-r--r--languages/messages/MessagesBqi.php104
-rw-r--r--languages/messages/MessagesBr.php971
-rw-r--r--languages/messages/MessagesBs.php1054
-rw-r--r--languages/messages/MessagesBug.php72
-rw-r--r--languages/messages/MessagesCa.php958
-rw-r--r--languages/messages/MessagesCbk_zam.php9
-rw-r--r--languages/messages/MessagesCdo.php213
-rw-r--r--languages/messages/MessagesCe.php200
-rw-r--r--languages/messages/MessagesCeb.php485
-rw-r--r--languages/messages/MessagesCh.php197
-rw-r--r--languages/messages/MessagesChr.php14
-rw-r--r--languages/messages/MessagesCkb.php12
-rw-r--r--languages/messages/MessagesCkb_arab.php2997
-rw-r--r--languages/messages/MessagesCkb_latn.php12
-rw-r--r--languages/messages/MessagesCo.php55
-rw-r--r--languages/messages/MessagesCps.php946
-rw-r--r--languages/messages/MessagesCrh.php3
-rw-r--r--languages/messages/MessagesCrh_cyrl.php555
-rw-r--r--languages/messages/MessagesCrh_latn.php556
-rw-r--r--languages/messages/MessagesCs.php1116
-rw-r--r--languages/messages/MessagesCsb.php117
-rw-r--r--languages/messages/MessagesCu.php125
-rw-r--r--languages/messages/MessagesCv.php224
-rw-r--r--languages/messages/MessagesCy.php1039
-rw-r--r--languages/messages/MessagesDa.php968
-rw-r--r--languages/messages/MessagesDe.php1084
-rw-r--r--languages/messages/MessagesDe_ch.php5
-rw-r--r--languages/messages/MessagesDe_formal.php125
-rw-r--r--languages/messages/MessagesDiq.php933
-rw-r--r--languages/messages/MessagesDk.php3
-rw-r--r--languages/messages/MessagesDsb.php963
-rw-r--r--languages/messages/MessagesDv.php50
-rw-r--r--languages/messages/MessagesDz.php95
-rw-r--r--languages/messages/MessagesEe.php134
-rw-r--r--languages/messages/MessagesEl.php974
-rw-r--r--languages/messages/MessagesEml.php12
-rw-r--r--languages/messages/MessagesEn.php1192
-rw-r--r--languages/messages/MessagesEnRTL.php3
-rw-r--r--languages/messages/MessagesEn_gb.php2
-rw-r--r--languages/messages/MessagesEo.php964
-rw-r--r--languages/messages/MessagesEs.php1112
-rw-r--r--languages/messages/MessagesEt.php1134
-rw-r--r--languages/messages/MessagesEu.php922
-rw-r--r--languages/messages/MessagesExt.php327
-rw-r--r--languages/messages/MessagesFa.php984
-rw-r--r--languages/messages/MessagesFf.php2
-rw-r--r--languages/messages/MessagesFi.php956
-rw-r--r--languages/messages/MessagesFiu_vro.php3
-rw-r--r--languages/messages/MessagesFj.php18
-rw-r--r--languages/messages/MessagesFo.php151
-rw-r--r--languages/messages/MessagesFr.php1186
-rw-r--r--languages/messages/MessagesFrc.php245
-rw-r--r--languages/messages/MessagesFrp.php1235
-rw-r--r--languages/messages/MessagesFrr.php1213
-rw-r--r--languages/messages/MessagesFur.php603
-rw-r--r--languages/messages/MessagesFy.php496
-rw-r--r--languages/messages/MessagesGa.php438
-rw-r--r--languages/messages/MessagesGag.php184
-rw-r--r--languages/messages/MessagesGan.php2179
-rw-r--r--languages/messages/MessagesGan_hans.php347
-rw-r--r--languages/messages/MessagesGan_hant.php372
-rw-r--r--languages/messages/MessagesGd.php151
-rw-r--r--languages/messages/MessagesGl.php1090
-rw-r--r--languages/messages/MessagesGlk.php8
-rw-r--r--languages/messages/MessagesGn.php43
-rw-r--r--languages/messages/MessagesGot.php44
-rw-r--r--languages/messages/MessagesGrc.php746
-rw-r--r--languages/messages/MessagesGsw.php966
-rw-r--r--languages/messages/MessagesGu.php420
-rw-r--r--languages/messages/MessagesGv.php175
-rw-r--r--languages/messages/MessagesHa.php721
-rw-r--r--languages/messages/MessagesHak.php272
-rw-r--r--languages/messages/MessagesHaw.php287
-rw-r--r--languages/messages/MessagesHe.php1321
-rw-r--r--languages/messages/MessagesHi.php758
-rw-r--r--languages/messages/MessagesHif.php3
-rw-r--r--languages/messages/MessagesHif_latn.php949
-rw-r--r--languages/messages/MessagesHil.php52
-rw-r--r--languages/messages/MessagesHr.php967
-rw-r--r--languages/messages/MessagesHsb.php951
-rw-r--r--languages/messages/MessagesHt.php178
-rw-r--r--languages/messages/MessagesHu.php1022
-rw-r--r--languages/messages/MessagesHy.php699
-rw-r--r--languages/messages/MessagesIa.php960
-rw-r--r--languages/messages/MessagesId.php1366
-rw-r--r--languages/messages/MessagesIe.php36
-rw-r--r--languages/messages/MessagesIg.php274
-rw-r--r--languages/messages/MessagesIke_cans.php57
-rw-r--r--languages/messages/MessagesIke_latn.php53
-rw-r--r--languages/messages/MessagesIlo.php225
-rw-r--r--languages/messages/MessagesInh.php28
-rw-r--r--languages/messages/MessagesIo.php496
-rw-r--r--languages/messages/MessagesIs.php501
-rw-r--r--languages/messages/MessagesIt.php1006
-rw-r--r--languages/messages/MessagesIu.php3
-rw-r--r--languages/messages/MessagesJa.php1096
-rw-r--r--languages/messages/MessagesJbo.php25
-rw-r--r--languages/messages/MessagesJut.php130
-rw-r--r--languages/messages/MessagesJv.php733
-rw-r--r--languages/messages/MessagesKa.php958
-rw-r--r--languages/messages/MessagesKaa.php248
-rw-r--r--languages/messages/MessagesKab.php238
-rw-r--r--languages/messages/MessagesKg.php12
-rw-r--r--languages/messages/MessagesKiu.php1411
-rw-r--r--languages/messages/MessagesKk_arab.php564
-rw-r--r--languages/messages/MessagesKk_cn.php3
-rw-r--r--languages/messages/MessagesKk_cyrl.php595
-rw-r--r--languages/messages/MessagesKk_kz.php3
-rw-r--r--languages/messages/MessagesKk_latn.php562
-rw-r--r--languages/messages/MessagesKk_tr.php3
-rw-r--r--languages/messages/MessagesKl.php197
-rw-r--r--languages/messages/MessagesKm.php943
-rw-r--r--languages/messages/MessagesKn.php389
-rw-r--r--languages/messages/MessagesKo.php1029
-rw-r--r--languages/messages/MessagesKo_kp.php33
-rw-r--r--languages/messages/MessagesKoi.php630
-rw-r--r--languages/messages/MessagesKrc.php3219
-rw-r--r--languages/messages/MessagesKri.php41
-rw-r--r--languages/messages/MessagesKrj.php33
-rw-r--r--languages/messages/MessagesKs.php3
-rw-r--r--languages/messages/MessagesKsh.php975
-rw-r--r--languages/messages/MessagesKu.php3
-rw-r--r--languages/messages/MessagesKu_arab.php1065
-rw-r--r--languages/messages/MessagesKu_latn.php239
-rw-r--r--languages/messages/MessagesKv.php4
-rw-r--r--languages/messages/MessagesKw.php355
-rw-r--r--languages/messages/MessagesKy.php78
-rw-r--r--languages/messages/MessagesLa.php510
-rw-r--r--languages/messages/MessagesLad.php112
-rw-r--r--languages/messages/MessagesLb.php1015
-rw-r--r--languages/messages/MessagesLbe.php13
-rw-r--r--languages/messages/MessagesLez.php15
-rw-r--r--languages/messages/MessagesLfn.php148
-rw-r--r--languages/messages/MessagesLg.php76
-rw-r--r--languages/messages/MessagesLi.php745
-rw-r--r--languages/messages/MessagesLij.php192
-rw-r--r--languages/messages/MessagesLld.php9
-rw-r--r--languages/messages/MessagesLmo.php425
-rw-r--r--languages/messages/MessagesLn.php88
-rw-r--r--languages/messages/MessagesLo.php97
-rw-r--r--languages/messages/MessagesLoz.php304
-rw-r--r--languages/messages/MessagesLt.php989
-rw-r--r--languages/messages/MessagesLtg.php746
-rw-r--r--languages/messages/MessagesLv.php472
-rw-r--r--languages/messages/MessagesLzh.php891
-rw-r--r--languages/messages/MessagesLzz.php78
-rw-r--r--languages/messages/MessagesMai.php11
-rw-r--r--languages/messages/MessagesMap_bms.php4
-rw-r--r--languages/messages/MessagesMdf.php387
-rw-r--r--languages/messages/MessagesMg.php876
-rw-r--r--languages/messages/MessagesMhr.php260
-rw-r--r--languages/messages/MessagesMi.php12
-rw-r--r--languages/messages/MessagesMk.php974
-rw-r--r--languages/messages/MessagesMl.php1336
-rw-r--r--languages/messages/MessagesMn.php556
-rw-r--r--languages/messages/MessagesMo.php13
-rw-r--r--languages/messages/MessagesMr.php419
-rw-r--r--languages/messages/MessagesMrj.php716
-rw-r--r--languages/messages/MessagesMs.php762
-rw-r--r--languages/messages/MessagesMt.php718
-rw-r--r--languages/messages/MessagesMwl.php184
-rw-r--r--languages/messages/MessagesMy.php43
-rw-r--r--languages/messages/MessagesMyv.php533
-rw-r--r--languages/messages/MessagesMzn.php301
-rw-r--r--languages/messages/MessagesNa.php14
-rw-r--r--languages/messages/MessagesNah.php324
-rw-r--r--languages/messages/MessagesNan.php154
-rw-r--r--languages/messages/MessagesNap.php54
-rw-r--r--languages/messages/MessagesNb.php3
-rw-r--r--languages/messages/MessagesNds.php691
-rw-r--r--languages/messages/MessagesNds_nl.php1076
-rw-r--r--languages/messages/MessagesNe.php630
-rw-r--r--languages/messages/MessagesNew.php47
-rw-r--r--languages/messages/MessagesNiu.php24
-rw-r--r--languages/messages/MessagesNl.php1032
-rw-r--r--languages/messages/MessagesNn.php931
-rw-r--r--languages/messages/MessagesNo.php985
-rw-r--r--languages/messages/MessagesNov.php54
-rw-r--r--languages/messages/MessagesNso.php221
-rw-r--r--languages/messages/MessagesNv.php41
-rw-r--r--languages/messages/MessagesOc.php1074
-rw-r--r--languages/messages/MessagesOr.php4
-rw-r--r--languages/messages/MessagesOs.php289
-rw-r--r--languages/messages/MessagesPa.php218
-rw-r--r--languages/messages/MessagesPag.php66
-rw-r--r--languages/messages/MessagesPam.php309
-rw-r--r--languages/messages/MessagesPap.php43
-rw-r--r--languages/messages/MessagesPcd.php856
-rw-r--r--languages/messages/MessagesPdc.php254
-rw-r--r--languages/messages/MessagesPdt.php80
-rw-r--r--languages/messages/MessagesPfl.php41
-rw-r--r--languages/messages/MessagesPih.php4
-rw-r--r--languages/messages/MessagesPl.php975
-rw-r--r--languages/messages/MessagesPms.php1006
-rw-r--r--languages/messages/MessagesPnb.php269
-rw-r--r--languages/messages/MessagesPnt.php286
-rw-r--r--languages/messages/MessagesPrg.php2846
-rw-r--r--languages/messages/MessagesPs.php472
-rw-r--r--languages/messages/MessagesPt.php1262
-rw-r--r--languages/messages/MessagesPt_br.php1123
-rw-r--r--languages/messages/MessagesQqq.php1096
-rw-r--r--languages/messages/MessagesQu.php1116
-rw-r--r--languages/messages/MessagesRgn.php683
-rw-r--r--languages/messages/MessagesRif.php114
-rw-r--r--languages/messages/MessagesRm.php358
-rw-r--r--languages/messages/MessagesRmy.php136
-rw-r--r--languages/messages/MessagesRo.php1111
-rw-r--r--languages/messages/MessagesRoa_rup.php22
-rw-r--r--languages/messages/MessagesRoa_tara.php940
-rw-r--r--languages/messages/MessagesRu.php1052
-rw-r--r--languages/messages/MessagesRue.php2069
-rw-r--r--languages/messages/MessagesRuq.php3
-rw-r--r--languages/messages/MessagesRuq_cyrl.php10
-rw-r--r--languages/messages/MessagesRuq_grek.php9
-rw-r--r--languages/messages/MessagesRuq_latn.php10
-rw-r--r--languages/messages/MessagesSa.php115
-rw-r--r--languages/messages/MessagesSah.php977
-rw-r--r--languages/messages/MessagesSc.php352
-rw-r--r--languages/messages/MessagesScn.php743
-rw-r--r--languages/messages/MessagesSco.php228
-rw-r--r--languages/messages/MessagesSd.php157
-rw-r--r--languages/messages/MessagesSdc.php323
-rw-r--r--languages/messages/MessagesSe.php195
-rw-r--r--languages/messages/MessagesSei.php197
-rw-r--r--languages/messages/MessagesSg.php6
-rw-r--r--languages/messages/MessagesSh.php584
-rw-r--r--languages/messages/MessagesShi.php177
-rw-r--r--languages/messages/MessagesSi.php941
-rw-r--r--languages/messages/MessagesSimple.php3
-rw-r--r--languages/messages/MessagesSk.php1034
-rw-r--r--languages/messages/MessagesSl.php1125
-rw-r--r--languages/messages/MessagesSli.php2856
-rw-r--r--languages/messages/MessagesSm.php6
-rw-r--r--languages/messages/MessagesSma.php115
-rw-r--r--languages/messages/MessagesSn.php16
-rw-r--r--languages/messages/MessagesSo.php86
-rw-r--r--languages/messages/MessagesSq.php552
-rw-r--r--languages/messages/MessagesSr_ec.php1020
-rw-r--r--languages/messages/MessagesSr_el.php1014
-rw-r--r--languages/messages/MessagesSrn.php359
-rw-r--r--languages/messages/MessagesSs.php60
-rw-r--r--languages/messages/MessagesSt.php4
-rw-r--r--languages/messages/MessagesStq.php954
-rw-r--r--languages/messages/MessagesSu.php608
-rw-r--r--languages/messages/MessagesSv.php993
-rw-r--r--languages/messages/MessagesSw.php792
-rw-r--r--languages/messages/MessagesSzl.php286
-rw-r--r--languages/messages/MessagesTa.php278
-rw-r--r--languages/messages/MessagesTcy.php85
-rw-r--r--languages/messages/MessagesTe.php1059
-rw-r--r--languages/messages/MessagesTet.php158
-rw-r--r--languages/messages/MessagesTg.php3
-rw-r--r--languages/messages/MessagesTg_cyrl.php416
-rw-r--r--languages/messages/MessagesTg_latn.php2417
-rw-r--r--languages/messages/MessagesTh.php910
-rw-r--r--languages/messages/MessagesTi.php21
-rw-r--r--languages/messages/MessagesTk.php972
-rw-r--r--languages/messages/MessagesTl.php999
-rw-r--r--languages/messages/MessagesTlh.php28
-rw-r--r--languages/messages/MessagesTn.php8
-rw-r--r--languages/messages/MessagesTo.php113
-rw-r--r--languages/messages/MessagesTokipona.php11
-rw-r--r--languages/messages/MessagesTp.php3
-rw-r--r--languages/messages/MessagesTpi.php16
-rw-r--r--languages/messages/MessagesTr.php1137
-rw-r--r--languages/messages/MessagesTs.php40
-rw-r--r--languages/messages/MessagesTt.php5
-rw-r--r--languages/messages/MessagesTt_cyrl.php500
-rw-r--r--languages/messages/MessagesTt_latn.php222
-rw-r--r--languages/messages/MessagesTy.php23
-rw-r--r--languages/messages/MessagesTyv.php177
-rw-r--r--languages/messages/MessagesUdm.php17
-rw-r--r--languages/messages/MessagesUg.php3
-rw-r--r--languages/messages/MessagesUg_arab.php3212
-rw-r--r--languages/messages/MessagesUg_latn.php27
-rw-r--r--languages/messages/MessagesUk.php1074
-rw-r--r--languages/messages/MessagesUr.php522
-rw-r--r--languages/messages/MessagesUz.php96
-rw-r--r--languages/messages/MessagesVe.php2
-rw-r--r--languages/messages/MessagesVec.php983
-rw-r--r--languages/messages/MessagesVep.php913
-rw-r--r--languages/messages/MessagesVi.php1002
-rw-r--r--languages/messages/MessagesVls.php34
-rw-r--r--languages/messages/MessagesVmf.php985
-rw-r--r--languages/messages/MessagesVo.php480
-rw-r--r--languages/messages/MessagesVot.php642
-rw-r--r--languages/messages/MessagesVro.php315
-rw-r--r--languages/messages/MessagesWa.php381
-rw-r--r--languages/messages/MessagesWar.php105
-rw-r--r--languages/messages/MessagesWo.php555
-rw-r--r--languages/messages/MessagesWuu.php458
-rw-r--r--languages/messages/MessagesXal.php363
-rw-r--r--languages/messages/MessagesXh.php15
-rw-r--r--languages/messages/MessagesXmf.php61
-rw-r--r--languages/messages/MessagesYdd.php10
-rw-r--r--languages/messages/MessagesYi.php880
-rw-r--r--languages/messages/MessagesYo.php623
-rw-r--r--languages/messages/MessagesYue.php982
-rw-r--r--languages/messages/MessagesZa.php33
-rw-r--r--languages/messages/MessagesZea.php384
-rw-r--r--languages/messages/MessagesZh.php16
-rw-r--r--languages/messages/MessagesZh_classical.php3
-rw-r--r--languages/messages/MessagesZh_cn.php4
-rw-r--r--languages/messages/MessagesZh_hans.php1011
-rw-r--r--languages/messages/MessagesZh_hant.php1068
-rw-r--r--languages/messages/MessagesZh_hk.php111
-rw-r--r--languages/messages/MessagesZh_min_nan.php3
-rw-r--r--languages/messages/MessagesZh_mo.php3
-rw-r--r--languages/messages/MessagesZh_my.php3
-rw-r--r--languages/messages/MessagesZh_sg.php3
-rw-r--r--languages/messages/MessagesZh_tw.php1748
-rw-r--r--languages/messages/MessagesZh_yue.php3
-rw-r--r--languages/messages/MessagesZu.php33
388 files changed, 109405 insertions, 60727 deletions
diff --git a/languages/Language.php b/languages/Language.php
index 8853aced..343ac8a7 100644
--- a/languages/Language.php
+++ b/languages/Language.php
@@ -34,11 +34,13 @@ if( function_exists( 'mb_strtoupper' ) ) {
*/
class FakeConverter {
var $mLang;
- function FakeConverter($langobj) {$this->mLang = $langobj;}
- function convert($t, $i) {return $t;}
- function parserConvert($t, $p) {return $t;}
+ function FakeConverter( $langobj ) { $this->mLang = $langobj; }
+ function autoConvertToAllVariants( $text ) { return $text; }
+ function convert( $t ) { return $t; }
+ function convertTitle( $t ) { return $t->getPrefixedText(); }
function getVariants() { return array( $this->mLang->getCode() ); }
- function getPreferredVariant() {return $this->mLang->getCode(); }
+ function getPreferredVariant() { return $this->mLang->getCode(); }
+ function getConvRuleTitle() { return false; }
function findVariantLink(&$l, &$n, $ignoreOtherCond = false) {}
function getExtraHashOptions() {return '';}
function getParsedTitle() {return '';}
@@ -56,24 +58,16 @@ class Language {
var $mConverter, $mVariants, $mCode, $mLoaded = false;
var $mMagicExtensions = array(), $mMagicHookDone = false;
- static public $mLocalisationKeys = array(
- 'fallback', 'namespaceNames', 'mathNames', 'bookstoreList',
- 'magicWords', 'messages', 'rtl', 'digitTransformTable',
- 'separatorTransformTable', 'fallback8bitEncoding', 'linkPrefixExtension',
- 'defaultUserOptionOverrides', 'linkTrail', 'namespaceAliases',
- 'dateFormats', 'datePreferences', 'datePreferenceMigrationMap',
- 'defaultDateFormat', 'extraUserToggles', 'specialPageAliases',
- 'imageFiles'
- );
-
- static public $mMergeableMapKeys = array( 'messages', 'namespaceNames', 'mathNames',
- 'dateFormats', 'defaultUserOptionOverrides', 'magicWords', 'imageFiles' );
-
- static public $mMergeableListKeys = array( 'extraUserToggles' );
+ var $mNamespaceIds, $namespaceNames, $namespaceAliases;
+ var $dateFormatStrings = array();
+ var $mExtendedSpecialPageAliases;
- static public $mMergeableAliasListKeys = array( 'specialPageAliases' );
+ /**
+ * ReplacementArray object caches
+ */
+ var $transformData = array();
- static public $mLocalisationCache = array();
+ static public $dataCache;
static public $mLangObjCache = array();
static public $mWeekdayMsgs = array(
@@ -122,7 +116,7 @@ class Language {
'hebrew-calendar-m10-gen', 'hebrew-calendar-m11-gen', 'hebrew-calendar-m12-gen',
'hebrew-calendar-m6a-gen', 'hebrew-calendar-m6b-gen'
);
-
+
static public $mHijriCalendarMonthMsgs = array(
'hijri-calendar-m1', 'hijri-calendar-m2', 'hijri-calendar-m3',
'hijri-calendar-m4', 'hijri-calendar-m5', 'hijri-calendar-m6',
@@ -165,7 +159,7 @@ class Language {
if ( $recursionLevel > 5 ) {
throw new MWException( "Language fallback loop detected when creating class $class\n" );
- }
+ }
if( ! class_exists( $class ) ) {
$fallback = Language::getFallbackFor( $code );
@@ -179,6 +173,18 @@ class Language {
return $lang;
}
+ /**
+ * Get the LocalisationCache instance
+ */
+ public static function getLocalisationCache() {
+ if ( is_null( self::$dataCache ) ) {
+ global $wgLocalisationCacheConf;
+ $class = $wgLocalisationCacheConf['class'];
+ self::$dataCache = new $class( $wgLocalisationCacheConf );
+ }
+ return self::$dataCache;
+ }
+
function __construct() {
$this->mConverter = new FakeConverter($this);
// Set the code to the name of the descendant
@@ -187,6 +193,7 @@ class Language {
} else {
$this->mCode = str_replace( '_', '-', strtolower( substr( get_class( $this ), 8 ) ) );
}
+ self::getLocalisationCache();
}
/**
@@ -214,7 +221,11 @@ class Language {
}
function getFallbackLanguageCode() {
- return self::getFallbackFor( $this->mCode );
+ if ( $this->mCode === 'en' ) {
+ return false;
+ } else {
+ return self::$dataCache->getItem( $this->mCode, 'fallback' );
+ }
}
/**
@@ -222,15 +233,34 @@ class Language {
* @return array
*/
function getBookstoreList() {
- $this->load();
- return $this->bookstoreList;
+ return self::$dataCache->getItem( $this->mCode, 'bookstoreList' );
}
/**
* @return array
*/
function getNamespaces() {
- $this->load();
+ if ( is_null( $this->namespaceNames ) ) {
+ global $wgExtraNamespaces, $wgMetaNamespace, $wgMetaNamespaceTalk;
+
+ $this->namespaceNames = self::$dataCache->getItem( $this->mCode, 'namespaceNames' );
+ if ( $wgExtraNamespaces ) {
+ $this->namespaceNames = $wgExtraNamespaces + $this->namespaceNames;
+ }
+
+ $this->namespaceNames[NS_PROJECT] = $wgMetaNamespace;
+ if ( $wgMetaNamespaceTalk ) {
+ $this->namespaceNames[NS_PROJECT_TALK] = $wgMetaNamespaceTalk;
+ } else {
+ $talk = $this->namespaceNames[NS_PROJECT_TALK];
+ $this->namespaceNames[NS_PROJECT_TALK] =
+ $this->fixVariableInNamespace( $talk );
+ }
+
+ # The above mixing may leave namespaces out of canonical order.
+ # Re-order by namespace ID number...
+ ksort( $this->namespaceNames );
+ }
return $this->namespaceNames;
}
@@ -286,11 +316,54 @@ class Language {
* @return mixed An integer if $text is a valid value otherwise false
*/
function getLocalNsIndex( $text ) {
- $this->load();
$lctext = $this->lc($text);
- return isset( $this->mNamespaceIds[$lctext] ) ? $this->mNamespaceIds[$lctext] : false;
+ $ids = $this->getNamespaceIds();
+ return isset( $ids[$lctext] ) ? $ids[$lctext] : false;
+ }
+
+ function getNamespaceAliases() {
+ if ( is_null( $this->namespaceAliases ) ) {
+ $aliases = self::$dataCache->getItem( $this->mCode, 'namespaceAliases' );
+ if ( !$aliases ) {
+ $aliases = array();
+ } else {
+ foreach ( $aliases as $name => $index ) {
+ if ( $index === NS_PROJECT_TALK ) {
+ unset( $aliases[$name] );
+ $name = $this->fixVariableInNamespace( $name );
+ $aliases[$name] = $index;
+ }
+ }
+ }
+ $this->namespaceAliases = $aliases;
+ }
+ return $this->namespaceAliases;
+ }
+
+ function getNamespaceIds() {
+ if ( is_null( $this->mNamespaceIds ) ) {
+ global $wgNamespaceAliases;
+ # Put namespace names and aliases into a hashtable.
+ # If this is too slow, then we should arrange it so that it is done
+ # before caching. The catch is that at pre-cache time, the above
+ # class-specific fixup hasn't been done.
+ $this->mNamespaceIds = array();
+ foreach ( $this->getNamespaces() as $index => $name ) {
+ $this->mNamespaceIds[$this->lc($name)] = $index;
+ }
+ foreach ( $this->getNamespaceAliases() as $name => $index ) {
+ $this->mNamespaceIds[$this->lc($name)] = $index;
+ }
+ if ( $wgNamespaceAliases ) {
+ foreach ( $wgNamespaceAliases as $name => $index ) {
+ $this->mNamespaceIds[$this->lc($name)] = $index;
+ }
+ }
+ }
+ return $this->mNamespaceIds;
}
+
/**
* Get a namespace key by value, case insensitive. Canonical namespace
* names override custom ones defined for the current language.
@@ -299,10 +372,12 @@ class Language {
* @return mixed An integer if $text is a valid value otherwise false
*/
function getNsIndex( $text ) {
- $this->load();
$lctext = $this->lc($text);
- if( ( $ns = MWNamespace::getCanonicalIndex( $lctext ) ) !== null ) return $ns;
- return isset( $this->mNamespaceIds[$lctext] ) ? $this->mNamespaceIds[$lctext] : false;
+ if ( ( $ns = MWNamespace::getCanonicalIndex( $lctext ) ) !== null ) {
+ return $ns;
+ }
+ $ids = $this->getNamespaceIds();
+ return isset( $ids[$lctext] ) ? $ids[$lctext] : false;
}
/**
@@ -334,48 +409,41 @@ class Language {
}
function getMathNames() {
- $this->load();
- return $this->mathNames;
+ return self::$dataCache->getItem( $this->mCode, 'mathNames' );
}
function getDatePreferences() {
- $this->load();
- return $this->datePreferences;
+ return self::$dataCache->getItem( $this->mCode, 'datePreferences' );
}
-
+
function getDateFormats() {
- $this->load();
- return $this->dateFormats;
+ return self::$dataCache->getItem( $this->mCode, 'dateFormats' );
}
function getDefaultDateFormat() {
- $this->load();
- return $this->defaultDateFormat;
+ $df = self::$dataCache->getItem( $this->mCode, 'defaultDateFormat' );
+ if ( $df === 'dmy or mdy' ) {
+ global $wgAmericanDates;
+ return $wgAmericanDates ? 'mdy' : 'dmy';
+ } else {
+ return $df;
+ }
}
function getDatePreferenceMigrationMap() {
- $this->load();
- return $this->datePreferenceMigrationMap;
+ return self::$dataCache->getItem( $this->mCode, 'datePreferenceMigrationMap' );
}
function getImageFile( $image ) {
- $this->load();
- return $this->imageFiles[$image];
+ return self::$dataCache->getSubitem( $this->mCode, 'imageFiles', $image );
}
function getDefaultUserOptionOverrides() {
- $this->load();
- # XXX - apparently some languageas get empty arrays, didn't get to it yet -- midom
- if (is_array($this->defaultUserOptionOverrides)) {
- return $this->defaultUserOptionOverrides;
- } else {
- return array();
- }
+ return self::$dataCache->getItem( $this->mCode, 'defaultUserOptionOverrides' );
}
function getExtraUserToggles() {
- $this->load();
- return $this->extraUserToggles;
+ return self::$dataCache->getItem( $this->mCode, 'extraUserToggles' );
}
function getUserToggle( $tog ) {
@@ -392,17 +460,14 @@ class Language {
if ( !$customisedOnly ) {
return $allNames;
}
-
+
global $IP;
$names = array();
$dir = opendir( "$IP/languages/messages" );
while( false !== ( $file = readdir( $dir ) ) ) {
- $m = array();
- if( preg_match( '/Messages([A-Z][a-z_]+)\.php$/', $file, $m ) ) {
- $code = str_replace( '_', '-', strtolower( $m[1] ) );
- if ( isset( $allNames[$code] ) ) {
- $names[$code] = $allNames[$code];
- }
+ $code = self::getCodeFromFileName( $file, 'Messages' );
+ if ( $code && isset( $allNames[$code] ) ) {
+ $names[$code] = $allNames[$code];
}
}
closedir( $dir );
@@ -458,11 +523,11 @@ class Language {
function getHebrewCalendarMonthNameGen( $key ) {
return $this->getMessageFromDB( self::$mHebrewCalendarMonthGenMsgs[$key-1] );
}
-
+
function getHijriCalendarMonthName( $key ) {
return $this->getMessageFromDB( self::$mHijriCalendarMonthMsgs[$key-1] );
}
-
+
/**
* Used by date() and time() to adjust the time output.
*
@@ -514,7 +579,7 @@ class Language {
wfSuppressWarnings(); // E_STRICT system time bitching
# Generate an adjusted date; take advantage of the fact that mktime
- # will normalize out-of-range values so we don't have to split $minDiff
+ # will normalize out-of-range values so we don't have to split $minDiff
# into hours and minutes.
$t = mktime( (
(int)substr( $ts, 8, 2) ), # Hours
@@ -523,19 +588,19 @@ class Language {
(int)substr( $ts, 4, 2 ), # Month
(int)substr( $ts, 6, 2 ), # Day
(int)substr( $ts, 0, 4 ) ); #Year
-
+
$date = date( 'YmdHis', $t );
wfRestoreWarnings();
-
+
return $date;
}
/**
* This is a workalike of PHP's date() function, but with better
- * internationalisation, a reduced set of format characters, and a better
+ * internationalisation, a reduced set of format characters, and a better
* escaping format.
*
- * Supported format characters are dDjlNwzWFmMntLoYyaAgGhHiscrU. See the
+ * Supported format characters are dDjlNwzWFmMntLoYyaAgGhHiscrU. See the
* PHP manual for definitions. "o" format character is supported since
* PHP 5.1.0, previous versions return literal o.
* There are a number of extensions, which start with "x":
@@ -566,6 +631,11 @@ class Language {
*
* xkY Y (full year) in Thai solar calendar. Months and days are
* identical to the Gregorian calendar
+ * xoY Y (full year) in Minguo calendar or Juche year.
+ * Months and days are identical to the
+ * Gregorian calendar
+ * xtY Y (full year) in Japanese nengo. Months and days are
+ * identical to the Gregorian calendar
*
* Characters enclosed in double quotes will be considered literal (with
* the quotes themselves removed). Unmatched quotes will be considered
@@ -578,7 +648,7 @@ class Language {
*
* Input timestamp is assumed to be pre-normalized to the desired local
* time zone, if any.
- *
+ *
* @param $format String
* @param $ts String: 14-character timestamp
* YYYYMMDDHHMMSS
@@ -597,6 +667,8 @@ class Language {
$hebrew = false;
$hijri = false;
$thai = false;
+ $minguo = false;
+ $tenno = false;
for ( $p = 0; $p < strlen( $format ); $p++ ) {
$num = false;
$code = $format[$p];
@@ -604,7 +676,7 @@ class Language {
$code .= $format[++$p];
}
- if ( ( $code === 'xi' || $code == 'xj' || $code == 'xk' || $code == 'xm' ) && $p < strlen( $format ) - 1 ) {
+ if ( ( $code === 'xi' || $code == 'xj' || $code == 'xk' || $code == 'xm' || $code == 'xo' || $code == 'xt' ) && $p < strlen( $format ) - 1 ) {
$code .= $format[++$p];
}
@@ -748,9 +820,17 @@ class Language {
$num = $hebrew[0];
break;
case 'xkY':
- if ( !$thai ) $thai = self::tsToThai( $ts );
+ if ( !$thai ) $thai = self::tsToYear( $ts, 'thai' );
$num = $thai[0];
break;
+ case 'xoY':
+ if ( !$minguo ) $minguo = self::tsToYear( $ts, 'minguo' );
+ $num = $minguo[0];
+ break;
+ case 'xtY':
+ if ( !$tenno ) $tenno = self::tsToYear( $ts, 'tenno' );
+ $num = $tenno[0];
+ break;
case 'y':
$num = substr( $ts, 2, 2 );
break;
@@ -770,7 +850,7 @@ class Language {
case 'h':
$h = substr( $ts, 8, 2 );
$num = sprintf( '%02d', $h % 12 ? $h % 12 : 12 );
- break;
+ break;
case 'H':
$num = substr( $ts, 8, 2 );
break;
@@ -841,11 +921,11 @@ class Language {
private static $GREG_DAYS = array( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
private static $IRANIAN_DAYS = array( 31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29 );
/**
- * Algorithm by Roozbeh Pournader and Mohammad Toossi to convert
+ * Algorithm by Roozbeh Pournader and Mohammad Toossi to convert
* Gregorian dates to Iranian dates. Originally written in C, it
* is released under the terms of GNU Lesser General Public
* License. Conversion to PHP was performed by Niklas Laxström.
- *
+ *
* Link: http://www.farsiweb.info/jalali/jalali.c
*/
private static function tsToIranian( $ts ) {
@@ -872,7 +952,7 @@ class Language {
// Days passed in current month
$gDayNo += $gd;
-
+
$jDayNo = $gDayNo - 79;
$jNp = floor($jDayNo / 12053);
@@ -906,7 +986,7 @@ class Language {
$year = substr( $ts, 0, 4 );
$month = substr( $ts, 4, 2 );
$day = substr( $ts, 6, 2 );
-
+
$zyr = $year;
$zd=$day;
$zm=$month;
@@ -916,15 +996,15 @@ class Language {
if (($zy>1582)||(($zy==1582)&&($zm>10))||(($zy==1582)&&($zm==10)&&($zd>14)))
{
-
-
+
+
$zjd=(int)((1461*($zy + 4800 + (int)( ($zm-14) /12) ))/4) + (int)((367*($zm-2-12*((int)(($zm-14)/12))))/12)-(int)((3*(int)(( ($zy+4900+(int)(($zm-14)/12))/100)))/4)+$zd-32075;
}
else
{
$zjd = 367*$zy-(int)((7*($zy+5001+(int)(($zm-9)/7)))/4)+(int)((275*$zm)/9)+$zd+1729777;
}
-
+
$zl=$zjd-1948440+10632;
$zn=(int)(($zl-1)/10631);
$zl=$zl-10631*$zn+354;
@@ -1112,26 +1192,72 @@ class Language {
}
/**
- * Algorithm to convert Gregorian dates to Thai solar dates.
+ * Algorithm to convert Gregorian dates to Thai solar dates,
+ * Minguo dates or Minguo dates.
*
* Link: http://en.wikipedia.org/wiki/Thai_solar_calendar
+ * http://en.wikipedia.org/wiki/Minguo_calendar
+ * http://en.wikipedia.org/wiki/Japanese_era_name
*
- * @param $ts String: 14-character timestamp
+ * @param $ts String: 14-character timestamp, calender name
* @return array converted year, month, day
*/
- private static function tsToThai( $ts ) {
+ private static function tsToYear( $ts, $cName ) {
$gy = substr( $ts, 0, 4 );
$gm = substr( $ts, 4, 2 );
$gd = substr( $ts, 6, 2 );
- # Add 543 years to the Gregorian calendar
- # Months and days are identical
- $gy_thai = $gy + 543;
+ if (!strcmp($cName,'thai')) {
+ # Thai solar dates
+ # Add 543 years to the Gregorian calendar
+ # Months and days are identical
+ $gy_offset = $gy + 543;
+ } else if ((!strcmp($cName,'minguo')) || !strcmp($cName,'juche')) {
+ # Minguo dates
+ # Deduct 1911 years from the Gregorian calendar
+ # Months and days are identical
+ $gy_offset = $gy - 1911;
+ } else if (!strcmp($cName,'tenno')) {
+ # Nengō dates up to Meiji period
+ # Deduct years from the Gregorian calendar
+ # depending on the nengo periods
+ # Months and days are identical
+ if (($gy < 1912) || (($gy == 1912) && ($gm < 7)) || (($gy == 1912) && ($gm == 7) && ($gd < 31))) {
+ # Meiji period
+ $gy_gannen = $gy - 1868 + 1;
+ $gy_offset = $gy_gannen;
+ if ($gy_gannen == 1)
+ $gy_offset = '元';
+ $gy_offset = '明治'.$gy_offset;
+ } else if ((($gy == 1912) && ($gm == 7) && ($gd == 31)) || (($gy == 1912) && ($gm >= 8)) || (($gy > 1912) && ($gy < 1926)) || (($gy == 1926) && ($gm < 12)) || (($gy == 1926) && ($gm == 12) && ($gd < 26))) {
+ # Taishō period
+ $gy_gannen = $gy - 1912 + 1;
+ $gy_offset = $gy_gannen;
+ if ($gy_gannen == 1)
+ $gy_offset = '元';
+ $gy_offset = '大正'.$gy_offset;
+ } else if ((($gy == 1926) && ($gm == 12) && ($gd >= 26)) || (($gy > 1926) && ($gy < 1989)) || (($gy == 1989) && ($gm == 1) && ($gd < 8))) {
+ # Shōwa period
+ $gy_gannen = $gy - 1926 + 1;
+ $gy_offset = $gy_gannen;
+ if ($gy_gannen == 1)
+ $gy_offset = '元';
+ $gy_offset = '昭和'.$gy_offset;
+ } else {
+ # Heisei period
+ $gy_gannen = $gy - 1989 + 1;
+ $gy_offset = $gy_gannen;
+ if ($gy_gannen == 1)
+ $gy_offset = '元';
+ $gy_offset = '平成'.$gy_offset;
+ }
+ } else {
+ $gy_offset = $gy;
+ }
- return array( $gy_thai, $gm, $gd );
+ return array( $gy_offset, $gm, $gd );
}
-
/**
* Roman number formatting up to 3000
*/
@@ -1142,7 +1268,7 @@ class Language {
array( '', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM', 'M' ),
array( '', 'M', 'MM', 'MMM' )
);
-
+
$num = intval( $num );
if ( $num > 3000 || $num <= 0 ) {
return $num;
@@ -1252,11 +1378,33 @@ class Language {
if( $datePreference == '' ) {
return 'default';
}
-
+
return $datePreference;
}
/**
+ * Get a format string for a given type and preference
+ * @param $type May be date, time or both
+ * @param $pref The format name as it appears in Messages*.php
+ */
+ function getDateFormatString( $type, $pref ) {
+ if ( !isset( $this->dateFormatStrings[$type][$pref] ) ) {
+ if ( $pref == 'default' ) {
+ $pref = $this->getDefaultDateFormat();
+ $df = self::$dataCache->getSubitem( $this->mCode, 'dateFormats', "$pref $type" );
+ } else {
+ $df = self::$dataCache->getSubitem( $this->mCode, 'dateFormats', "$pref $type" );
+ if ( is_null( $df ) ) {
+ $pref = $this->getDefaultDateFormat();
+ $df = self::$dataCache->getSubitem( $this->mCode, 'dateFormats', "$pref $type" );
+ }
+ }
+ $this->dateFormatStrings[$type][$pref] = $df;
+ }
+ return $this->dateFormatStrings[$type][$pref];
+ }
+
+ /**
* @param $ts Mixed: the time format which needs to be turned into a
* date('YmdHis') format with wfTimestamp(TS_MW,$ts)
* @param $adj Bool: whether to adjust the time output according to the
@@ -1267,16 +1415,11 @@ class Language {
* @return string
*/
function date( $ts, $adj = false, $format = true, $timecorrection = false ) {
- $this->load();
- if ( $adj ) {
- $ts = $this->userAdjust( $ts, $timecorrection );
- }
-
- $pref = $this->dateFormat( $format );
- if( $pref == 'default' || !isset( $this->dateFormats["$pref date"] ) ) {
- $pref = $this->defaultDateFormat;
+ if ( $adj ) {
+ $ts = $this->userAdjust( $ts, $timecorrection );
}
- return $this->sprintfDate( $this->dateFormats["$pref date"], $ts );
+ $df = $this->getDateFormatString( 'date', $this->dateFormat( $format ) );
+ return $this->sprintfDate( $df, $ts );
}
/**
@@ -1290,16 +1433,11 @@ class Language {
* @return string
*/
function time( $ts, $adj = false, $format = true, $timecorrection = false ) {
- $this->load();
- if ( $adj ) {
- $ts = $this->userAdjust( $ts, $timecorrection );
- }
-
- $pref = $this->dateFormat( $format );
- if( $pref == 'default' || !isset( $this->dateFormats["$pref time"] ) ) {
- $pref = $this->defaultDateFormat;
+ if ( $adj ) {
+ $ts = $this->userAdjust( $ts, $timecorrection );
}
- return $this->sprintfDate( $this->dateFormats["$pref time"], $ts );
+ $df = $this->getDateFormatString( 'time', $this->dateFormat( $format ) );
+ return $this->sprintfDate( $df, $ts );
}
/**
@@ -1314,69 +1452,74 @@ class Language {
* @return string
*/
function timeanddate( $ts, $adj = false, $format = true, $timecorrection = false) {
- $this->load();
-
$ts = wfTimestamp( TS_MW, $ts );
-
- if ( $adj ) {
- $ts = $this->userAdjust( $ts, $timecorrection );
- }
-
- $pref = $this->dateFormat( $format );
- if( $pref == 'default' || !isset( $this->dateFormats["$pref both"] ) ) {
- $pref = $this->defaultDateFormat;
+ if ( $adj ) {
+ $ts = $this->userAdjust( $ts, $timecorrection );
}
-
- return $this->sprintfDate( $this->dateFormats["$pref both"], $ts );
+ $df = $this->getDateFormatString( 'both', $this->dateFormat( $format ) );
+ return $this->sprintfDate( $df, $ts );
}
function getMessage( $key ) {
- $this->load();
- return isset( $this->messages[$key] ) ? $this->messages[$key] : null;
+ return self::$dataCache->getSubitem( $this->mCode, 'messages', $key );
}
function getAllMessages() {
- $this->load();
- return $this->messages;
+ return self::$dataCache->getItem( $this->mCode, 'messages' );
}
function iconv( $in, $out, $string ) {
- # For most languages, this is a wrapper for iconv
- return iconv( $in, $out . '//IGNORE', $string );
+ # This is a wrapper for iconv in all languages except esperanto,
+ # which does some nasty x-conversions beforehand
+
+ # Even with //IGNORE iconv can whine about illegal characters in
+ # *input* string. We just ignore those too.
+ # REF: http://bugs.php.net/bug.php?id=37166
+ # REF: https://bugzilla.wikimedia.org/show_bug.cgi?id=16885
+ wfSuppressWarnings();
+ $text = iconv( $in, $out . '//IGNORE', $string );
+ wfRestoreWarnings();
+ return $text;
}
// callback functions for uc(), lc(), ucwords(), ucwordbreaks()
function ucwordbreaksCallbackAscii($matches){
return $this->ucfirst($matches[1]);
}
-
+
function ucwordbreaksCallbackMB($matches){
return mb_strtoupper($matches[0]);
}
-
+
function ucCallback($matches){
list( $wikiUpperChars ) = self::getCaseMaps();
return strtr( $matches[1], $wikiUpperChars );
}
-
+
function lcCallback($matches){
list( , $wikiLowerChars ) = self::getCaseMaps();
return strtr( $matches[1], $wikiLowerChars );
}
-
+
function ucwordsCallbackMB($matches){
return mb_strtoupper($matches[0]);
}
-
+
function ucwordsCallbackWiki($matches){
list( $wikiUpperChars ) = self::getCaseMaps();
return strtr( $matches[0], $wikiUpperChars );
}
function ucfirst( $str ) {
- if ( empty($str) ) return $str;
- if ( ord($str[0]) < 128 ) return ucfirst($str);
- else return self::uc($str,true); // fall back to more complex logic in case of multibyte strings
+ $o = ord( $str );
+ if ( $o < 96 ) {
+ return $str;
+ } elseif ( $o < 128 ) {
+ return ucfirst($str);
+ } else {
+ // fall back to more complex logic in case of multibyte strings
+ return self::uc($str,true);
+ }
}
function uc( $str, $first = false ) {
@@ -1404,15 +1547,19 @@ class Language {
}
}
}
-
+
function lcfirst( $str ) {
- if ( empty($str) ) return $str;
- if ( is_string( $str ) && ord($str[0]) < 128 ) {
- // editing string in place = cool
- $str[0]=strtolower($str[0]);
+ $o = ord( $str );
+ if ( !$o ) {
+ return strval( $str );
+ } elseif ( $o >= 128 ) {
+ return self::lc( $str, true );
+ } elseif ( $o > 96 ) {
+ return $str;
+ } else {
+ $str[0] = strtolower( $str[0] );
return $str;
}
- else return self::lc( $str, true );
}
function lc( $str, $first = false ) {
@@ -1455,7 +1602,7 @@ class Language {
array($this,"ucwordsCallbackMB"),
$str
);
- else
+ else
return preg_replace_callback(
$replaceRegexp,
array($this,"ucwordsCallbackWiki"),
@@ -1483,7 +1630,7 @@ class Language {
array($this,"ucwordbreaksCallbackMB"),
$str
);
- else
+ else
return preg_replace_callback(
$replaceRegexp,
array($this,"ucwordsCallbackWiki"),
@@ -1500,7 +1647,7 @@ class Language {
/**
* Return a case-folded representation of $s
*
- * This is a representation such that caseFold($s1)==caseFold($s2) if $s1
+ * This is a representation such that caseFold($s1)==caseFold($s2) if $s1
* and $s2 are the same except for the case of their characters. It is not
* necessary for the value returned to make sense when displayed.
*
@@ -1528,89 +1675,55 @@ class Language {
}
function fallback8bitEncoding() {
- $this->load();
- return $this->fallback8bitEncoding;
+ return self::$dataCache->getItem( $this->mCode, 'fallback8bitEncoding' );
+ }
+
+ /**
+ * Most writing systems use whitespace to break up words.
+ * Some languages such as Chinese don't conventionally do this,
+ * which requires special handling when breaking up words for
+ * searching etc.
+ */
+ function hasWordBreaks() {
+ return true;
}
/**
- * Some languages have special punctuation to strip out
- * or characters which need to be converted for MySQL's
- * indexing to grok it correctly. Make such changes here.
- *
+ * Some languages such as Chinese require word segmentation,
+ * Specify such segmentation when overridden in derived class.
+ *
* @param $string String
* @return String
*/
- function stripForSearch( $string ) {
- global $wgDBtype;
- if ( $wgDBtype != 'mysql' ) {
- return $string;
- }
-
-
- wfProfileIn( __METHOD__ );
-
- // MySQL fulltext index doesn't grok utf-8, so we
- // need to fold cases and convert to hex
- $out = preg_replace_callback(
- "/([\\xc0-\\xff][\\x80-\\xbf]*)/",
- array( $this, 'stripForSearchCallback' ),
- $this->lc( $string ) );
-
- // And to add insult to injury, the default indexing
- // ignores short words... Pad them so we can pass them
- // through without reconfiguring the server...
- $minLength = $this->minSearchLength();
- if( $minLength > 1 ) {
- $n = $minLength-1;
- $out = preg_replace(
- "/\b(\w{1,$n})\b/",
- "$1u800",
- $out );
- }
-
- // Periods within things like hostnames and IP addresses
- // are also important -- we want a search for "example.com"
- // or "192.168.1.1" to work sanely.
- //
- // MySQL's search seems to ignore them, so you'd match on
- // "example.wikipedia.com" and "192.168.83.1" as well.
- $out = preg_replace(
- "/(\w)\.(\w|\*)/u",
- "$1u82e$2",
- $out );
-
- wfProfileOut( __METHOD__ );
- return $out;
+ function wordSegmentation( $string ) {
+ return $string;
}
-
+
/**
- * Armor a case-folded UTF-8 string to get through MySQL's
- * fulltext search without being mucked up by funny charset
- * settings or anything else of the sort.
+ * Some languages have special punctuation need to be normalized.
+ * Make such changes here.
+ *
+ * @param $string String
+ * @return String
*/
- protected function stripForSearchCallback( $matches ) {
- return 'u8' . bin2hex( $matches[1] );
+ function normalizeForSearch( $string ) {
+ return $string;
}
-
+
/**
- * Check MySQL server's ft_min_word_len setting so we know
- * if we need to pad short words...
- */
- protected function minSearchLength() {
- if( !isset( $this->minSearchLength ) ) {
- $sql = "show global variables like 'ft\\_min\\_word\\_len'";
- $dbr = wfGetDB( DB_SLAVE );
- $result = $dbr->query( $sql );
- $row = $result->fetchObject();
- $result->free();
-
- if( $row && $row->Variable_name == 'ft_min_word_len' ) {
- $this->minSearchLength = intval( $row->Value );
- } else {
- $this->minSearchLength = 0;
- }
- }
- return $this->minSearchLength;
+ * convert double-width roman characters to single-width.
+ * range: ff00-ff5f ~= 0020-007f
+ */
+ protected static function convertDoubleWidth( $string ) {
+ $string = preg_replace( '/\xef\xbc([\x80-\xbf])/e', 'chr((ord("$1") & 0x3f) + 0x20)', $string );
+ $string = preg_replace( '/\xef\xbd([\x80-\x99])/e', 'chr((ord("$1") & 0x3f) + 0x60)', $string );
+ return $string;
+ }
+
+ protected static function insertSpace( $string, $pattern ) {
+ $string = preg_replace( $pattern, " $1 ", $string );
+ $string = preg_replace( '/ +/', ' ', $string );
+ return $string;
}
function convertForSearchResult( $termsArray ) {
@@ -1620,7 +1733,7 @@ class Language {
}
/**
- * Get the first character of a string.
+ * Get the first character of a string.
*
* @param $s string
* @return string
@@ -1634,7 +1747,7 @@ class Language {
if ( strlen( $matches[1] ) != 3 ) {
return $matches[1];
}
-
+
// Break down Hangul syllables to grab the first jamo
$code = utf8ToCodepoint( $matches[1] );
if ( $code < 0xac00 || 0xd7a4 <= $code) {
@@ -1712,13 +1825,74 @@ class Language {
}
/**
+ * Convert a UTF-8 string to normal form C. In Malayalam and Arabic, this
+ * also cleans up certain backwards-compatible sequences, converting them
+ * to the modern Unicode equivalent.
+ *
+ * This is language-specific for performance reasons only.
+ */
+ function normalize( $s ) {
+ return UtfNormal::cleanUp( $s );
+ }
+
+ /**
+ * Transform a string using serialized data stored in the given file (which
+ * must be in the serialized subdirectory of $IP). The file contains pairs
+ * mapping source characters to destination characters.
+ *
+ * The data is cached in process memory. This will go faster if you have the
+ * FastStringSearch extension.
+ */
+ function transformUsingPairFile( $file, $string ) {
+ if ( !isset( $this->transformData[$file] ) ) {
+ $data = wfGetPrecompiledData( $file );
+ if ( $data === false ) {
+ throw new MWException( __METHOD__.": The transformation file $file is missing" );
+ }
+ $this->transformData[$file] = new ReplacementArray( $data );
+ }
+ return $this->transformData[$file]->replace( $string );
+ }
+
+ /**
* For right-to-left language support
*
* @return bool
*/
- function isRTL() {
- $this->load();
- return $this->rtl;
+ function isRTL() {
+ return self::$dataCache->getItem( $this->mCode, 'rtl' );
+ }
+
+ /**
+ * Return the correct HTML 'dir' attribute value for this language.
+ * @return String
+ */
+ function getDir() {
+ return $this->isRTL() ? 'rtl' : 'ltr';
+ }
+
+ /**
+ * Return 'left' or 'right' as appropriate alignment for line-start
+ * for this language's text direction.
+ *
+ * Should be equivalent to CSS3 'start' text-align value....
+ *
+ * @return String
+ */
+ function alignStart() {
+ return $this->isRTL() ? 'right' : 'left';
+ }
+
+ /**
+ * Return 'right' or 'left' as appropriate alignment for line-end
+ * for this language's text direction.
+ *
+ * Should be equivalent to CSS3 'end' text-align value....
+ *
+ * @return String
+ */
+ function alignEnd() {
+ return $this->isRTL() ? 'left' : 'right';
}
/**
@@ -1730,6 +1904,10 @@ class Language {
return $this->isRTL() ? "\xE2\x80\x8F" : "\xE2\x80\x8E";
}
+ function capitalizeAllNouns() {
+ return self::$dataCache->getItem( $this->mCode, 'capitalizeAllNouns' );
+ }
+
/**
* An arrow, depending on the language direction
*
@@ -1745,34 +1923,29 @@ class Language {
* @return bool
*/
function linkPrefixExtension() {
- $this->load();
- return $this->linkPrefixExtension;
+ return self::$dataCache->getItem( $this->mCode, 'linkPrefixExtension' );
}
- function &getMagicWords() {
- $this->load();
- return $this->magicWords;
+ function getMagicWords() {
+ return self::$dataCache->getItem( $this->mCode, 'magicWords' );
}
# Fill a MagicWord object with data from here
- function getMagic( &$mw ) {
+ function getMagic( $mw ) {
if ( !$this->mMagicHookDone ) {
$this->mMagicHookDone = true;
+ wfProfileIn( 'LanguageGetMagic' );
wfRunHooks( 'LanguageGetMagic', array( &$this->mMagicExtensions, $this->getCode() ) );
+ wfProfileOut( 'LanguageGetMagic' );
}
if ( isset( $this->mMagicExtensions[$mw->mId] ) ) {
$rawEntry = $this->mMagicExtensions[$mw->mId];
} else {
- $magicWords =& $this->getMagicWords();
+ $magicWords = $this->getMagicWords();
if ( isset( $magicWords[$mw->mId] ) ) {
$rawEntry = $magicWords[$mw->mId];
} else {
- # Fall back to English if local list is incomplete
- $magicWords =& Language::getMagicWords();
- if ( !isset($magicWords[$mw->mId]) ) {
- throw new MWException("Magic word '{$mw->mId}' not found" );
- }
- $rawEntry = $magicWords[$mw->mId];
+ $rawEntry = false;
}
}
@@ -1810,43 +1983,11 @@ class Language {
* case folded alias => real name
*/
function getSpecialPageAliases() {
- $this->load();
-
// Cache aliases because it may be slow to load them
- if ( !isset( $this->mExtendedSpecialPageAliases ) ) {
-
+ if ( is_null( $this->mExtendedSpecialPageAliases ) ) {
// Initialise array
- $this->mExtendedSpecialPageAliases = $this->specialPageAliases;
-
- global $wgExtensionAliasesFiles;
- foreach ( $wgExtensionAliasesFiles as $file ) {
-
- // Fail fast
- if ( !file_exists($file) )
- throw new MWException( "Aliases file does not exist: $file" );
-
- $aliases = array();
- require($file);
-
- // Check the availability of aliases
- if ( !isset($aliases['en']) )
- throw new MWException( "Malformed aliases file: $file" );
-
- // Merge all aliases in fallback chain
- $code = $this->getCode();
- do {
- if ( !isset($aliases[$code]) ) continue;
-
- $aliases[$code] = $this->fixSpecialPageAliases( $aliases[$code] );
- /* Merge the aliases, THIS will break if there is special page name
- * which looks like a numerical key, thanks to PHP...
- * See the array_merge_recursive manual entry */
- $this->mExtendedSpecialPageAliases = array_merge_recursive(
- $this->mExtendedSpecialPageAliases, $aliases[$code] );
-
- } while ( $code = self::getFallbackFor( $code ) );
- }
-
+ $this->mExtendedSpecialPageAliases =
+ self::$dataCache->getItem( $this->mCode, 'specialPageAliases' );
wfRunHooks( 'LanguageGetSpecialPageAliases',
array( &$this->mExtendedSpecialPageAliases, $this->getCode() ) );
}
@@ -1855,20 +1996,6 @@ class Language {
}
/**
- * Function to fix special page aliases. Will convert the first letter to
- * upper case and spaces to underscores. Can be given a full aliases array,
- * in which case it will recursively fix all aliases.
- */
- public function fixSpecialPageAliases( $mixed ) {
- // Work recursively until in string level
- if ( is_array($mixed) ) {
- $callback = array( $this, 'fixSpecialPageAliases' );
- return array_map( $callback, $mixed );
- }
- return str_replace( ' ', '_', $this->ucfirst( $mixed ) );
- }
-
- /**
* Italic is unsuitable for some languages
*
* @param $text String: the text to be emphasized.
@@ -1940,13 +2067,11 @@ class Language {
}
function digitTransformTable() {
- $this->load();
- return $this->digitTransformTable;
+ return self::$dataCache->getItem( $this->mCode, 'digitTransformTable' );
}
function separatorTransformTable() {
- $this->load();
- return $this->separatorTransformTable;
+ return self::$dataCache->getItem( $this->mCode, 'separatorTransformTable' );
}
@@ -1987,7 +2112,7 @@ class Language {
function commaList( $list ) {
return implode(
$list,
- wfMsgExt( 'comma-separator', array( 'escapenoentities', 'language' => $this ) ) );
+ wfMsgExt( 'comma-separator', array( 'parsemag', 'escapenoentities', 'language' => $this ) ) );
}
/**
@@ -1999,7 +2124,7 @@ class Language {
function semicolonList( $list ) {
return implode(
$list,
- wfMsgExt( 'semicolon-separator', array( 'escapenoentities', 'language' => $this ) ) );
+ wfMsgExt( 'semicolon-separator', array( 'parsemag', 'escapenoentities', 'language' => $this ) ) );
}
/**
@@ -2022,7 +2147,7 @@ class Language {
* are included, otherwise broken characters can be passed to the user
*
* If $length is negative, the string will be truncated from the beginning
- *
+ *
* @param $string String to truncate
* @param $length Int: maximum length (excluding ellipses)
* @param $ellipsis String to append to the truncated text
@@ -2040,6 +2165,7 @@ class Language {
if ( strlen( $string ) <= abs( $length ) ) {
return $string;
}
+ $stringOriginal = $string;
if( $length > 0 ) {
$string = substr( $string, 0, $length );
$char = ord( $string[strlen( $string ) - 1] );
@@ -2053,7 +2179,8 @@ class Language {
# We chopped in the middle of a character; remove it
$string = $m[1];
}
- return $string . $ellipsis;
+ $string = $string . $ellipsis;
+
} else {
$string = substr( $string, $length );
$char = ord( $string[0] );
@@ -2061,7 +2188,13 @@ class Language {
# We chopped in the middle of a character; remove the whole thing
$string = preg_replace( '/^[\x80-\xbf]+/', '', $string );
}
- return $ellipsis . $string;
+ $string = $ellipsis . $string;
+ }
+ # Do not truncate if the ellipsis actually make the string longer. Bug 22181
+ if ( strlen( $string ) < strlen( $stringOriginal ) ) {
+ return $string;
+ } else {
+ return $stringOriginal;
}
}
@@ -2181,14 +2314,19 @@ class Language {
return $text;
}
+ # convert text to all supported variants
+ function autoConvertToAllVariants($text) {
+ return $this->mConverter->autoConvertToAllVariants($text);
+ }
+
# convert text to different variants of a language.
- function convert( $text, $isTitle = false) {
- return $this->mConverter->convert($text, $isTitle);
+ function convert( $text ) {
+ return $this->mConverter->convert( $text );
}
- # Convert text from within Parser
- function parserConvert( $text, &$parser ) {
- return $this->mConverter->parserConvert( $text, $parser );
+ # Convert a Title object to a string in the preferred variant
+ function convertTitle( $title ) {
+ return $this->mConverter->convertTitle( $title );
}
# Check if this is a language with variants
@@ -2197,15 +2335,15 @@ class Language {
}
# Put custom tags (e.g. -{ }-) around math to prevent conversion
- function armourMath($text){
+ function armourMath($text){
return $this->mConverter->armourMath($text);
}
/**
* Perform output conversion on a string, and encode for safe HTML output.
- * @param $text String
- * @param $isTitle Bool -- wtf?
+ * @param $text String text to be converted
+ * @param $isTitle Bool whether this conversion is for the article title
* @return string
* @todo this should get integrated somewhere sane
*/
@@ -2228,8 +2366,8 @@ class Language {
}
- function getPreferredVariant( $fromUser = true ) {
- return $this->mConverter->getPreferredVariant( $fromUser );
+ function getPreferredVariant( $fromUser = true, $fromHeader = false ) {
+ return $this->mConverter->getPreferredVariant( $fromUser, $fromHeader );
}
/**
@@ -2298,8 +2436,7 @@ class Language {
* @return string
*/
function linkTrail() {
- $this->load();
- return $this->linkTrail;
+ return self::$dataCache->getItem( $this->mCode, 'linkTrail' );
}
function getLangObj() {
@@ -2317,10 +2454,34 @@ class Language {
$this->mCode = $code;
}
+ /**
+ * Get the name of a file for a certain language code
+ * @param $prefix string Prepend this to the filename
+ * @param $code string Language code
+ * @param $suffix string Append this to the filename
+ * @return string $prefix . $mangledCode . $suffix
+ */
static function getFileName( $prefix = 'Language', $code, $suffix = '.php' ) {
return $prefix . str_replace( '-', '_', ucfirst( $code ) ) . $suffix;
}
+ /**
+ * Get the language code from a file name. Inverse of getFileName()
+ * @param $filename string $prefix . $languageCode . $suffix
+ * @param $prefix string Prefix before the language code
+ * @param $suffix string Suffix after the language code
+ * @return Language code, or false if $prefix or $suffix isn't found
+ */
+ static function getCodeFromFileName( $filename, $prefix = 'Language', $suffix = '.php' ) {
+ $m = null;
+ preg_match( '/' . preg_quote( $prefix, '/' ) . '([A-Z][a-z_]+)' .
+ preg_quote( $suffix, '/' ) . '/', $filename, $m );
+ if ( !count( $m ) ) {
+ return false;
+ }
+ return str_replace( '_', '-', strtolower( $m[1] ) );
+ }
+
static function getMessagesFileName( $code ) {
global $IP;
return self::getFileName( "$IP/languages/messages/Messages", $code, '.php' );
@@ -2330,305 +2491,32 @@ class Language {
global $IP;
return self::getFileName( "$IP/languages/classes/Language", $code, '.php' );
}
-
- static function getLocalisationArray( $code, $disableCache = false ) {
- self::loadLocalisation( $code, $disableCache );
- return self::$mLocalisationCache[$code];
- }
-
- /**
- * Load localisation data for a given code into the static cache
- *
- * @return array Dependencies, map of filenames to mtimes
- */
- static function loadLocalisation( $code, $disableCache = false ) {
- static $recursionGuard = array();
- global $wgMemc, $wgEnableSerializedMessages, $wgCheckSerialized;
-
- if ( !$code ) {
- throw new MWException( "Invalid language code requested" );
- }
-
- if ( !$disableCache ) {
- # Try the per-process cache
- if ( isset( self::$mLocalisationCache[$code] ) ) {
- return self::$mLocalisationCache[$code]['deps'];
- }
-
- wfProfileIn( __METHOD__ );
-
- # Try the serialized directory
- if( $wgEnableSerializedMessages ) {
- $cache = wfGetPrecompiledData( self::getFileName( "Messages", $code, '.ser' ) );
- if ( $cache ) {
- if ( $wgCheckSerialized && self::isLocalisationOutOfDate( $cache ) ) {
- $cache = false;
- wfDebug( "Language::loadLocalisation(): precompiled data file for $code is out of date\n" );
- } else {
- self::$mLocalisationCache[$code] = $cache;
- wfDebug( "Language::loadLocalisation(): got localisation for $code from precompiled data file\n" );
- wfProfileOut( __METHOD__ );
- return self::$mLocalisationCache[$code]['deps'];
- }
- }
- }
-
- # Try the global cache
- $memcKey = wfMemcKey('localisation', $code );
- $fbMemcKey = wfMemcKey('fallback', $cache['fallback'] );
- $cache = $wgMemc->get( $memcKey );
- if ( $cache ) {
- if ( self::isLocalisationOutOfDate( $cache ) ) {
- $wgMemc->delete( $memcKey );
- $wgMemc->delete( $fbMemcKey );
- $cache = false;
- wfDebug( "Language::loadLocalisation(): localisation cache for $code had expired\n" );
- } else {
- self::$mLocalisationCache[$code] = $cache;
- wfDebug( "Language::loadLocalisation(): got localisation for $code from cache\n" );
- wfProfileOut( __METHOD__ );
- return $cache['deps'];
- }
- }
- } else {
- wfProfileIn( __METHOD__ );
- }
-
- # Default fallback, may be overridden when the messages file is included
- if ( $code != 'en' ) {
- $fallback = 'en';
- } else {
- $fallback = false;
- }
-
- # Load the primary localisation from the source file
- $filename = self::getMessagesFileName( $code );
- if ( !file_exists( $filename ) ) {
- wfDebug( "Language::loadLocalisation(): no localisation file for $code, using implicit fallback to en\n" );
- $cache = compact( self::$mLocalisationKeys ); // Set correct fallback
- $deps = array();
- } else {
- $deps = array( $filename => filemtime( $filename ) );
- require( $filename );
- $cache = compact( self::$mLocalisationKeys );
- wfDebug( "Language::loadLocalisation(): got localisation for $code from source\n" );
- }
-
- # Load magic word source file
- global $IP;
- $filename = "$IP/includes/MagicWord.php";
- $newDeps = array( $filename => filemtime( $filename ) );
- $deps = array_merge( $deps, $newDeps );
-
- if ( !empty( $fallback ) ) {
- # Load the fallback localisation, with a circular reference guard
- if ( isset( $recursionGuard[$code] ) ) {
- throw new MWException( "Error: Circular fallback reference in language code $code" );
- }
- $recursionGuard[$code] = true;
- $newDeps = self::loadLocalisation( $fallback, $disableCache );
- unset( $recursionGuard[$code] );
-
- $secondary = self::$mLocalisationCache[$fallback];
- $deps = array_merge( $deps, $newDeps );
-
- # Merge the fallback localisation with the current localisation
- foreach ( self::$mLocalisationKeys as $key ) {
- if ( isset( $cache[$key] ) ) {
- if ( isset( $secondary[$key] ) ) {
- if ( in_array( $key, self::$mMergeableMapKeys ) ) {
- $cache[$key] = $cache[$key] + $secondary[$key];
- } elseif ( in_array( $key, self::$mMergeableListKeys ) ) {
- $cache[$key] = array_merge( $secondary[$key], $cache[$key] );
- } elseif ( in_array( $key, self::$mMergeableAliasListKeys ) ) {
- $cache[$key] = array_merge_recursive( $cache[$key], $secondary[$key] );
- }
- }
- } else {
- $cache[$key] = $secondary[$key];
- }
- }
-
- # Merge bookstore lists if requested
- if ( !empty( $cache['bookstoreList']['inherit'] ) ) {
- $cache['bookstoreList'] = array_merge( $cache['bookstoreList'], $secondary['bookstoreList'] );
- }
- if ( isset( $cache['bookstoreList']['inherit'] ) ) {
- unset( $cache['bookstoreList']['inherit'] );
- }
- }
-
- # Add dependencies to the cache entry
- $cache['deps'] = $deps;
-
- # Replace spaces with underscores in namespace names
- $cache['namespaceNames'] = str_replace( ' ', '_', $cache['namespaceNames'] );
-
- # And do the same for specialpage aliases. $page is an array.
- foreach ( $cache['specialPageAliases'] as &$page ) {
- $page = str_replace( ' ', '_', $page );
- }
- # Decouple the reference to prevent accidental damage
- unset($page);
-
- # Save to both caches
- self::$mLocalisationCache[$code] = $cache;
- if ( !$disableCache ) {
- $wgMemc->set( $memcKey, $cache );
- $wgMemc->set( $fbMemcKey, (string) $cache['fallback'] );
- }
-
- wfProfileOut( __METHOD__ );
- return $deps;
- }
/**
- * Test if a given localisation cache is out of date with respect to the
- * source Messages files. This is done automatically for the global cache
- * in $wgMemc, but is only done on certain occasions for the serialized
- * data file.
- *
- * @param $cache mixed Either a language code or a cache array
- */
- static function isLocalisationOutOfDate( $cache ) {
- if ( !is_array( $cache ) ) {
- self::loadLocalisation( $cache );
- $cache = self::$mLocalisationCache[$cache];
- }
- // At least one language file and the MagicWord file needed
- if( count($cache['deps']) < 2 ) {
- return true;
- }
- $expired = false;
- foreach ( $cache['deps'] as $file => $mtime ) {
- if ( !file_exists( $file ) || filemtime( $file ) > $mtime ) {
- $expired = true;
- break;
- }
- }
- return $expired;
- }
-
- /**
* Get the fallback for a given language
*/
static function getFallbackFor( $code ) {
- // Shortcut
- if ( $code === 'en' ) return false;
-
- // Local cache
- static $cache = array();
- // Quick return
- if ( isset($cache[$code]) ) return $cache[$code];
-
- // Try memcache
- global $wgMemc;
- $memcKey = wfMemcKey( 'fallback', $code );
- $fbcode = $wgMemc->get( $memcKey );
-
- if ( is_string($fbcode) ) {
- // False is stored as a string to detect failures in memcache properly
- if ( $fbcode === '' ) $fbcode = false;
-
- // Update local cache and return
- $cache[$code] = $fbcode;
- return $fbcode;
+ if ( $code === 'en' ) {
+ // Shortcut
+ return false;
+ } else {
+ return self::getLocalisationCache()->getItem( $code, 'fallback' );
}
-
- // Nothing in caches, load and and update both caches
- self::loadLocalisation( $code );
- $fbcode = self::$mLocalisationCache[$code]['fallback'];
-
- $cache[$code] = $fbcode;
- $wgMemc->set( $memcKey, (string) $fbcode );
-
- return $fbcode;
}
- /**
+ /**
* Get all messages for a given language
+ * WARNING: this may take a long time
*/
static function getMessagesFor( $code ) {
- self::loadLocalisation( $code );
- return self::$mLocalisationCache[$code]['messages'];
+ return self::getLocalisationCache()->getItem( $code, 'messages' );
}
- /**
+ /**
* Get a message for a given language
*/
static function getMessageFor( $key, $code ) {
- self::loadLocalisation( $code );
- return isset( self::$mLocalisationCache[$code]['messages'][$key] ) ? self::$mLocalisationCache[$code]['messages'][$key] : null;
- }
-
- /**
- * Load localisation data for this object
- */
- function load() {
- if ( !$this->mLoaded ) {
- self::loadLocalisation( $this->getCode() );
- $cache =& self::$mLocalisationCache[$this->getCode()];
- foreach ( self::$mLocalisationKeys as $key ) {
- $this->$key = $cache[$key];
- }
- $this->mLoaded = true;
-
- $this->fixUpSettings();
- }
- }
-
- /**
- * Do any necessary post-cache-load settings adjustment
- */
- function fixUpSettings() {
- global $wgExtraNamespaces, $wgMetaNamespace, $wgMetaNamespaceTalk,
- $wgNamespaceAliases, $wgAmericanDates;
- wfProfileIn( __METHOD__ );
- if ( $wgExtraNamespaces ) {
- $this->namespaceNames = $wgExtraNamespaces + $this->namespaceNames;
- }
-
- $this->namespaceNames[NS_PROJECT] = $wgMetaNamespace;
- if ( $wgMetaNamespaceTalk ) {
- $this->namespaceNames[NS_PROJECT_TALK] = $wgMetaNamespaceTalk;
- } else {
- $talk = $this->namespaceNames[NS_PROJECT_TALK];
- $this->namespaceNames[NS_PROJECT_TALK] =
- $this->fixVariableInNamespace( $talk );
- }
-
- # The above mixing may leave namespaces out of canonical order.
- # Re-order by namespace ID number...
- ksort( $this->namespaceNames );
-
- # Put namespace names and aliases into a hashtable.
- # If this is too slow, then we should arrange it so that it is done
- # before caching. The catch is that at pre-cache time, the above
- # class-specific fixup hasn't been done.
- $this->mNamespaceIds = array();
- foreach ( $this->namespaceNames as $index => $name ) {
- $this->mNamespaceIds[$this->lc($name)] = $index;
- }
- if ( $this->namespaceAliases ) {
- foreach ( $this->namespaceAliases as $name => $index ) {
- if ( $index === NS_PROJECT_TALK ) {
- unset( $this->namespaceAliases[$name] );
- $name = $this->fixVariableInNamespace( $name );
- $this->namespaceAliases[$name] = $index;
- }
- $this->mNamespaceIds[$this->lc($name)] = $index;
- }
- }
- if ( $wgNamespaceAliases ) {
- foreach ( $wgNamespaceAliases as $name => $index ) {
- $this->mNamespaceIds[$this->lc($name)] = $index;
- }
- }
-
- if ( $this->defaultDateFormat == 'dmy or mdy' ) {
- $this->defaultDateFormat = $wgAmericanDates ? 'mdy' : 'dmy';
- }
- wfProfileOut( __METHOD__ );
+ return self::getLocalisationCache()->getSubitem( $code, 'messages', $key );
}
function fixVariableInNamespace( $talk ) {
@@ -2638,10 +2526,10 @@ class Language {
$talk = str_replace( '$1', $wgMetaNamespace, $talk );
# Allow grammar transformations
- # Allowing full message-style parsing would make simple requests
- # such as action=raw much more expensive than they need to be.
+ # Allowing full message-style parsing would make simple requests
+ # such as action=raw much more expensive than they need to be.
# This will hopefully cover most cases.
- $talk = preg_replace_callback( '/{{grammar:(.*?)\|(.*?)}}/i',
+ $talk = preg_replace_callback( '/{{grammar:(.*?)\|(.*?)}}/i',
array( &$this, 'replaceGrammarInNamespace' ), $talk );
return str_replace( ' ', '_', $talk );
}
@@ -2659,7 +2547,7 @@ class Language {
wfProfileIn( __METHOD__ );
$arr = wfGetPrecompiledData( 'Utf8Case.ser' );
if ( $arr === false ) {
- throw new MWException(
+ throw new MWException(
"Utf8Case.ser is missing, please run \"make\" in the serialized directory\n" );
}
extract( $arr );
@@ -2673,13 +2561,13 @@ class Language {
} elseif ( $seconds < 60 ) {
return $this->formatNum( round( $seconds ) ) . wfMsg( 'seconds-abbrev' );
} elseif ( $seconds < 3600 ) {
- return $this->formatNum( floor( $seconds / 60 ) ) . wfMsg( 'minutes-abbrev' ) .
+ return $this->formatNum( floor( $seconds / 60 ) ) . wfMsg( 'minutes-abbrev' ) .
$this->formatNum( round( fmod( $seconds, 60 ) ) ) . wfMsg( 'seconds-abbrev' );
} else {
$hours = floor( $seconds / 3600 );
$minutes = floor( ( $seconds - $hours * 3600 ) / 60 );
$secondsPart = round( $seconds - $hours * 3600 - $minutes * 60 );
- return $this->formatNum( $hours ) . wfMsg( 'hours-abbrev' ) .
+ return $this->formatNum( $hours ) . wfMsg( 'hours-abbrev' ) .
$this->formatNum( $minutes ) . wfMsg( 'minutes-abbrev' ) .
$this->formatNum( $secondsPart ) . wfMsg( 'seconds-abbrev' );
}
@@ -2732,4 +2620,11 @@ class Language {
$text = $this->getMessageFromDB( $msg );
return str_replace( '$1', $this->formatNum( $size ), $text );
}
+
+ /**
+ * Get the conversion rule title, if any.
+ */
+ function getConvRuleTitle() {
+ return $this->mConverter->getConvRuleTitle();
+ }
}
diff --git a/languages/LanguageConverter.php b/languages/LanguageConverter.php
index dcfb8bae..75075fee 100644
--- a/languages/LanguageConverter.php
+++ b/languages/LanguageConverter.php
@@ -9,87 +9,84 @@
*/
/**
- * base class for language convert
+ * Base class for language conversion.
* @ingroup Language
*
* @author Zhengzhu Feng <zhengzhu@gmail.com>
* @maintainers fdcn <fdcn64@gmail.com>, shinjiman <shinjiman@gmail.com>, PhiLiP <philip.npc@gmail.com>
*/
class LanguageConverter {
- var $mPreferredVariant='';
var $mMainLanguageCode;
var $mVariants, $mVariantFallbacks, $mVariantNames;
var $mTablesLoaded = false;
var $mTables;
- var $mManualAddTables;
- var $mManualRemoveTables;
var $mNamespaceTables;
- var $mTitleDisplay='';
- var $mDoTitleConvert=true, $mDoContentConvert=true;
- var $mManualLevel; // 'bidirectional' 'unidirectional' 'disable' for each variants
- var $mTitleFromFlag = false;
+ // 'bidirectional' 'unidirectional' 'disable' for each variant
+ var $mManualLevel;
var $mCacheKey;
var $mLangObj;
- var $mMarkup;
var $mFlags;
- var $mDescCodeSep = ':',$mDescVarSep = ';';
+ var $mDescCodeSep = ':', $mDescVarSep = ';';
var $mUcfirst = false;
+ var $mConvRuleTitle = false;
+ var $mURLVariant;
+ var $mUserVariant;
+ var $mHeaderVariant;
+ var $mMaxDepth = 10;
+ var $mVarSeparatorPattern;
const CACHE_VERSION_KEY = 'VERSION 6';
/**
* Constructor
*
- * @param string $maincode the main language code of this language
- * @param array $variants the supported variants of this language
- * @param array $variantfallback the fallback language of each variant
- * @param array $markup array defining the markup used for manual conversion
- * @param array $flags array defining the custom strings that maps to the flags
- * @param array $manualLevel limit for supported variants
- * @public
+ * @param $langobj The Language Object
+ * @param $maincode String: the main language code of this language
+ * @param $variants Array: the supported variants of this language
+ * @param $variantfallbacks Array: the fallback language of each variant
+ * @param $flags Array: defining the custom strings that maps to the flags
+ * @param $manualLevel Array: limit for supported variants
*/
- function __construct($langobj, $maincode,
- $variants=array(),
- $variantfallbacks=array(),
- $markup=array(),
+ public function __construct( $langobj, $maincode,
+ $variants = array(),
+ $variantfallbacks = array(),
$flags = array(),
$manualLevel = array() ) {
$this->mLangObj = $langobj;
$this->mMainLanguageCode = $maincode;
- $this->mVariants = $variants;
+
+ global $wgDisabledVariants;
+ $this->mVariants = array();
+ foreach ( $variants as $variant ) {
+ if ( !in_array( $variant, $wgDisabledVariants ) ) {
+ $this->mVariants[] = $variant;
+ }
+ }
$this->mVariantFallbacks = $variantfallbacks;
global $wgLanguageNames;
$this->mVariantNames = $wgLanguageNames;
$this->mCacheKey = wfMemcKey( 'conversiontables', $maincode );
- $m = array(
- 'begin'=>'-{',
- 'flagsep'=>'|',
- 'unidsep'=>'=>', //for unidirectional conversion
- 'codesep'=>':',
- 'varsep'=>';',
- 'end'=>'}-'
- );
- $this->mMarkup = array_merge($m, $markup);
- $f = array(
+ $f = array(
// 'S' show converted text
// '+' add rules for alltext
// 'E' the gave flags is error
// these flags above are reserved for program
- 'A'=>'A', // add rule for convert code (all text convert)
- 'T'=>'T', // title convert
- 'R'=>'R', // raw content
- 'D'=>'D', // convert description (subclass implement)
- '-'=>'-', // remove convert (not implement)
- 'H'=>'H', // add rule for convert code (but no display in placed code )
- 'N'=>'N' // current variant name
+ 'A' => 'A', // add rule for convert code (all text convert)
+ 'T' => 'T', // title convert
+ 'R' => 'R', // raw content
+ 'D' => 'D', // convert description (subclass implement)
+ '-' => '-', // remove convert (not implement)
+ 'H' => 'H', // add rule for convert code
+ // (but no display in placed code )
+ 'N' => 'N' // current variant name
);
- $this->mFlags = array_merge($f, $flags);
- foreach( $this->mVariants as $v) {
- $this->mManualLevel[$v]=array_key_exists($v,$manualLevel)
- ?$manualLevel[$v]
- :'bidirectional';
- $this->mManualAddTables[$v] = array();
- $this->mManualRemoveTables[$v] = array();
+ $this->mFlags = array_merge( $f, $flags );
+ foreach ( $this->mVariants as $v ) {
+ if ( array_key_exists( $v, $manualLevel ) ) {
+ $this->mManualLevel[$v] = $manualLevel[$v];
+ } else {
+ $this->mManualLevel[$v] = 'bidirectional';
+ }
$this->mNamespaceTables[$v] = array();
$this->mFlags[$v] = $v;
}
@@ -103,108 +100,206 @@ class LanguageConverter {
}
/**
- * in case some variant is not defined in the markup, we need
- * to have some fallback. for example, in zh, normally people
+ * In case some variant is not defined in the markup, we need
+ * to have some fallback. For example, in zh, normally people
* will define zh-hans and zh-hant, but less so for zh-sg or zh-hk.
* when zh-sg is preferred but not defined, we will pick zh-hans
- * in this case. right now this is only used by zh.
+ * in this case. Right now this is only used by zh.
*
- * @param string $v the language code of the variant
- * @return string array the code of the fallback language or false if there is no fallback
+ * @param string $v The language code of the variant
+ * @return string array The code of the fallback language or false if there
+ * is no fallback
* @public
*/
- function getVariantFallbacks($v) {
- if( isset( $this->mVariantFallbacks[$v] ) ) {
+ function getVariantFallbacks( $v ) {
+ if ( isset( $this->mVariantFallbacks[$v] ) ) {
return $this->mVariantFallbacks[$v];
}
return $this->mMainLanguageCode;
}
/**
- * get preferred language variants.
+ * Get the title produced by the conversion rule.
+ * @returns string
+ */
+ function getConvRuleTitle() {
+ return $this->mConvRuleTitle;
+ }
+
+ /**
+ * Get preferred language variants.
* @param boolean $fromUser Get it from $wgUser's preferences
+ * @param boolean $fromHeader Get it from Accept-Language
* @return string the preferred language code
* @public
*/
- function getPreferredVariant( $fromUser = true ) {
- global $wgUser, $wgRequest, $wgVariantArticlePath, $wgDefaultLanguageVariant;
+ function getPreferredVariant( $fromUser = true, $fromHeader = false ) {
+ global $wgDefaultLanguageVariant;
- if($this->mPreferredVariant)
- return $this->mPreferredVariant;
+ $req = $this->getURLVariant();
- // figure out user lang without constructing wgLang to avoid infinite recursion
- if( $fromUser )
- $defaultUserLang = $wgUser->getOption( 'language' );
- else
- $defaultUserLang = $this->mMainLanguageCode;
- $userLang = $wgRequest->getVal( 'uselang', $defaultUserLang );
- // see if interface language is same as content, if not, prevent conversion
- if( ! in_array( $userLang, $this->mVariants ) ){
- $this->mPreferredVariant = $this->mMainLanguageCode; // no conversion
- return $this->mPreferredVariant;
+ if ( $fromUser && !$req ) {
+ $req = $this->getUserVariant();
}
- // see if the preference is set in the request
- $req = $wgRequest->getText( 'variant' );
- if( in_array( $req, $this->mVariants ) ) {
- $this->mPreferredVariant = $req;
+ if ( $fromHeader && !$req ) {
+ $req = $this->getHeaderVariant();
+ }
+
+ if ( $wgDefaultLanguageVariant && !$req ) {
+ $req = $this->validateVariant( $wgDefaultLanguageVariant );
+ }
+
+ // This function, unlike the other get*Variant functions, is
+ // not memoized (i.e. there return value is not cached) since
+ // new information might appear during processing after this
+ // is first called.
+ if ( $req ) {
return $req;
}
+ return $this->mMainLanguageCode;
+ }
- // check the syntax /code/ArticleTitle
- if($wgVariantArticlePath!=false && isset($_SERVER['SCRIPT_NAME'])){
- // Note: SCRIPT_NAME probably won't hold the correct value if PHP is run as CGI
- // (it will hold path to php.cgi binary), and might not exist on some very old PHP installations
- $scriptBase = basename( $_SERVER['SCRIPT_NAME'] );
- if(in_array($scriptBase,$this->mVariants)){
- $this->mPreferredVariant = $scriptBase;
- return $this->mPreferredVariant;
- }
+ /**
+ * Validate the variant
+ * @param string $v the variant to validate
+ * @returns mixed returns the variant if it is valid, null otherwise
+ */
+ function validateVariant( $v = null ) {
+ if ( $v !== null && in_array( $v, $this->mVariants ) ) {
+ return $v;
+ }
+ return null;
+ }
+
+ /**
+ * Get the variant specified in the URL
+ *
+ * @returns mixed variant if one found, false otherwise.
+ */
+ function getURLVariant() {
+ global $wgRequest;
+ $ret = null;
+
+ if ( $this->mURLVariant ) {
+ return $this->mURLVariant;
+ }
+
+ // see if the preference is set in the request
+ $ret = $wgRequest->getText( 'variant' );
+
+ if ( !$ret ) {
+ $ret = $wgRequest->getVal( 'uselang' );
}
+ return $this->mURLVariant = $this->validateVariant( $ret );
+ }
+
+ /**
+ * Determine if the user has a variant set.
+ *
+ * @returns mixed variant if one found, false otherwise.
+ */
+ function getUserVariant() {
+ global $wgUser;
+ $ret = null;
+
+ // memoizing this function wreaks havoc on parserTest.php
+ /* if ( $this->mUserVariant ) { */
+ /* return $this->mUserVariant; */
+ /* } */
+
// get language variant preference from logged in users
- // Don't call this on stub objects because that causes infinite
+ // Don't call this on stub objects because that causes infinite
// recursion during initialisation
- if( $fromUser && $wgUser->isLoggedIn() ) {
- $this->mPreferredVariant = $wgUser->getOption('variant');
- return $this->mPreferredVariant;
- }
-
- // see if default variant is globaly set
- if($wgDefaultLanguageVariant != false && in_array( $wgDefaultLanguageVariant, $this->mVariants )){
- $this->mPreferredVariant = $wgDefaultLanguageVariant;
- return $this->mPreferredVariant;
- }
-
- # FIXME rewrite code for parsing http header. The current code
- # is written specific for detecting zh- variants
- if( !$this->mPreferredVariant ) {
- // see if some supported language variant is set in the
- // http header, but we don't set the mPreferredVariant
- // variable in case this is called before the user's
- // preference is loaded
- $pv=$this->mMainLanguageCode;
- if(array_key_exists('HTTP_ACCEPT_LANGUAGE', $_SERVER)) {
- $header = str_replace( '_', '-', strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]));
- $zh = strstr($header, $pv.'-');
- if($zh) {
- $ary = split("[,;]",$zh);
- $pv = $ary[0];
- }
+ if ( $wgUser->isLoggedIn() ) {
+ $ret = $wgUser->getOption( 'variant' );
+ }
+ else {
+ // figure out user lang without constructing wgLang to avoid
+ // infinite recursion
+ $ret = $wgUser->getOption( 'language' );
+ }
+
+ return $this->mUserVariant = $this->validateVariant( $ret );
+ }
+
+
+ /**
+ * Determine the language variant from the Accept-Language header.
+ *
+ * @returns mixed variant if one found, false otherwise.
+ */
+ function getHeaderVariant() {
+ global $wgRequest;
+ $ret = null;
+
+ if ( $this->mHeaderVariant ) {
+ return $this->mHeaderVariant;
+ }
+
+ // see if some supported language variant is set in the
+ // http header.
+
+ $acceptLanguage = $wgRequest->getHeader( 'Accept-Language' );
+ if ( !$acceptLanguage ) {
+ return null;
+ }
+
+ // explode by comma
+ $result = StringUtils::explode( ',', strtolower( $acceptLanguage ) );
+ $languages = array();
+
+ foreach ( $result as $elem ) {
+ // if $elem likes 'zh-cn;q=0.9'
+ if ( ( $posi = strpos( $elem, ';' ) ) !== false ) {
+ // get the real language code likes 'zh-cn'
+ $languages[] = substr( $elem, 0, $posi );
+ } else {
+ $languages[] = $elem;
}
- // don't try to return bad variant
- if(in_array( $pv, $this->mVariants ))
- return $pv;
}
- return $this->mMainLanguageCode;
+ $fallback_languages = array();
+ foreach ( $languages as $language ) {
+ // strip whitespace
+ $language = trim( $language );
+ $this->mHeaderVariant = $this->validateVariant( $language );
+ if ( $this->mHeaderVariant ) {
+ break;
+ }
+
+ // To see if there are fallbacks of current language.
+ // We record these fallback variants, and process
+ // them later.
+ $fallbacks = $this->getVariantFallbacks( $language );
+ if ( is_string( $fallbacks ) ) {
+ $fallback_languages[] = $fallbacks;
+ } elseif ( is_array( $fallbacks ) ) {
+ $fallback_languages =
+ array_merge( $fallback_languages,
+ $fallbacks );
+ }
+ }
+
+ if ( !$this->mHeaderVariant ) {
+ // process fallback languages now
+ $fallback_languages = array_unique( $fallback_languages );
+ foreach ( $fallback_languages as $language ) {
+ $this->mHeaderVariant = $this->validateVariant( $language );
+ if ( $this->mHeaderVariant ) {
+ break;
+ }
+ }
+ }
+ return $this->mHeaderVariant;
}
-
+
/**
- * caption convert, base on preg_replace_callback
+ * Caption convert, base on preg_replace_callback.
*
- * to convert text in "title" or "alt", like '<img alt="text" ... '
+ * To convert text in "title" or "alt", like '<img alt="text" ... '
* or '<span title="text" ... '
*
* @return string like ' alt="yyyy"' or ' title="yyyy"'
@@ -215,31 +310,35 @@ class LanguageConverter {
$title = $matches[1];
$text = $matches[2];
// we convert captions except URL
- if( !strpos( $text, '://' ) )
- $text = $this->translate($text, $toVariant);
+ if ( !strpos( $text, '://' ) ) {
+ $text = $this->translate( $text, $toVariant );
+ }
return " $title=\"$text\"";
}
/**
- * dictionary-based conversion
+ * Dictionary-based conversion.
*
* @param string $text the text to be converted
* @param string $toVariant the target language code
* @return string the converted text
* @private
*/
- function autoConvert($text, $toVariant=false) {
- $fname="LanguageConverter::autoConvert";
+ function autoConvert( $text, $toVariant = false ) {
+ $fname = 'LanguageConverter::autoConvert';
wfProfileIn( $fname );
- if(!$this->mTablesLoaded)
+ if ( !$this->mTablesLoaded ) {
$this->loadTables();
+ }
- if(!$toVariant)
+ if ( !$toVariant ) {
$toVariant = $this->getPreferredVariant();
- if(!in_array($toVariant, $this->mVariants))
- return $text;
+ if ( !$toVariant ) {
+ return $text;
+ }
+ }
/* we convert everything except:
1. html markups (anything between < and >)
@@ -247,10 +346,11 @@ class LanguageConverter {
3. place holders created by the parser
*/
global $wgParser;
- if (isset($wgParser) && $wgParser->UniqPrefix()!=''){
+ if ( isset( $wgParser ) && $wgParser->UniqPrefix() != '' ) {
$marker = '|' . $wgParser->UniqPrefix() . '[\-a-zA-Z0-9]+';
- } else
- $marker = "";
+ } else {
+ $marker = '';
+ }
// this one is needed when the text is inside an html markup
$htmlfix = '|<[^>]+$|^[^<>]*>';
@@ -262,31 +362,49 @@ class LanguageConverter {
// disable conversion of <pre xxxx> ... </pre>
$prefix = '<pre.*?>.*?<\/pre>|';
- $reg = '/'.$codefix . $scriptfix . $prefix . '<[^>]+>|&[a-zA-Z#][a-z0-9]+;' . $marker . $htmlfix . '/s';
-
- $matches = preg_split($reg, $text, -1, PREG_SPLIT_OFFSET_CAPTURE);
-
- $m = array_shift($matches);
-
- $ret = $this->translate($m[0], $toVariant);
- $mstart = $m[1]+strlen($m[0]);
-
- // enable convertsion of '<img alt="xxxx" ... ' or '<span title="xxxx" ... '
- $captionpattern = '/\s(title|alt)\s*=\s*"([\s\S]*?)"/';
- foreach($matches as $m) {
- $mark = substr($text, $mstart, $m[1]-$mstart);
- $mark = preg_replace_callback($captionpattern, array(&$this, 'captionConvert'), $mark);
- $ret .= $mark;
- $ret .= $this->translate($m[0], $toVariant);
- $mstart = $m[1] + strlen($m[0]);
+ $reg = '/' . $codefix . $scriptfix . $prefix .
+ '<[^>]+>|&[a-zA-Z#][a-z0-9]+;' . $marker . $htmlfix . '/s';
+
+ $matches = preg_split( $reg, $text, - 1, PREG_SPLIT_OFFSET_CAPTURE );
+
+ $m = array_shift( $matches );
+
+ $ret = $this->translate( $m[0], $toVariant );
+ $mstart = $m[1] + strlen( $m[0] );
+
+ // enable convertsion of '<img alt="xxxx" ... '
+ // or '<span title="xxxx" ... '
+ $captionpattern = '/\s(title|alt)\s*=\s*"([\s\S]*?)"/';
+
+ $trtext = '';
+ $trtextmark = "\0";
+ $notrtext = array();
+ foreach ( $matches as $m ) {
+ $mark = substr( $text, $mstart, $m[1] - $mstart );
+ $mark = preg_replace_callback( $captionpattern,
+ array( &$this, 'captionConvert' ),
+ $mark );
+ // Let's convert the trtext only once,
+ // it would give us more performance improvement
+ $notrtext[] = $mark;
+ $trtext .= $m[0] . $trtextmark;
+ $mstart = $m[1] + strlen( $m[0] );
+ }
+ $notrtext[] = '';
+ $trtext = $this->translate( $trtext, $toVariant );
+ $trtext = StringUtils::explode( $trtextmark, $trtext );
+ foreach ( $trtext as $t ) {
+ $ret .= array_shift( $notrtext );
+ $ret .= $t;
}
wfProfileOut( $fname );
return $ret;
}
/**
- * Translate a string to a variant
- * Doesn't process markup or do any of that other stuff, for that use convert()
+ * Translate a string to a variant.
+ * Doesn't process markup or do any of that other stuff, for that use
+ * convert().
*
* @param string $text Text to convert
* @param string $variant Variant language code
@@ -295,29 +413,35 @@ class LanguageConverter {
*/
function translate( $text, $variant ) {
wfProfileIn( __METHOD__ );
- if( !$this->mTablesLoaded )
- $this->loadTables();
- $text = $this->mTables[$variant]->replace( $text );
+ // If $text is empty or only includes spaces, do nothing
+ // Otherwise translate it
+ if ( trim( $text ) ) {
+ if ( !$this->mTablesLoaded ) {
+ $this->loadTables();
+ }
+ $text = $this->mTables[$variant]->replace( $text );
+ }
wfProfileOut( __METHOD__ );
return $text;
}
/**
- * convert text to all supported variants
+ * Convert text to all supported variants.
*
* @param string $text the text to be converted
* @return array of string
* @public
*/
- function autoConvertToAllVariants($text) {
- $fname="LanguageConverter::autoConvertToAllVariants";
+ function autoConvertToAllVariants( $text ) {
+ $fname = 'LanguageConverter::autoConvertToAllVariants';
wfProfileIn( $fname );
- if( !$this->mTablesLoaded )
+ if ( !$this->mTablesLoaded ) {
$this->loadTables();
+ }
$ret = array();
- foreach($this->mVariants as $variant) {
- $ret[$variant] = $this->translate($text, $variant);
+ foreach ( $this->mVariants as $variant ) {
+ $ret[$variant] = $this->translate( $text, $variant );
}
wfProfileOut( $fname );
@@ -325,267 +449,272 @@ class LanguageConverter {
}
/**
- * convert link text to all supported variants
+ * Convert link text to all supported variants.
*
* @param string $text the text to be converted
* @return array of string
* @public
*/
- function convertLinkToAllVariants($text) {
- if( !$this->mTablesLoaded )
+ function convertLinkToAllVariants( $text ) {
+ if ( !$this->mTablesLoaded ) {
$this->loadTables();
+ }
$ret = array();
- $tarray = explode($this->mMarkup['begin'], $text);
- $tfirst = array_shift($tarray);
+ $tarray = StringUtils::explode( '-{', $text );
+ $first = true;
- foreach($this->mVariants as $variant)
- $ret[$variant] = $this->translate($tfirst,$variant);
+ foreach ( $tarray as $txt ) {
+ if ( $first ) {
+ $first = false;
+ foreach ( $this->mVariants as $variant ) {
+ $ret[$variant] = $this->translate( $txt, $variant );
+ }
+ continue;
+ }
- foreach($tarray as $txt) {
- $marked = explode($this->mMarkup['end'], $txt, 2);
+ $marked = explode( '}-', $txt, 2 );
- foreach($this->mVariants as $variant){
- $ret[$variant] .= $this->mMarkup['begin'].$marked[0].$this->mMarkup['end'];
- if(array_key_exists(1, $marked))
- $ret[$variant] .= $this->translate($marked[1],$variant);
+ foreach ( $this->mVariants as $variant ) {
+ $ret[$variant] .= '-{' . $marked[0] . '}-';
+ if ( array_key_exists( 1, $marked ) ) {
+ $ret[$variant] .= $this->translate( $marked[1], $variant );
+ }
}
-
+
}
return $ret;
}
-
+
/**
- * prepare manual conversion table
+ * Prepare manual conversion table.
* @private
*/
- function prepareManualConv( $convRule ){
- // use syntax -{T|zh:TitleZh;zh-tw:TitleTw}- for custom conversion in title
- $title = $convRule->getTitle();
- if( $title ){
- $this->mTitleFromFlag = true;
- $this->mTitleDisplay = $title;
- }
+ function applyManualConv( $convRule ) {
+ // use syntax -{T|zh:TitleZh;zh-tw:TitleTw}- for custom
+ // conversion in title
+ $this->mConvRuleTitle = $convRule->getTitle();
- //apply manual conversion table to global table
+ // apply manual conversion table to global table
$convTable = $convRule->getConvTable();
$action = $convRule->getRulesAction();
- foreach( $convTable as $v => $t ) {
- if( !in_array( $v, $this->mVariants ) )continue;
- if( $action=="add" ) {
- foreach( $t as $from => $to ) {
+ foreach ( $convTable as $variant => $pair ) {
+ if ( !$this->validateVariant( $variant ) ) {
+ continue;
+ }
+
+ if ( $action == 'add' ) {
+ foreach ( $pair as $from => $to ) {
// to ensure that $from and $to not be left blank
// so $this->translate() could always return a string
- if ( $from || $to )
+ if ( $from || $to ) {
// more efficient than array_merge(), about 2.5 times.
- $this->mManualAddTables[$v][$from] = $to;
- }
- }
- elseif ( $action == "remove" ) {
- foreach ( $t as $from=>$to ) {
- if ( $from || $to )
- $this->mManualRemoveTables[$v][$from] = $to;
+ $this->mTables[$variant]->setPair( $from, $to );
+ }
}
+ } elseif ( $action == 'remove' ) {
+ $this->mTables[$variant]->removeArray( $pair );
}
}
}
/**
- * apply manual conversion from $this->mManualAddTables and $this->mManualRemoveTables
- * @private
- */
- function applyManualConv(){
- //apply manual conversion table to global table
- foreach($this->mVariants as $v) {
- if (count($this->mManualAddTables[$v]) > 0) {
- $this->mTables[$v]->mergeArray($this->mManualAddTables[$v]);
- }
- if (count($this->mManualRemoveTables[$v]) > 0)
- $this->mTables[$v]->removeArray($this->mManualRemoveTables[$v]);
- }
- }
-
- /**
- * Convert text using a parser object for context
- * @public
+ * Convert text to different variants of a language. The automatic
+ * conversion is done in autoConvert(). Here we parse the text
+ * marked with -{}-, which specifies special conversions of the
+ * text that can not be accomplished in autoConvert().
+ *
+ * Syntax of the markup:
+ * -{code1:text1;code2:text2;...}- or
+ * -{flags|code1:text1;code2:text2;...}- or
+ * -{text}- in which case no conversion should take place for text
+ *
+ * @param $text String: text to be converted
+ * @return String: converted text
*/
- function parserConvert( $text, &$parser ) {
+ public function convert( $text ) {
global $wgDisableLangConversion;
- /* don't do anything if this is the conversion table */
- if ( $parser->getTitle()->getNamespace() == NS_MEDIAWIKI &&
- strpos($parser->mTitle->getText(), "Conversiontable") !== false )
- {
- return $text;
- }
-
- if ( $wgDisableLangConversion )
- return $text;
+ if ( $wgDisableLangConversion ) return $text;
- $text = $this->convert( $text );
+ $variant = $this->getPreferredVariant();
- if ( $this->mTitleFromFlag )
- $parser->mOutput->setTitleText( $this->mTitleDisplay );
- return $text;
- }
-
- /**
- * convert namespace
- * @param string $title the title included namespace
- * @return array of string
- * @private
- */
- function convertNamespace( $title, $variant ) {
- $splittitle = explode( ':', $title );
- if (count($splittitle) < 2)
- return $title;
- if ( isset( $this->mNamespaceTables[$variant][$splittitle[0]] ) )
- $splittitle[0] = $this->mNamespaceTables[$variant][$splittitle[0]];
- $ret = implode(':', $splittitle );
- return $ret;
+ return $this->recursiveConvertTopLevel( $text, $variant );
}
/**
- * convert title
- * @private
+ * Convert a Title object to a readable string in the preferred variant
*/
- function convertTitle( $text, $variant ){
- global $wgDisableTitleConversion, $wgUser;
-
- // check for global param and __NOTC__ tag
- if( $wgDisableTitleConversion || !$this->mDoTitleConvert || $wgUser->getOption('noconvertlink') == 1 ) {
- $this->mTitleDisplay = $text;
- return $text;
- }
-
- // use the title from the T flag if any
- if( $this->mTitleFromFlag ){
- $this->mTitleFromFlag = false;
- return $this->mTitleDisplay;
- }
-
- global $wgRequest;
- $isredir = $wgRequest->getText( 'redirect', 'yes' );
- $action = $wgRequest->getText( 'action' );
- $linkconvert = $wgRequest->getText( 'linkconvert', 'yes' );
- if ( $isredir == 'no' || $action == 'edit' || $action == 'submit' || $linkconvert == 'no' ) {
- return $text;
+ public function convertTitle( $title ) {
+ $variant = $this->getPreferredVariant();
+ if ( $title->getNamespace() === NS_MAIN ) {
+ $text = '';
} else {
- $text = $this->convertNamespace( $text, $variant );
- $this->mTitleDisplay = $this->convert( $text );
- return $this->mTitleDisplay;
+ $text = $title->getNsText();
+ if ( isset( $this->mNamespaceTables[$variant][$text] ) ) {
+ $text = $this->mNamespaceTables[$variant][$text];
+ }
+ $text .= ':';
}
+ $text .= $title->getText();
+ $text = $this->autoConvert( $text, $variant );
+ return $text;
}
- /**
- * convert text to different variants of a language. the automatic
- * conversion is done in autoConvert(). here we parse the text
- * marked with -{}-, which specifies special conversions of the
- * text that can not be accomplished in autoConvert()
- *
- * syntax of the markup:
- * -{code1:text1;code2:text2;...}- or
- * -{flags|code1:text1;code2:text2;...}- or
- * -{text}- in which case no conversion should take place for text
- *
- * @param string $text text to be converted
- * @param bool $isTitle whether this conversion is for the article title
- * @return string converted text
- * @public
- */
- function convert( $text, $isTitle = false ) {
+ protected function recursiveConvertTopLevel( $text, $variant, $depth = 0 ) {
+ $startPos = 0;
+ $out = '';
+ $length = strlen( $text );
+ while ( $startPos < $length ) {
+ $m = false;
+ $pos = strpos( $text, '-{', $startPos );
+
+ if ( $pos === false ) {
+ // No more markup, append final segment
+ $out .= $this->autoConvert( substr( $text, $startPos ), $variant );
+ $startPos = $length;
+ return $out;
+ }
- $mw =& MagicWord::get( 'notitleconvert' );
- if( $mw->matchAndRemove( $text ) )
- $this->mDoTitleConvert = false;
- $mw =& MagicWord::get( 'nocontentconvert' );
- if( $mw->matchAndRemove( $text ) ) {
- $this->mDoContentConvert = false;
+ // Markup found
+ // Append initial segment
+ $out .= $this->autoConvert( substr( $text, $startPos, $pos - $startPos ), $variant );
+
+ // Advance position
+ $startPos = $pos;
+
+ // Do recursive conversion
+ $out .= $this->recursiveConvertRule( $text, $variant, $startPos, $depth + 1 );
}
- // no conversion if redirecting
- $mw =& MagicWord::get( 'redirect' );
- if( $mw->matchStart( $text ) )
- return $text;
+ return $out;
+ }
- $plang = $this->getPreferredVariant();
+ protected function recursiveConvertRule( $text, $variant, &$startPos, $depth = 0 ) {
+ // Quick sanity check (no function calls)
+ if ( $text[$startPos] !== '-' || $text[$startPos + 1] !== '{' ) {
+ throw new MWException( __METHOD__.': invalid input string' );
+ }
- // for title convertion
- if ( $isTitle ) return $this->convertTitle( $text, $plang );
+ $startPos += 2;
+ $inner = '';
+ $warningDone = false;
+ $length = strlen( $text );
- $tarray = StringUtils::explode( $this->mMarkup['end'], $text );
- $text = '';
+ while ( $startPos < $length ) {
+ $m = false;
+ preg_match( '/-\{|\}-/', $text, $m, PREG_OFFSET_CAPTURE, $startPos );
+ if ( !$m ) {
+ // Unclosed rule
+ break;
+ }
- $marks = array();
- foreach ( $tarray as $txt ) {
- $marked = explode( $this->mMarkup['begin'], $txt, 2 );
- if ( array_key_exists( 1, $marked ) ) {
- $crule = new ConverterRule($marked[1], $this);
- $crule->parse( $plang );
- $marked[1] = $crule->getDisplay();
- $this->prepareManualConv( $crule );
+ $token = $m[0][0];
+ $pos = $m[0][1];
+
+ // Markup found
+ // Append initial segment
+ $inner .= substr( $text, $startPos, $pos - $startPos );
+
+ // Advance position
+ $startPos = $pos;
+
+ switch ( $token ) {
+ case '-{':
+ // Check max depth
+ if ( $depth >= $this->mMaxDepth ) {
+ $inner .= '-{';
+ if ( !$warningDone ) {
+ $inner .= '<span class="error">' .
+ wfMsgForContent( 'language-converter-depth-warning',
+ $this->mMaxDepth ) .
+ '</span>';
+ $warningDone = true;
+ }
+ $startPos += 2;
+ continue;
+ }
+ // Recursively parse another rule
+ $inner .= $this->recursiveConvertRule( $text, $variant, $startPos, $depth + 1 );
+ break;
+ case '}-':
+ // Apply the rule
+ $startPos += 2;
+ $rule = new ConverterRule( $inner, $this );
+ $rule->parse( $variant );
+ $this->applyManualConv( $rule );
+ return $rule->getDisplay();
+ default:
+ throw new MWException( __METHOD__.': invalid regex match' );
}
- else
- $marked[0] .= $this->mMarkup['end'];
- array_push( $marks, $marked );
- }
- $this->applyManualConv();
- foreach ( $marks as $marked ) {
- if( $this->mDoContentConvert )
- $text .= $this->autoConvert( $marked[0], $plang );
- else
- $text .= $marked[0];
- if( array_key_exists( 1, $marked ) )
- $text .= $marked[1];
- }
- // Remove the last delimiter (wasn't real)
- $text = substr( $text, 0, -strlen( $this->mMarkup['end'] ) );
+ }
- return $text;
+ // Unclosed rule
+ if ( $startPos < $length ) {
+ $inner .= substr( $text, $startPos );
+ }
+ $startPos = $length;
+ return '-{' . $this->autoConvert( $inner, $variant );
}
/**
- * if a language supports multiple variants, it is
+ * If a language supports multiple variants, it is
* possible that non-existing link in one variant
- * actually exists in another variant. this function
+ * actually exists in another variant. This function
* tries to find it. See e.g. LanguageZh.php
*
* @param string $link the name of the link
* @param mixed $nt the title object of the link
* @param boolean $ignoreOtherCond: to disable other conditions when
- * we need to transclude a template or update a category's link
+ * we need to transclude a template or update a category's link
* @return null the input parameters may be modified upon return
* @public
*/
function findVariantLink( &$link, &$nt, $ignoreOtherCond = false ) {
- global $wgDisableLangConversion, $wgDisableTitleConversion, $wgRequest, $wgUser;
+ # If the article has already existed, there is no need to
+ # check it again, otherwise it may cause a fault.
+ if ( is_object( $nt ) && $nt->exists() ) {
+ return;
+ }
+
+ global $wgDisableLangConversion, $wgDisableTitleConversion, $wgRequest,
+ $wgUser;
$isredir = $wgRequest->getText( 'redirect', 'yes' );
$action = $wgRequest->getText( 'action' );
$linkconvert = $wgRequest->getText( 'linkconvert', 'yes' );
- $disableLinkConversion = $wgDisableLangConversion || $wgDisableTitleConversion;
+ $disableLinkConversion = $wgDisableLangConversion
+ || $wgDisableTitleConversion;
$linkBatch = new LinkBatch();
- $ns=NS_MAIN;
+ $ns = NS_MAIN;
- if ( $disableLinkConversion || ( !$ignoreOtherCond && ( $isredir == 'no' || $action == 'edit'
- || $action == 'submit' || $linkconvert == 'no' || $wgUser->getOption('noconvertlink') == 1 ) ) )
+ if ( $disableLinkConversion ||
+ ( !$ignoreOtherCond &&
+ ( $isredir == 'no'
+ || $action == 'edit'
+ || $action == 'submit'
+ || $linkconvert == 'no'
+ || $wgUser->getOption( 'noconvertlink' ) == 1 ) ) ) {
return;
+ }
- if(is_object($nt))
+ if ( is_object( $nt ) ) {
$ns = $nt->getNamespace();
+ }
- $variants = $this->autoConvertToAllVariants($link);
- if($variants == false) //give up
+ $variants = $this->autoConvertToAllVariants( $link );
+ if ( $variants == false ) { // give up
return;
+ }
$titles = array();
- foreach( $variants as $v ) {
- if($v != $link){
+ foreach ( $variants as $v ) {
+ if ( $v != $link ) {
$varnt = Title::newFromText( $v, $ns );
- if(!is_null($varnt)){
- $linkBatch->addObj($varnt);
- $titles[]=$varnt;
+ if ( !is_null( $varnt ) ) {
+ $linkBatch->addObj( $varnt );
+ $titles[] = $varnt;
}
}
}
@@ -593,8 +722,8 @@ class LanguageConverter {
// fetch all variants in single query
$linkBatch->execute();
- foreach( $titles as $varnt ) {
- if( $varnt->getArticleID() > 0 ) {
+ foreach ( $titles as $varnt ) {
+ if ( $varnt->getArticleID() > 0 ) {
$nt = $varnt;
$link = $varnt->getText();
break;
@@ -603,7 +732,7 @@ class LanguageConverter {
}
/**
- * returns language specific hash options
+ * Returns language specific hash options.
*
* @public
*/
@@ -612,143 +741,110 @@ class LanguageConverter {
return '!' . $variant ;
}
- /**
- * get title text as defined in the body of the article text
- *
- * @public
- */
- function getParsedTitle() {
- return $this->mTitleDisplay;
- }
-
/**
- * a write lock to the cache
- *
- * @private
- */
- function lockCache() {
- global $wgMemc;
- $success = false;
- for($i=0; $i<30; $i++) {
- if($success = $wgMemc->add($this->mCacheKey . "lock", 1, 10))
- break;
- sleep(1);
- }
- return $success;
- }
-
- /**
- * unlock cache
- *
- * @private
- */
- function unlockCache() {
- global $wgMemc;
- $wgMemc->delete($this->mCacheKey . "lock");
- }
-
-
- /**
- * Load default conversion tables
- * This method must be implemented in derived class
+ * Load default conversion tables.
+ * This method must be implemented in derived class.
*
* @private
*/
function loadDefaultTables() {
- $name = get_class($this);
- wfDie("Must implement loadDefaultTables() method in class $name");
+ $name = get_class( $this );
+ wfDie( "Must implement loadDefaultTables() method in class $name" );
}
/**
- * load conversion tables either from the cache or the disk
+ * Load conversion tables either from the cache or the disk.
* @private
*/
- function loadTables($fromcache=true) {
+ function loadTables( $fromcache = true ) {
global $wgMemc;
- if( $this->mTablesLoaded )
+ if ( $this->mTablesLoaded ) {
return;
+ }
wfProfileIn( __METHOD__ );
$this->mTablesLoaded = true;
$this->mTables = false;
- if($fromcache) {
- wfProfileIn( __METHOD__.'-cache' );
+ if ( $fromcache ) {
+ wfProfileIn( __METHOD__ . '-cache' );
$this->mTables = $wgMemc->get( $this->mCacheKey );
- wfProfileOut( __METHOD__.'-cache' );
+ wfProfileOut( __METHOD__ . '-cache' );
}
- if ( !$this->mTables || !isset( $this->mTables[self::CACHE_VERSION_KEY] ) ) {
- wfProfileIn( __METHOD__.'-recache' );
+ if ( !$this->mTables
+ || !array_key_exists( self::CACHE_VERSION_KEY, $this->mTables ) ) {
+ wfProfileIn( __METHOD__ . '-recache' );
// not in cache, or we need a fresh reload.
// we will first load the default tables
// then update them using things in MediaWiki:Zhconversiontable/*
$this->loadDefaultTables();
- foreach($this->mVariants as $var) {
- $cached = $this->parseCachedTable($var);
- $this->mTables[$var]->mergeArray($cached);
+ foreach ( $this->mVariants as $var ) {
+ $cached = $this->parseCachedTable( $var );
+ $this->mTables[$var]->mergeArray( $cached );
}
$this->postLoadTables();
$this->mTables[self::CACHE_VERSION_KEY] = true;
- if($this->lockCache()) {
- $wgMemc->set($this->mCacheKey, $this->mTables, 43200);
- $this->unlockCache();
- }
- wfProfileOut( __METHOD__.'-recache' );
+ $wgMemc->set( $this->mCacheKey, $this->mTables, 43200 );
+ wfProfileOut( __METHOD__ . '-recache' );
}
wfProfileOut( __METHOD__ );
}
/**
- * Hook for post processig after conversion tables are loaded
+ * Hook for post processig after conversion tables are loaded.
*
*/
- function postLoadTables() {}
+ function postLoadTables() { }
/**
- * Reload the conversion tables
+ * Reload the conversion tables.
*
* @private
*/
function reloadTables() {
- if($this->mTables)
- unset($this->mTables);
+ if ( $this->mTables ) {
+ unset( $this->mTables );
+ }
$this->mTablesLoaded = false;
- $this->loadTables(false);
+ $this->loadTables( false );
}
/**
- * parse the conversion table stored in the cache
+ * Parse the conversion table stored in the cache.
*
- * the tables should be in blocks of the following form:
+ * The tables should be in blocks of the following form:
* -{
* word => word ;
* word => word ;
* ...
* }-
*
- * to make the tables more manageable, subpages are allowed
- * and will be parsed recursively if $recursive=true
+ * To make the tables more manageable, subpages are allowed
+ * and will be parsed recursively if $recursive == true.
*
*/
- function parseCachedTable($code, $subpage='', $recursive=true) {
+ function parseCachedTable( $code, $subpage = '', $recursive = true ) {
global $wgMessageCache;
static $parsed = array();
- if(!is_object($wgMessageCache))
+ if ( !is_object( $wgMessageCache ) ) {
return array();
+ }
- $key = 'Conversiontable/'.$code;
- if($subpage)
+ $key = 'Conversiontable/' . $code;
+ if ( $subpage ) {
$key .= '/' . $subpage;
-
- if(array_key_exists($key, $parsed))
+ }
+ if ( array_key_exists( $key, $parsed ) ) {
return array();
+ }
if ( strpos( $code, '/' ) === false ) {
$txt = $wgMessageCache->get( 'Conversiontable', true, $code );
} else {
- $title = Title::makeTitleSafe( NS_MEDIAWIKI, "Conversiontable/$code" );
+ $title = Title::makeTitleSafe( NS_MEDIAWIKI,
+ "Conversiontable/$code" );
if ( $title && $title->exists() ) {
$article = new Article( $title );
$txt = $article->getContents();
@@ -759,57 +855,66 @@ class LanguageConverter {
// get all subpage links of the form
// [[MediaWiki:conversiontable/zh-xx/...|...]]
- $linkhead = $this->mLangObj->getNsText(NS_MEDIAWIKI) . ':Conversiontable';
- $subs = explode('[[', $txt);
+ $linkhead = $this->mLangObj->getNsText( NS_MEDIAWIKI ) .
+ ':Conversiontable';
+ $subs = StringUtils::explode( '[[', $txt );
$sublinks = array();
- foreach( $subs as $sub ) {
- $link = explode(']]', $sub, 2);
- if(count($link) != 2)
+ foreach ( $subs as $sub ) {
+ $link = explode( ']]', $sub, 2 );
+ if ( count( $link ) != 2 ) {
continue;
- $b = explode('|', $link[0]);
- $b = explode('/', trim($b[0]), 3);
- if(count($b)==3)
+ }
+ $b = explode( '|', $link[0], 2 );
+ $b = explode( '/', trim( $b[0] ), 3 );
+ if ( count( $b ) == 3 ) {
$sublink = $b[2];
- else
+ } else {
$sublink = '';
+ }
- if($b[0] == $linkhead && $b[1] == $code) {
+ if ( $b[0] == $linkhead && $b[1] == $code ) {
$sublinks[] = $sublink;
}
}
// parse the mappings in this page
- $blocks = explode($this->mMarkup['begin'], $txt);
- array_shift($blocks);
+ $blocks = StringUtils::explode( '-{', $txt );
$ret = array();
- foreach($blocks as $block) {
- $mappings = explode($this->mMarkup['end'], $block, 2);
- $stripped = str_replace(array("'", '"', '*','#'), '', $mappings[0]);
- $table = explode( ';', $stripped );
- foreach( $table as $t ) {
- $m = explode( '=>', $t );
- if( count( $m ) != 2)
+ $first = true;
+ foreach ( $blocks as $block ) {
+ if ( $first ) {
+ // Skip the part before the first -{
+ $first = false;
+ continue;
+ }
+ $mappings = explode( '}-', $block, 2 );
+ $stripped = str_replace( array( "'", '"', '*', '#' ), '',
+ $mappings[0] );
+ $table = StringUtils::explode( ';', $stripped );
+ foreach ( $table as $t ) {
+ $m = explode( '=>', $t, 3 );
+ if ( count( $m ) != 2 )
continue;
// trim any trailling comments starting with '//'
- $tt = explode('//', $m[1], 2);
- $ret[trim($m[0])] = trim($tt[0]);
+ $tt = explode( '//', $m[1], 2 );
+ $ret[trim( $m[0] )] = trim( $tt[0] );
}
}
$parsed[$key] = true;
// recursively parse the subpages
- if($recursive) {
- foreach($sublinks as $link) {
- $s = $this->parseCachedTable($code, $link, $recursive);
- $ret = array_merge($ret, $s);
+ if ( $recursive ) {
+ foreach ( $sublinks as $link ) {
+ $s = $this->parseCachedTable( $code, $link, $recursive );
+ $ret = array_merge( $ret, $s );
}
}
- if ($this->mUcfirst) {
- foreach ($ret as $k => $v) {
- $ret[Language::ucfirst($k)] = Language::ucfirst($v);
+ if ( $this->mUcfirst ) {
+ foreach ( $ret as $k => $v ) {
+ $ret[Language::ucfirst( $k )] = Language::ucfirst( $v );
}
}
return $ret;
@@ -817,42 +922,44 @@ class LanguageConverter {
/**
* Enclose a string with the "no conversion" tag. This is used by
- * various functions in the Parser
+ * various functions in the Parser.
*
* @param string $text text to be tagged for no conversion
* @return string the tagged text
* @public
*/
- function markNoConversion($text, $noParse=false) {
+ function markNoConversion( $text, $noParse = false ) {
# don't mark if already marked
- if(strpos($text, $this->mMarkup['begin']) ||
- strpos($text, $this->mMarkup['end']))
+ if ( strpos( $text, '-{' ) || strpos( $text, '}-' ) ) {
return $text;
+ }
- $ret = $this->mMarkup['begin'] .'R|'. $text . $this->mMarkup['end'];
+ $ret = "-{R|$text}-";
return $ret;
}
/**
- * convert the sorting key for category links. this should make different
- * keys that are variants of each other map to the same key
+ * Convert the sorting key for category links. This should make different
+ * keys that are variants of each other map to the same key.
*/
function convertCategoryKey( $key ) {
return $key;
}
+
/**
- * hook to refresh the cache of conversion tables when
- * MediaWiki:conversiontable* is updated
+ * Hook to refresh the cache of conversion tables when
+ * MediaWiki:conversiontable* is updated.
* @private
*/
- function OnArticleSaveComplete($article, $user, $text, $summary, $isminor, $iswatch, $section, $flags, $revision) {
+ function OnArticleSaveComplete( $article, $user, $text, $summary, $isminor,
+ $iswatch, $section, $flags, $revision ) {
$titleobj = $article->getTitle();
- if($titleobj->getNamespace() == NS_MEDIAWIKI) {
+ if ( $titleobj->getNamespace() == NS_MEDIAWIKI ) {
$title = $titleobj->getDBkey();
- $t = explode('/', $title, 3);
- $c = count($t);
- if( $c > 1 && $t[0] == 'Conversiontable' ) {
- if(in_array($t[1], $this->mVariants)) {
+ $t = explode( '/', $title, 3 );
+ $c = count( $t );
+ if ( $c > 1 && $t[0] == 'Conversiontable' ) {
+ if ( $this->validateVariant( $t[1] ) ) {
$this->reloadTables();
}
}
@@ -860,30 +967,64 @@ class LanguageConverter {
return true;
}
- /**
- * Armour rendered math against conversion
- * Wrap math into rawoutput -{R| math }- syntax
+ /**
+ * Armour rendered math against conversion.
+ * Wrap math into rawoutput -{R| math }- syntax.
* @public
*/
- function armourMath($text){
- $ret = $this->mMarkup['begin'] . 'R|' . $text . $this->mMarkup['end'];
+ function armourMath( $text ) {
+ // we need to convert '-{' and '}-' to '-&#123;' and '&#125;-'
+ // to avoid a unwanted '}-' appeared after the math-image.
+ $text = strtr( $text, array( '-{' => '-&#123;', '}-' => '&#125;-' ) );
+ $ret = "-{R|$text}-";
return $ret;
}
+
+ /**
+ * Get the cached separator pattern for ConverterRule::parseRules()
+ */
+ function getVarSeparatorPattern() {
+ if ( is_null( $this->mVarSeparatorPattern ) ) {
+ // varsep_pattern for preg_split:
+ // text should be splited by ";" only if a valid variant
+ // name exist after the markup, for example:
+ // -{zh-hans:<span style="font-size:120%;">xxx</span>;zh-hant:\
+ // <span style="font-size:120%;">yyy</span>;}-
+ // we should split it as:
+ // array(
+ // [0] => 'zh-hans:<span style="font-size:120%;">xxx</span>'
+ // [1] => 'zh-hant:<span style="font-size:120%;">yyy</span>'
+ // [2] => ''
+ // )
+ $pat = '/;\s*(?=';
+ foreach ( $this->mVariants as $variant ) {
+ // zh-hans:xxx;zh-hant:yyy
+ $pat .= $variant . '\s*:|';
+ // xxx=>zh-hans:yyy; xxx=>zh-hant:zzz
+ $pat .= '[^;]*?=>\s*' . $variant . '\s*:|';
+ }
+ $pat .= '\s*$)/';
+ $this->mVarSeparatorPattern = $pat;
+ }
+ return $this->mVarSeparatorPattern;
+ }
}
/**
- * parser for rules of language conversion , parse rules in -{ }- tag
+ * Parser for rules of language conversion , parse rules in -{ }- tag.
* @ingroup Language
* @author fdcn <fdcn64@gmail.com>, PhiLiP <philip.npc@gmail.com>
*/
class ConverterRule {
var $mText; // original text in -{text}-
- var $mConverter; // LanguageConverter object
- var $mManualCodeError='<strong class="error">code error!</strong>';
- var $mRuleDisplay = '',$mRuleTitle=false;
+ var $mConverter; // LanguageConverter object
+ var $mManualCodeError = '<strong class="error">code error!</strong>';
+ var $mRuleDisplay = '';
+ var $mRuleTitle = false;
var $mRules = '';// string : the text of the rules
var $mRulesAction = 'none';
var $mFlags = array();
+ var $mVariantFlags = array();
var $mConvTable = array();
var $mBidtable = array();// array of the translation in each variant
var $mUnidtable = array();// array of the translation in each variant
@@ -891,107 +1032,98 @@ class ConverterRule {
/**
* Constructor
*
- * @param string $text the text between -{ and }-
- * @param object $converter a LanguageConverter object
- * @access public
+ * @param $text String: the text between -{ and }-
+ * @param $converter LanguageConverter object
*/
- function __construct($text,$converter){
+ public function __construct( $text, $converter ) {
$this->mText = $text;
- $this->mConverter=$converter;
- foreach($converter->mVariants as $v){
- $this->mConvTable[$v]=array();
- }
+ $this->mConverter = $converter;
}
/**
- * check if variants array in convert array
+ * Check if variants array in convert array.
*
- * @param string $variant Variant language code
- * @return string Translated text
- * @public
+ * @param $variants Array or string: variant language code
+ * @return String: translated text
*/
- function getTextInBidtable($variants){
- if(is_string($variants)){ $variants=array($variants); }
- if(!is_array($variants)) return false;
- foreach ($variants as $variant){
- if(array_key_exists($variant, $this->mBidtable)){
+ public function getTextInBidtable( $variants ) {
+ $variants = (array)$variants;
+ if ( !$variants ) {
+ return false;
+ }
+ foreach ( $variants as $variant ) {
+ if ( isset( $this->mBidtable[$variant] ) ) {
return $this->mBidtable[$variant];
}
}
return false;
}
-
+
/**
* Parse flags with syntax -{FLAG| ... }-
* @private
*/
- function parseFlags(){
+ function parseFlags() {
$text = $this->mText;
- if(strlen($text) < 2 ) {
- $this->mFlags = array( 'R' );
- $this->mRules = $text;
- return;
- }
-
$flags = array();
- $markup = $this->mConverter->mMarkup;
- $validFlags = $this->mConverter->mFlags;
- $variants = $this->mConverter->mVariants;
-
- $tt = explode($markup['flagsep'], $text, 2);
- if(count($tt) == 2) {
- $f = explode($markup['varsep'], $tt[0]);
- foreach($f as $ff) {
- $ff = trim($ff);
- if(array_key_exists($ff, $validFlags) &&
- !in_array($validFlags[$ff], $flags))
- $flags[] = $validFlags[$ff];
+ $variantFlags = array();
+
+ $sepPos = strpos( $text, '|' );
+ if ( $sepPos !== false ) {
+ $validFlags = $this->mConverter->mFlags;
+ $f = StringUtils::explode( ';', substr( $text, 0, $sepPos ) );
+ foreach ( $f as $ff ) {
+ $ff = trim( $ff );
+ if ( isset( $validFlags[$ff] ) ) {
+ $flags[$validFlags[$ff]] = true;
+ }
}
- $rules = $tt[1];
- } else {
- $rules = $text;
- }
-
- //check flags
- if( in_array('R',$flags) ){
- $flags = array('R');// remove other flags
- } elseif ( in_array('N',$flags) ){
- $flags = array('N');// remove other flags
- } elseif ( in_array('-',$flags) ){
- $flags = array('-');// remove other flags
- } elseif (count($flags)==1 && $flags[0]=='T'){
- $flags[]='H';
- } elseif ( in_array('H',$flags) ){
+ $text = strval( substr( $text, $sepPos + 1 ) );
+ }
+
+ if ( !$flags ) {
+ $flags['S'] = true;
+ } elseif ( isset( $flags['R'] ) ) {
+ $flags = array( 'R' => true );// remove other flags
+ } elseif ( isset( $flags['N'] ) ) {
+ $flags = array( 'N' => true );// remove other flags
+ } elseif ( isset( $flags['-'] ) ) {
+ $flags = array( '-' => true );// remove other flags
+ } elseif ( count( $flags ) == 1 && isset( $flags['T'] ) ) {
+ $flags['H'] = true;
+ } elseif ( isset( $flags['H'] ) ) {
// replace A flag, and remove other flags except T
- $temp=array('+','H');
- if(in_array('T',$flags)) $temp[] = 'T';
- if(in_array('D',$flags)) $temp[] = 'D';
+ $temp = array( '+' => true, 'H' => true );
+ if ( isset( $flags['T'] ) ) {
+ $temp['T'] = true;
+ }
+ if ( isset( $flags['D'] ) ) {
+ $temp['D'] = true;
+ }
$flags = $temp;
} else {
- if ( in_array('A',$flags) ) {
- $flags[]='+';
- $flags[]='S';
+ if ( isset( $flags['A'] ) ) {
+ $flags['+'] = true;
+ $flags['S'] = true;
+ }
+ if ( isset( $flags['D'] ) ) {
+ unset( $flags['S'] );
}
- if ( in_array('D',$flags) )
- $flags=array_diff($flags,array('S'));
- $flags_temp = array();
- foreach ($variants as $variant) {
- // try to find flags like "zh-hans", "zh-hant"
- // allow syntaxes like "-{zh-hans;zh-hant|XXXX}-"
- if ( in_array($variant, $flags) )
- $flags_temp[] = $variant;
+ // try to find flags like "zh-hans", "zh-hant"
+ // allow syntaxes like "-{zh-hans;zh-hant|XXXX}-"
+ $variantFlags = array_intersect( array_keys( $flags ), $this->mConverter->mVariants );
+ if ( $variantFlags ) {
+ $variantFlags = array_flip( $variantFlags );
+ $flags = array();
}
- if ( count($flags_temp) !== 0 )
- $flags = $flags_temp;
}
- if ( count($flags) == 0 )
- $flags = array('S');
- $this->mRules=$rules;
- $this->mFlags=$flags;
+ $this->mVariantFlags = $variantFlags;
+ $this->mRules = $text;
+ $this->mFlags = $flags;
}
-
+
/**
- * generate conversion table
+ * Generate conversion table.
* @private
*/
function parseRules() {
@@ -999,50 +1131,37 @@ class ConverterRule {
$flags = $this->mFlags;
$bidtable = array();
$unidtable = array();
- $markup = $this->mConverter->mMarkup;
$variants = $this->mConverter->mVariants;
+ $varsep_pattern = $this->mConverter->getVarSeparatorPattern();
+
+ $choice = preg_split( $varsep_pattern, $rules );
- // varsep_pattern for preg_split:
- // text should be splited by ";" only if a valid variant
- // name exist after the markup, for example:
- // -{zh-hans:<span style="font-size:120%;">xxx</span>;zh-hant:<span style="font-size:120%;">yyy</span>;}-
- // we should split it as:
- // array(
- // [0] => 'zh-hans:<span style="font-size:120%;">xxx</span>'
- // [1] => 'zh-hant:<span style="font-size:120%;">yyy</span>'
- // [2] => ''
- // )
- $varsep_pattern = '/' . $markup['varsep'] . '\s*' . '(?=';
- foreach( $variants as $variant ) {
- $varsep_pattern .= $variant . '\s*' . $markup['codesep'] . '|'; // zh-hans:xxx;zh-hant:yyy
- $varsep_pattern .= '[^;]*?' . $markup['unidsep'] . '\s*' . $variant
- . '\s*' . $markup['codesep'] . '|'; // xxx=>zh-hans:yyy; xxx=>zh-hant:zzz
- }
- $varsep_pattern .= '\s*$)/';
-
- $choice = preg_split($varsep_pattern, $rules);
-
- foreach( $choice as $c ) {
- $v = explode($markup['codesep'], $c, 2);
- if( count($v) != 2 )
- continue;// syntax error, skip
- $to = trim($v[1]);
- $v = trim($v[0]);
- $u = explode($markup['unidsep'], $v);
+ foreach ( $choice as $c ) {
+ $v = explode( ':', $c, 2 );
+ if ( count( $v ) != 2 ) {
+ // syntax error, skip
+ continue;
+ }
+ $to = trim( $v[1] );
+ $v = trim( $v[0] );
+ $u = explode( '=>', $v, 2 );
// if $to is empty, strtr() could return a wrong result
- if( count($u) == 1 && $to && in_array( $v, $variants ) ) {
+ if ( count( $u ) == 1 && $to && in_array( $v, $variants ) ) {
$bidtable[$v] = $to;
- } else if(count($u) == 2){
- $from = trim($u[0]);
- $v = trim($u[1]);
- if( array_key_exists( $v, $unidtable ) && !is_array( $unidtable[$v] )
- && $to && in_array( $v, $variants ) )
- $unidtable[$v] = array( $from=>$to );
- elseif ( $to && in_array( $v, $variants ) )
+ } elseif ( count( $u ) == 2 ) {
+ $from = trim( $u[0] );
+ $v = trim( $u[1] );
+ if ( array_key_exists( $v, $unidtable )
+ && !is_array( $unidtable[$v] )
+ && $to
+ && in_array( $v, $variants ) ) {
+ $unidtable[$v] = array( $from => $to );
+ } elseif ( $to && in_array( $v, $variants ) ) {
$unidtable[$v][$from] = $to;
+ }
}
// syntax error, pass
- if ( !array_key_exists( $v, $this->mConverter->mVariantNames ) ){
+ if ( !isset( $this->mConverter->mVariantNames[$v] ) ) {
$bidtable = array();
$unidtable = array();
break;
@@ -1055,111 +1174,127 @@ class ConverterRule {
/**
* @private
*/
- function getRulesDesc(){
+ function getRulesDesc() {
$codesep = $this->mConverter->mDescCodeSep;
$varsep = $this->mConverter->mDescVarSep;
- $text='';
- foreach($this->mBidtable as $k => $v)
- $text .= $this->mConverter->mVariantNames[$k]."$codesep$v$varsep";
- foreach($this->mUnidtable as $k => $a)
- foreach($a as $from=>$to)
- $text.=$from.'⇒'.$this->mConverter->mVariantNames[$k]."$codesep$to$varsep";
+ $text = '';
+ foreach ( $this->mBidtable as $k => $v ) {
+ $text .= $this->mConverter->mVariantNames[$k] . "$codesep$v$varsep";
+ }
+ foreach ( $this->mUnidtable as $k => $a ) {
+ foreach ( $a as $from => $to ) {
+ $text .= $from . '⇒' . $this->mConverter->mVariantNames[$k] .
+ "$codesep$to$varsep";
+ }
+ }
return $text;
}
/**
- * Parse rules conversion
+ * Parse rules conversion.
* @private
*/
- function getRuleConvertedStr($variant,$doConvert){
+ function getRuleConvertedStr( $variant ) {
$bidtable = $this->mBidtable;
$unidtable = $this->mUnidtable;
- if( count($bidtable) + count($unidtable) == 0 ){
+ if ( count( $bidtable ) + count( $unidtable ) == 0 ) {
return $this->mRules;
- } elseif ($doConvert){// the text converted
+ } else {
// display current variant in bidirectional array
- $disp = $this->getTextInBidtable($variant);
+ $disp = $this->getTextInBidtable( $variant );
// or display current variant in fallbacks
- if(!$disp)
+ if ( !$disp ) {
$disp = $this->getTextInBidtable(
- $this->mConverter->getVariantFallbacks($variant));
+ $this->mConverter->getVariantFallbacks( $variant ) );
+ }
// or display current variant in unidirectional array
- if(!$disp && array_key_exists($variant,$unidtable)){
- $disp = array_values($unidtable[$variant]);
+ if ( !$disp && array_key_exists( $variant, $unidtable ) ) {
+ $disp = array_values( $unidtable[$variant] );
$disp = $disp[0];
}
// or display frist text under disable manual convert
- if(!$disp && $this->mConverter->mManualLevel[$variant]=='disable') {
- if(count($bidtable)>0){
- $disp = array_values($bidtable);
+ if ( !$disp
+ && $this->mConverter->mManualLevel[$variant] == 'disable' ) {
+ if ( count( $bidtable ) > 0 ) {
+ $disp = array_values( $bidtable );
$disp = $disp[0];
} else {
- $disp = array_values($unidtable);
- $disp = array_values($disp[0]);
+ $disp = array_values( $unidtable );
+ $disp = array_values( $disp[0] );
$disp = $disp[0];
}
}
return $disp;
- } else {// no convert
- return $this->mRules;
}
}
/**
- * generate conversion table for all text
+ * Generate conversion table for all text.
* @private
*/
- function generateConvTable(){
- $flags = $this->mFlags;
+ function generateConvTable() {
+ // Special case optimisation
+ if ( !$this->mBidtable && !$this->mUnidtable ) {
+ $this->mConvTable = array();
+ return;
+ }
+
$bidtable = $this->mBidtable;
$unidtable = $this->mUnidtable;
$manLevel = $this->mConverter->mManualLevel;
- $vmarked=array();
- foreach($this->mConverter->mVariants as $v) {
+ $vmarked = array();
+ foreach ( $this->mConverter->mVariants as $v ) {
/* for bidirectional array
fill in the missing variants, if any,
with fallbacks */
- if(!array_key_exists($v, $bidtable)) {
- $variantFallbacks = $this->mConverter->getVariantFallbacks($v);
- $vf = $this->getTextInBidtable($variantFallbacks);
- if($vf) $bidtable[$v] = $vf;
+ if ( !isset( $bidtable[$v] ) ) {
+ $variantFallbacks =
+ $this->mConverter->getVariantFallbacks( $v );
+ $vf = $this->getTextInBidtable( $variantFallbacks );
+ if ( $vf ) {
+ $bidtable[$v] = $vf;
+ }
}
- if(array_key_exists($v,$bidtable)){
- foreach($vmarked as $vo){
- // use syntax: -{A|zh:WordZh;zh-tw:WordTw}-
- // or -{H|zh:WordZh;zh-tw:WordTw}- or -{-|zh:WordZh;zh-tw:WordTw}-
+ if ( isset( $bidtable[$v] ) ) {
+ foreach ( $vmarked as $vo ) {
+ // use syntax: -{A|zh:WordZh;zh-tw:WordTw}-
+ // or -{H|zh:WordZh;zh-tw:WordTw}-
+ // or -{-|zh:WordZh;zh-tw:WordTw}-
// to introduce a custom mapping between
- // words WordZh and WordTw in the whole text
- if($manLevel[$v]=='bidirectional'){
- $this->mConvTable[$v][$bidtable[$vo]]=$bidtable[$v];
+ // words WordZh and WordTw in the whole text
+ if ( $manLevel[$v] == 'bidirectional' ) {
+ $this->mConvTable[$v][$bidtable[$vo]] = $bidtable[$v];
}
- if($manLevel[$vo]=='bidirectional'){
- $this->mConvTable[$vo][$bidtable[$v]]=$bidtable[$vo];
+ if ( $manLevel[$vo] == 'bidirectional' ) {
+ $this->mConvTable[$vo][$bidtable[$v]] = $bidtable[$vo];
}
}
- $vmarked[]=$v;
+ $vmarked[] = $v;
}
- /*for unidirectional array
- fill to convert tables */
- $allow_unid = $manLevel[$v]=='bidirectional'
- || $manLevel[$v]=='unidirectional';
- if($allow_unid && array_key_exists($v,$unidtable)){
- $ct=$this->mConvTable[$v];
- $this->mConvTable[$v] = array_merge($ct,$unidtable[$v]);
+ /*for unidirectional array fill to convert tables */
+ if ( ( $manLevel[$v] == 'bidirectional' || $manLevel[$v] == 'unidirectional' )
+ && isset( $unidtable[$v] ) )
+ {
+ if ( isset( $this->mConvTable[$v] ) ) {
+ $this->mConvTable[$v] = array_merge( $this->mConvTable[$v], $unidtable[$v] );
+ } else {
+ $this->mConvTable[$v] = $unidtable[$v];
+ }
}
}
}
/**
- * Parse rules and flags
+ * Parse rules and flags.
* @public
*/
- function parse($variant){
- if(!$variant)
+ function parse( $variant = NULL ) {
+ if ( !$variant ) {
$variant = $this->mConverter->getPreferredVariant();
+ }
$variants = $this->mConverter->mVariants;
$this->parseFlags();
@@ -1167,125 +1302,151 @@ class ConverterRule {
// convert to specified variant
// syntax: -{zh-hans;zh-hant[;...]|<text to convert>}-
- if( count( array_diff( $flags, $variants ) ) == 0 and count( $flags ) != 0 ) {
- if ( in_array( $variant, $flags ) ) // check if current variant in flags
+ if ( $this->mVariantFlags ) {
+ // check if current variant in flags
+ if ( isset( $this->mVariantFlags[$variant] ) ) {
// then convert <text to convert> to current language
- $this->mRules = $this->mConverter->autoConvert( $this->mRules, $variant );
- else { // if current variant no in flags,
+ $this->mRules = $this->mConverter->autoConvert( $this->mRules,
+ $variant );
+ } else { // if current variant no in flags,
// then we check its fallback variants.
- $variantFallbacks = $this->mConverter->getVariantFallbacks($variant);
+ $variantFallbacks =
+ $this->mConverter->getVariantFallbacks( $variant );
foreach ( $variantFallbacks as $variantFallback ) {
// if current variant's fallback exist in flags
- if ( in_array( $variantFallback, $flags ) ) {
+ if ( isset( $this->mVariantFlags[$variantFallback] ) ) {
// then convert <text to convert> to fallback language
- $this->mRules = $this->mConverter->autoConvert( $this->mRules, $variantFallback );
+ $this->mRules =
+ $this->mConverter->autoConvert( $this->mRules,
+ $variantFallback );
break;
}
}
}
- $this->mFlags = $flags = array('R');
+ $this->mFlags = $flags = array( 'R' => true );
}
- if( !in_array( 'R', $flags ) || !in_array( 'N', $flags ) ) {
- // decode => HTML entities modified by Sanitizer::removeHTMLtags
- $this->mRules = str_replace('=&gt;','=>',$this->mRules);
-
+ if ( !isset( $flags['R'] ) && !isset( $flags['N'] ) ) {
+ // decode => HTML entities modified by Sanitizer::removeHTMLtags
+ $this->mRules = str_replace( '=&gt;', '=>', $this->mRules );
$this->parseRules();
}
$rules = $this->mRules;
- if( count( $this->mBidtable ) == 0 && count( $this->mUnidtable ) == 0 ){
- if(in_array('+',$flags) || in_array('-',$flags))
+ if ( !$this->mBidtable && !$this->mUnidtable ) {
+ if ( isset( $flags['+'] ) || isset( $flags['-'] ) ) {
// fill all variants if text in -{A/H/-|text} without rules
- foreach($this->mConverter->mVariants as $v)
+ foreach ( $this->mConverter->mVariants as $v ) {
$this->mBidtable[$v] = $rules;
- elseif (!in_array('N',$flags) && !in_array('T',$flags) )
- $this->mFlags = $flags = array('R');
- }
-
- if( in_array('R',$flags) ) {
- // if we don't do content convert, still strip the -{}- tags
- $this->mRuleDisplay = $rules;
- } elseif ( in_array('N',$flags) ){
- // proces N flag: output current variant name
- $this->mRuleDisplay = $this->mConverter->mVariantNames[trim($rules)];
- } elseif ( in_array('D',$flags) ){
- // proces D flag: output rules description
- $this->mRuleDisplay = $this->getRulesDesc();
- } elseif ( in_array('H',$flags) || in_array('-',$flags) ) {
- // proces H,- flag or T only: output nothing
- $this->mRuleDisplay = '';
- } elseif ( in_array('S',$flags) ){
- $this->mRuleDisplay = $this->getRuleConvertedStr($variant,
- $this->mConverter->mDoContentConvert);
- } else {
- $this->mRuleDisplay= $this->mManualCodeError;
+ }
+ } elseif ( !isset( $flags['N'] ) && !isset( $flags['T'] ) ) {
+ $this->mFlags = $flags = array( 'R' => true );
+ }
+ }
+
+ $this->mRuleDisplay = false;
+ foreach ( $flags as $flag => $unused ) {
+ switch ( $flag ) {
+ case 'R':
+ // if we don't do content convert, still strip the -{}- tags
+ $this->mRuleDisplay = $rules;
+ break;
+ case 'N':
+ // process N flag: output current variant name
+ $ruleVar = trim( $rules );
+ if ( isset( $this->mConverter->mVariantNames[$ruleVar] ) ) {
+ $this->mRuleDisplay = $this->mConverter->mVariantNames[$ruleVar];
+ } else {
+ $this->mRuleDisplay = '';
+ }
+ break;
+ case 'D':
+ // process D flag: output rules description
+ $this->mRuleDisplay = $this->getRulesDesc();
+ break;
+ case 'H':
+ // process H,- flag or T only: output nothing
+ $this->mRuleDisplay = '';
+ break;
+ case '-':
+ $this->mRulesAction = 'remove';
+ $this->mRuleDisplay = '';
+ break;
+ case '+':
+ $this->mRulesAction = 'add';
+ $this->mRuleDisplay = '';
+ break;
+ case 'S':
+ $this->mRuleDisplay = $this->getRuleConvertedStr( $variant );
+ break;
+ case 'T':
+ $this->mRuleTitle = $this->getRuleConvertedStr( $variant );
+ $this->mRuleDisplay = '';
+ break;
+ default:
+ // ignore unknown flags (but see error case below)
+ }
}
- // proces T flag
- if ( in_array('T',$flags) ) {
- $this->mRuleTitle = $this->getRuleConvertedStr($variant,
- $this->mConverter->mDoTitleConvert);
+ if ( $this->mRuleDisplay === false ) {
+ $this->mRuleDisplay = $this->mManualCodeError;
}
- if (in_array('-', $flags))
- $this->mRulesAction='remove';
- if (in_array('+', $flags))
- $this->mRulesAction='add';
-
$this->generateConvTable();
}
-
+
/**
* @public
*/
- function hasRules(){
+ function hasRules() {
// TODO:
}
/**
- * get display text on markup -{...}-
+ * Get display text on markup -{...}-
* @public
*/
- function getDisplay(){
+ function getDisplay() {
return $this->mRuleDisplay;
}
+
/**
- * get converted title
+ * Get converted title.
* @public
*/
- function getTitle(){
+ function getTitle() {
return $this->mRuleTitle;
}
/**
- * return how deal with conversion rules
+ * Return how deal with conversion rules.
* @public
*/
- function getRulesAction(){
+ function getRulesAction() {
return $this->mRulesAction;
}
/**
- * get conversion table ( bidirectional and unidirectional conversion table )
+ * Get conversion table. ( bidirectional and unidirectional
+ * conversion table )
* @public
*/
- function getConvTable(){
+ function getConvTable() {
return $this->mConvTable;
}
/**
- * get conversion rules string
+ * Get conversion rules string.
* @public
*/
- function getRules(){
+ function getRules() {
return $this->mRules;
}
/**
- * get conversion flags
+ * Get conversion flags.
* @public
*/
- function getFlags(){
+ function getFlags() {
return $this->mFlags;
}
}
diff --git a/languages/Names.php b/languages/Names.php
index 5bf042d1..79759c95 100644
--- a/languages/Names.php
+++ b/languages/Names.php
@@ -15,7 +15,7 @@
'als' => 'Alemannisch', # Alemannic -- not a valid code, for compatibility. See gsw.
'am' => 'አማርኛ', # Amharic
'an' => 'Aragonés', # Aragonese
- 'ang' => 'Anglo-Saxon', # Old English
+ 'ang' => 'Ænglisc', # Old English (Bug 23283)
'ar' => 'العربية', # Arabic
'arc' => 'ܐܪܡܝܐ', # Aramaic
'arn' => 'Mapudungun', # Mapuche, Mapudungu, Araucanian (Araucano)
@@ -25,7 +25,7 @@
'av' => 'Авар', # Avar
'avk' => 'Kotava', # Kotava
'ay' => 'Aymar aru', # Aymara
- 'az' => 'Azərbaycan', # Azerbaijani
+ 'az' => 'Azərbaycanca', # Azerbaijani
'ba' => 'Башҡорт', # Bashkir
'bar' => 'Boarisch', # Bavarian (Austro-Bavarian and South Tyrolean)
'bat-smg' => 'Žemaitėška', # Samogitian
@@ -44,7 +44,6 @@
'bqi' => 'بختياري', # Bakthiari
'br' => 'Brezhoneg', # Breton
'bs' => 'Bosanski', # Bosnian
- 'bto' => 'Iriga Bicolano', # Iriga Bicolano/Rinconada Bikol
'bug' => 'ᨅᨔ ᨕᨘᨁᨗ', # Bugis
'bxr' => 'Буряад', # Buryat (Russia)
'ca' => 'Català', # Catalan
@@ -56,15 +55,19 @@
'cho' => 'Choctaw', # Choctaw
'chr' => 'ᏣᎳᎩ', # Cherokee
'chy' => 'Tsetsêhestâhese', # Cheyenne
+ 'ckb' => 'Soranî / کوردی', # Sorani
+ 'ckb-latn' => "\xE2\x80\xAASoranî (latînî)\xE2\x80\xAC", # Central Kurdish Latin script
+ 'ckb-arab' => "\xE2\x80\xABکوردی (عەرەبی)\xE2\x80\xAC", # Central Kurdish Arabic script
'co' => 'Corsu', # Corsican
+ 'cps' => 'Capiceño', # Capiznon
'cr' => 'Nēhiyawēwin / ᓀᐦᐃᔭᐍᐏᐣ', # Cree
'crh' => 'Qırımtatarca', # Crimean Tatar
'crh-latn' => "\xE2\x80\xAAQırımtatarca (Latin)\xE2\x80\xAC", # Crimean Tatar (Latin)
'crh-cyrl' => "\xE2\x80\xAAКъырымтатарджа (Кирилл)\xE2\x80\xAC", # Crimean Tatar (Cyrillic)
'cs' => 'Česky', # Czech
'csb' => 'Kaszëbsczi', # Cassubian
- 'cu' => 'Словѣ́ньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ', # Old Church Slavonic (ancient language)
- 'cv' => 'Чăвашла', # Chuvash
+ 'cu' => 'Словѣ́ньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ', # Old Church Slavonic (ancient language)
+ 'cv' => 'Чӑвашла', # Chuvash
'cy' => 'Cymraeg', # Welsh
'da' => 'Dansk', # Danish
'de' => 'Deutsch', # German ("Du")
@@ -72,7 +75,7 @@
'de-ch' => 'Schweizer Hochdeutsch', # Swiss Standard German
'de-formal' => 'Deutsch (Sie-Form)', # German - formal address ("Sie")
'diq' => 'Zazaki', # Zazaki
- 'dk' => 'Dansk (deprecated:da)', # Unused code currently falls back to Danish, 'da' is correct for the language
+ 'dk' => 'Dansk (deprecated:da)', # Unused code currently falls back to Danish, 'da' is correct for the language
'dsb' => 'Dolnoserbski', # Lower Sorbian
'dv' => 'ދިވެހިބަސް', # Dhivehi
'dz' => 'ཇོང་ཁ', # Bhutani
@@ -95,13 +98,14 @@
'fr' => 'Français', # French
'frc' => 'Français cadien', # Cajun French
'frp' => 'Arpetan', # Franco-Provençal/Arpitan
+ 'frr' => 'Frasch', # North Frisian
'fur' => 'Furlan', # Friulian
'fy' => 'Frysk', # Frisian
'ga' => 'Gaeilge', # Irish
'gag' => 'Gagauz', # Gagauz
- 'gan' => '贛語', # Gan-hant
- 'gan-hans' => '赣语(简体)', # Gan-hans
- 'gan-hant' => '贛語(繁體)', # Gan-hant
+ 'gan' => '贛語', # Gan
+ 'gan-hans' => '赣语(简体)', # Gan (Simplified Han)
+ 'gan-hant' => '贛語(繁體)', # Gan (Traditional Han)
'gd' => 'Gàidhlig', # Scots Gaelic
'gl' => 'Galego', # Galician
'glk' => 'گیلکی', # Gilaki
@@ -150,6 +154,7 @@
'kab' => 'Taqbaylit', # Kabyle
'kg' => 'Kongo', # Kongo, (FIXME!) should probaly be KiKongo or KiKoongo
'ki' => 'Gĩkũyũ', # Gikuyu
+ 'kiu' => 'Kırmancki', # Kirmanjki
'kj' => 'Kwanyama', # Kwanyama
'kk' => 'Қазақша', # Kazakh
'kk-arab' => "\xE2\x80\xABقازاقشا (تٴوتە)\xE2\x80\xAC", # Kazakh Arabic
@@ -162,15 +167,18 @@
'km' => 'ភាសាខ្មែរ', # Khmer, Central
'kn' => 'ಕನ್ನಡ', # Kannada
'ko' => '한국어', # Korean
+ 'ko-kp' => '한국어 (조선)', # Korean (DPRK)
+ 'koi' => 'Перем Коми', # Komi-Permyak
'kr' => 'Kanuri', # Kanuri, Central
+ 'krc' => 'Къарачай-Малкъар', # Karachay-Balkar
'kri' => 'Krio', # Krio
'krj' => 'Kinaray-a', # Kinaray-a
'ks' => 'कश्मीरी - (كشميري)', # Kashmiri
- 'ksh' => 'Ripoarisch', # Ripuarian
- 'ku' => 'Kurdî / كوردی', # Kurdish
+ 'ksh' => 'Ripoarisch', # Ripuarian
+ 'ku' => 'Kurdî', # Kurdish
'ku-latn' => "\xE2\x80\xAAKurdî (latînî)\xE2\x80\xAC", # Northern Kurdish Latin script
'ku-arab' => "\xE2\x80\xABكوردي (عەرەبی)\xE2\x80\xAC", # Northern Kurdish Arabic script
- 'kv' => 'Коми', # Komi-Zyrian, cyrillic is common script but also written in latin script
+ 'kv' => 'Коми', # Komi-Zyrian, cyrillic is common script but also written in latin script
'kw' => 'Kernewek', # Cornish
'ky' => 'Кыргызча', # Kirghiz
'la' => 'Latina', # Latin
@@ -182,15 +190,15 @@
'lg' => 'Luganda', # Ganda
'li' => 'Limburgs', # Limburgian
'lij' => 'Líguru', # Ligurian
- 'lld' => 'Ladin', # Ladin
'lmo' => 'Lumbaart', # Lombard
'ln' => 'Lingála', # Lingala
'lo' => 'ລາວ',# Laotian
'loz' => 'Silozi', # Lozi
'lt' => 'Lietuvių', # Lithuanian
+ 'ltg' => 'Latgaļu', # Latgalian
'lv' => 'Latviešu', # Latvian
'lzh' => '文言', # Literary Chinese -- (bug 8217) lzh instead of zh-classical, http://www.sil.org/iso639-3/codes.asp?order=639_3&letter=l
- 'lzz' => 'Lazuri Nena', #Laz
+ 'lzz' => 'Lazuri', # Laz
'mai' => 'मैथिली', # Maithili
'map-bms' => 'Basa Banyumasan', # Banyumasan
'mdf' => 'Мокшень', # Moksha
@@ -203,13 +211,14 @@
'mn' => 'Монгол', # Halh Mongolian (Cyrillic) (ISO 639-3: khk)
'mo' => 'Молдовеняскэ', # Moldovan
'mr' => 'मराठी', # Marathi
+ 'mrj' => 'Кырык мары', # Hill Mari
'ms' => 'Bahasa Melayu', # Malay
'mt' => 'Malti', # Maltese
'mus' => 'Mvskoke', # Muskogee/Creek
'mwl' => 'Mirandés', # Mirandese
- 'my' => 'Myanmasa', # Burmese
- 'myv' => 'Эрзянь', # Erzya
- 'mzn' => 'مَزِروني', # Mazanderani
+ 'my' => 'မြန်မာဘာသာ', # Burmese
+ 'myv' => 'Эрзянь', # Erzya
+ 'mzn' => 'مازِرونی', # Mazanderani
'na' => 'Dorerin Naoero', # Nauruan
'nah' => 'Nāhuatl', # Nahuatl, en:Wikipedia writes Nahuatlahtolli, while another form is Náhuatl
'nan' => 'Bân-lâm-gú', # Min-nan -- (bug 8217) nan instead of zh-min-nan, http://www.sil.org/iso639-3/codes.asp?order=639_3&letter=n
@@ -230,27 +239,29 @@
'nv' => 'Diné bizaad', # Navajo
'ny' => 'Chi-Chewa', # Chichewa
'oc' => 'Occitan', # Occitan
- 'om' => 'Oromoo', # Oromo
+ 'om' => 'Oromoo', # Oromo
'or' => 'ଓଡ଼ିଆ', # Oriya
'os' => 'Иронау', # Ossetic
'pa' => 'ਪੰਜਾਬੀ', # Eastern Punjabi (pan)
'pag' => 'Pangasinan', # Pangasinan
'pam' => 'Kapampangan', # Pampanga
'pap' => 'Papiamentu', # Papiamentu
- 'pdc' => 'Deitsch', # Pennsylvania German
- 'pdt' => 'Plautdietsch', # Plautdietsch/Mennonite Low German
- 'pfl' => 'Pfälzisch', # Palatinate German
+ 'pcd' => 'Picard', # Picard
+ 'pdc' => 'Deitsch', # Pennsylvania German
+ 'pdt' => 'Plautdietsch', # Plautdietsch/Mennonite Low German
+ 'pfl' => 'Pfälzisch', # Palatinate German
'pi' => 'पािऴ', # Pali
'pih' => 'Norfuk / Pitkern', # Norfuk/Pitcairn/Norfolk
'pl' => 'Polski', # Polish
- 'plm' => 'Palembang', # Palembang
- 'pms' => 'Piemontèis', # Piedmontese
+ 'pms' => 'Piemontèis', # Piedmontese
'pnb' => 'پنجابی', # Western Punjabi
- 'pnt' => 'Ποντιακά', # Pontic/Pontic Greek
+ 'pnt' => 'Ποντιακά', # Pontic/Pontic Greek
+ 'prg' => 'Prūsiskan', # Prussian
'ps' => 'پښتو', # Pashto, Northern/Paktu/Pakhtu/Pakhtoo/Afghan/Pakhto/Pashtu/Pushto/Yusufzai Pashto
'pt' => 'Português', # Portuguese
'pt-br' => 'Português do Brasil', # Brazilian Portuguese
'qu' => 'Runa Simi', # Quechua
+ 'rgn' => 'Rumagnôl', # Romagnol
'rif' => 'Tarifit', # Tarifit
'rm' => 'Rumantsch', # Raeto-Romance
'rmy' => 'Romani', # Vlax Romany
@@ -259,9 +270,10 @@
'roa-rup' => 'Armãneashce', # Aromanian
'roa-tara' => 'Tarandíne', # Tarantino
'ru' => 'Русский', # Russian
+ 'rue' => 'русиньскый язык', # Rusyn
'ruq' => 'Vlăheşte', # Megleno-Romanian (falls back to ruq-latn)
'ruq-cyrl' => 'Влахесте', # Megleno-Romanian (Cyrillic script)
- 'ruq-grek' => 'Βλαεστε', # Megleno-Romanian (Greek script)
+ #'ruq-grek' => 'Βλαεστε', # Megleno-Romanian (Greek script)
'ruq-latn' => 'Vlăheşte', # Megleno-Romanian (Latin script)
'rw' => 'Kinyarwanda', # Kinyarwanda, should possibly be Kinyarwandi
'sa' => 'संस्कृत', # Sanskrit
@@ -280,14 +292,15 @@
'simple' => 'Simple English', # Simple English
'sk' => 'Slovenčina', # Slovak
'sl' => 'Slovenščina', # Slovenian
+ 'sli' => 'Schläsch', # Lower Selisian
'sm' => 'Gagana Samoa', # Samoan
'sma' => 'Åarjelsaemien', # Southern Sami
'sn' => 'chiShona', # Shona
'so' => 'Soomaaliga', # Somali
'sq' => 'Shqip', # Albanian
'sr' => 'Српски / Srpski', # Serbian
- 'sr-ec' => 'ћирилица', # Serbian cyrillic ekavian
- 'sr-el' => 'latinica', # Serbian latin ekavian
+ 'sr-ec' => 'Српски (ћирилица)', # Serbian Cyrillic ekavian
+ 'sr-el' => 'Srpski (latinica)', # Serbian Latin ekavian
'srn' => 'Sranantongo', # Sranan Tongo
'ss' => 'SiSwati', # Swati
'st' => 'Sesotho', # Southern Sotho
@@ -307,7 +320,6 @@
'ti' => 'ትግርኛ', # Tigrinya
'tk' => 'Türkmençe', # Turkmen
'tl' => 'Tagalog', # Tagalog
- #'tlh' => 'tlhIngan-Hol', # Klingon - no interlanguage links allowed
'tn' => 'Setswana', # Setswana
'to' => 'lea faka-Tonga', # Tonga (Tonga Islands)
'tokipona' => 'Toki Pona', # Toki Pona
@@ -315,17 +327,16 @@
'tpi' => 'Tok Pisin', # Tok Pisin
'tr' => 'Türkçe', # Turkish
'ts' => 'Xitsonga', # Tsonga
- 'tt' => 'Tatarça/Татарча', # Tatar (multiple scripts - defaults to Latin)
+ 'tt' => 'Татарча/Tatarça', # Tatar (multiple scripts - defaults to Cyrillic)
'tt-cyrl' => 'Татарча', # Tatar (Cyrillic script)
'tt-latn' => 'Tatarça', # Tatar (Latin script)
'tum' => 'chiTumbuka', # Tumbuka
'tw' => 'Twi', # Twi, (FIXME!)
'ty' => 'Reo Mā`ohi', # Tahitian
'tyv' => 'Тыва дыл', # Tyvan
- 'tzm' => 'ⵜⴰⵎⴰⵣⵉⵖⵜ', # (Central Morocco) Tamazight
'udm' => 'Удмурт', # Udmurt
'ug' => 'Uyghurche‎ / ئۇيغۇرچە', # Uyghur (multiple scripts - defaults to Latin)
- #'ug-arab' => 'ئۇيغۇرچە', # Uyghur (Arabic script). Disabled until sufficient localisation can be committed
+ 'ug-arab' => 'ئۇيغۇرچە', # Uyghur (Arabic script)
'ug-latn' => 'Uyghurche‎', # Uyghur (Latin script - default)
'uk' => 'Українська', # Ukrainian
'ur' => 'اردو', # Urdu
@@ -335,7 +346,9 @@
'vep' => 'Vepsan kel\'', # Veps
'vi' => 'Tiếng Việt', # Vietnamese
'vls' => 'West-Vlams', # West Flemish
+ 'vmf' => 'Mainfränkisch', # Upper Franconian, Main-Franconian
'vo' => 'Volapük', # Volapük
+ 'vot' => 'Vaďďa', # Vod/Votian
'vro' => 'Võro', # Võro
'wa' => 'Walon', # Walloon
'war' => 'Winaray', # Waray-Waray
@@ -344,11 +357,10 @@
'xal' => 'Хальмг', # Kalmyk-Oirat (Kalmuk, Kalmuck, Kalmack, Qalmaq, Kalmytskii Jazyk, Khal:mag, Oirat, Volga Oirat, European Oirat, Western Mongolian)
'xh' => 'isiXhosa', # Xhosan
'xmf' => 'მარგალური', # Mingrelian
- 'ydd' => 'מיזרח־ייִדיש', # Eastern Yiddish
'yi' => 'ייִדיש', # Yiddish
'yo' => 'Yorùbá', # Yoruba
- 'yue' => '粵語', # Cantonese -- (bug 8217) yue instead of zh-yue, http://www.sil.org/iso639-3/codes.asp?order=639_3&letter=y
- 'za' => 'Sawcuengh', # Zhuang
+ 'yue' => '粵語', # Cantonese -- (bug 8217) yue instead of zh-yue, http://www.sil.org/iso639-3/codes.asp?order=639_3&letter=y
+ 'za' => 'Vahcuengh', # Zhuang
'zea' => 'Zeêuws', # Zeeuws/Zeaws
'zh' => '中文', # (Zhōng Wén) - Chinese
'zh-classical' => '文言', # Classical Chinese/Literary Chinese -- (see bug 8217)
@@ -356,10 +368,10 @@
'zh-hans' => "\xE2\x80\xAA中文(简体)\xE2\x80\xAC", # Chinese written using the Simplified Chinese script
'zh-hant' => "\xE2\x80\xAA中文(繁體)\xE2\x80\xAC", # Chinese written using the Traditional Chinese script
'zh-hk' => "\xE2\x80\xAA中文(香港)\xE2\x80\xAC", # Chinese (Hong Kong)
- 'zh-min-nan' => 'Bân-lâm-gú', # Min-nan -- (see bug 8217)
+ 'zh-min-nan' => 'Bân-lâm-gú', # Min-nan -- (see bug 8217)
'zh-mo' => "\xE2\x80\xAA中文(澳門)\xE2\x80\xAC", # Chinese (Macau)
'zh-my' => "\xE2\x80\xAA中文(马来西亚)\xE2\x80\xAC", # Chinese (Malaysia)
- 'zh-sg' => "\xE2\x80\xAA中文(新加坡)\xE2\x80\xAC", # Chinese (Singapore)
+ 'zh-sg' => "\xE2\x80\xAA中文(新加坡)\xE2\x80\xAC", # Chinese (Singapore)
'zh-tw' => "\xE2\x80\xAA中文(台灣)\xE2\x80\xAC", # Chinese (Taiwan)
'zh-yue' => '粵語', # Cantonese -- (see bug 8217)
'zu' => 'isiZulu' # Zulu
diff --git a/languages/classes/LanguageAm.php b/languages/classes/LanguageAm.php
new file mode 100644
index 00000000..cf31c709
--- /dev/null
+++ b/languages/classes/LanguageAm.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ *
+ * @ingroup Language
+ */
+class LanguageAm extends Language {
+ /**
+ * Use singular form for zero
+ */
+ function convertPlural( $count, $forms ) {
+ if ( !count($forms) ) { return ''; }
+ $forms = $this->preConvertPlural( $forms, 2 );
+
+ return ($count <= 1) ? $forms[0] : $forms[1];
+ }
+}
diff --git a/languages/classes/LanguageAr.php b/languages/classes/LanguageAr.php
index 01c921a0..70a53f86 100644
--- a/languages/classes/LanguageAr.php
+++ b/languages/classes/LanguageAr.php
@@ -6,22 +6,39 @@
* @author Niklas Laxström
*/
class LanguageAr extends Language {
-
function convertPlural( $count, $forms ) {
if ( !count($forms) ) { return ''; }
- $forms = $this->preConvertPlural( $forms, 5 );
+ $forms = $this->preConvertPlural( $forms, 6 );
- if ( $count == 1 ) {
+ if ( $count == 0 ) {
$index = 0;
- } elseif( $count == 2 ) {
+ } elseif ( $count == 1 ) {
$index = 1;
- } elseif( $count < 11 && $count > 2 ) {
+ } elseif( $count == 2 ) {
$index = 2;
- } elseif( $count % 100 == 0) {
+ } elseif( $count % 100 >= 3 && $count % 100 <= 10 ) {
$index = 3;
- } else {
+ } elseif( $count % 100 >= 11 && $count % 100 <= 99 ) {
$index = 4;
+ } else {
+ $index = 5;
}
return $forms[$index];
}
+
+ /**
+ * Temporary hack for bug 9413: replace Arabic presentation forms with their
+ * standard equivalents.
+ *
+ * FIXME: This is language-specific for now only to avoid the negative
+ * performance impact of enabling it for all languages.
+ */
+ function normalize( $s ) {
+ global $wgFixArabicUnicode;
+ $s = parent::normalize( $s );
+ if ( $wgFixArabicUnicode ) {
+ $s = $this->transformUsingPairFile( 'normalize-ar.ser', $s );
+ }
+ return $s;
+ }
}
diff --git a/languages/classes/LanguageBe.php b/languages/classes/LanguageBe.php
index 1468daff..b86a5f30 100644
--- a/languages/classes/LanguageBe.php
+++ b/languages/classes/LanguageBe.php
@@ -7,7 +7,6 @@
* @ingroup Language
*
* @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- * @bug 1638, 2135
* @link http://be.wikipedia.org/wiki/Talk:LanguageBe.php
* @license http://www.gnu.org/copyleft/gpl.html GNU General Public License
* @license http://www.gnu.org/copyleft/fdl.html GNU Free Documentation License
@@ -17,6 +16,8 @@ class LanguageBe extends Language {
function convertPlural( $count, $forms ) {
if ( !count($forms) ) { return ''; }
+ // FIXME: CLDR defines 4 plural forms instead of 3
+ // http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
$forms = $this->preConvertPlural( $forms, 3 );
if ($count > 10 && floor(($count % 100) / 10) == 1) {
diff --git a/languages/classes/LanguageBe_tarask.php b/languages/classes/LanguageBe_tarask.php
index 358cb486..96ad9467 100644
--- a/languages/classes/LanguageBe_tarask.php
+++ b/languages/classes/LanguageBe_tarask.php
@@ -4,7 +4,6 @@
* @ingroup Language
*
* @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- * @bug 1638, 2135
* @link http://be.wikipedia.org/wiki/Talk:LanguageBe.php
* @license http://www.gnu.org/copyleft/gpl.html GNU General Public License
* @license http://www.gnu.org/copyleft/fdl.html GNU Free Documentation License
@@ -25,6 +24,8 @@ class LanguageBe_tarask extends Language {
//if no number with word, then use $form[0] for singular and $form[1] for plural or zero
if( count($forms) === 2 ) return $count == 1 ? $forms[0] : $forms[1];
+ // FIXME: CLDR defines 4 plural forms instead of 3
+ // http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
$forms = $this->preConvertPlural( $forms, 3 );
if ($count > 10 && floor(($count % 100) / 10) == 1) {
diff --git a/languages/classes/LanguageBh.php b/languages/classes/LanguageBh.php
new file mode 100644
index 00000000..80119ec7
--- /dev/null
+++ b/languages/classes/LanguageBh.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ *
+ * @ingroup Language
+ */
+class LanguageBh extends Language {
+ /**
+ * Use singular form for zero
+ */
+ function convertPlural( $count, $forms ) {
+ if ( !count($forms) ) { return ''; }
+ $forms = $this->preConvertPlural( $forms, 2 );
+
+ return ($count <= 1) ? $forms[0] : $forms[1];
+ }
+}
diff --git a/languages/classes/LanguageBs.php b/languages/classes/LanguageBs.php
index 24f6adde..df522f83 100644
--- a/languages/classes/LanguageBs.php
+++ b/languages/classes/LanguageBs.php
@@ -10,6 +10,8 @@ class LanguageBs extends Language {
if ( !count($forms) ) { return ''; }
$forms = $this->preConvertPlural( $forms, 3 );
+ // FIXME: CLDR defines 4 plural forms instead of 3. Plural for decimals is missing.
+ // http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
if ($count > 10 && floor(($count % 100) / 10) == 1) {
return $forms[2];
} else {
diff --git a/languages/classes/LanguageCy.php b/languages/classes/LanguageCy.php
index 486f7a7c..9a395393 100644
--- a/languages/classes/LanguageCy.php
+++ b/languages/classes/LanguageCy.php
@@ -8,6 +8,9 @@
class LanguageCy extends Language {
function convertPlural( $count, $forms ) {
if ( !count($forms) ) { return ''; }
+
+ // FIXME: CLDR defines 4 plural forms; very different, actually.
+ // See http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#cy
$forms = $this->preConvertPlural( $forms, 6 );
$count = abs( $count );
if ( $count >= 0 && $count <= 3 ) {
diff --git a/languages/classes/LanguageEo.php b/languages/classes/LanguageEo.php
index c58d424f..822a43f7 100644
--- a/languages/classes/LanguageEo.php
+++ b/languages/classes/LanguageEo.php
@@ -6,7 +6,6 @@
*/
class LanguageEo extends Language {
function iconv( $in, $out, $string ) {
- # For most languages, this is a wrapper for iconv
# Por multaj lingvoj, ĉi tiu nur voku la sisteman funkcion iconv()
# Ni ankaŭ konvertu X-sistemajn surogotajn
if( strcasecmp( $in, 'x' ) == 0 and strcasecmp( $out, 'utf-8' ) == 0) {
@@ -42,7 +41,7 @@ class LanguageEo extends Language {
return preg_replace( '/((?:[cghjsu]|\xc4[\x88\x89\x9c\x9d\xa4\xa5\xb4\xb5]'.
'|\xc5[\x9c\x9d\xac\xad])x*)/ei', 'strtr( "$1", $ux )', $string );
}
- return iconv( $in, $out, $string );
+ return parent::iconv( $in, $out, $string );
}
function checkTitleEncoding( $s ) {
diff --git a/languages/classes/LanguageGa.php b/languages/classes/LanguageGa.php
index 2fdeed04..344fdc84 100644
--- a/languages/classes/LanguageGa.php
+++ b/languages/classes/LanguageGa.php
@@ -34,4 +34,20 @@ class LanguageGa extends Language {
}
return $word;
}
+
+ function convertPlural( $count, $forms ) {
+ if ( !count($forms) ) { return ''; }
+
+ // plural forms per http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#ga
+ $forms = $this->preConvertPlural( $forms, 3 );
+
+ if ( $count == 1 ) {
+ $index = 0;
+ } elseif( $count == 2 ) {
+ $index = 1;
+ } else {
+ $index = 2;
+ }
+ return $forms[$index];
+ }
}
diff --git a/languages/classes/LanguageGan.php b/languages/classes/LanguageGan.php
index f4541059..3c8b5fdb 100644
--- a/languages/classes/LanguageGan.php
+++ b/languages/classes/LanguageGan.php
@@ -11,7 +11,6 @@ class GanConverter extends LanguageConverter {
function __construct($langobj, $maincode,
$variants=array(),
$variantfallbacks=array(),
- $markup=array(),
$flags = array(),
$manualLevel = array() ) {
$this->mDescCodeSep = ':';
@@ -19,7 +18,6 @@ class GanConverter extends LanguageConverter {
parent::__construct($langobj, $maincode,
$variants,
$variantfallbacks,
- $markup,
$flags,
$manualLevel);
$names = array(
@@ -117,7 +115,7 @@ class LanguageGan extends LanguageZh {
$this->mConverter = new GanConverter( $this, 'gan',
$variants, $variantfallbacks,
- array(),array(),
+ array(),
$ml);
$wgHooks['ArticleSaveComplete'][] = $this->mConverter;
@@ -137,32 +135,16 @@ class LanguageGan extends LanguageZh {
}
// word segmentation
- function stripForSearch( $string ) {
- wfProfileIn( __METHOD__ );
-
- // eventually this should be a word segmentation
- // for now just treat each character as a word
- // @fixme only do this for Han characters...
- $t = preg_replace(
- "/([\\xc0-\\xff][\\x80-\\xbf]*)/",
- " $1", $string);
-
- //always convert to gan-hans before indexing. it should be
- //better to use gan-hans for search, since conversion from
- //Traditional to Simplified is less ambiguous than the
- //other way around
-
- $t = $this->mConverter->autoConvert($t, 'gan-hans');
- $t = parent::stripForSearch( $t );
- wfProfileOut( __METHOD__ );
- return $t;
-
+ function normalizeForSearch( $string, $autoVariant = 'gan-hans' ) {
+ // LanguageZh::normalizeForSearch
+ return parent::normalizeForSearch( $string, $autoVariant );
}
function convertForSearchResult( $termsArray ) {
$terms = implode( '|', $termsArray );
+ $terms = self::convertDoubleWidth( $terms );
$terms = implode( '|', $this->mConverter->autoConvertToAllVariants( $terms ) );
$ret = array_unique( explode('|', $terms) );
return $ret;
}
-} \ No newline at end of file
+}
diff --git a/languages/classes/LanguageGd.php b/languages/classes/LanguageGd.php
new file mode 100644
index 00000000..6c307f60
--- /dev/null
+++ b/languages/classes/LanguageGd.php
@@ -0,0 +1,35 @@
+<?php
+/** Scots Gaelic (Gàidhlig)
+ *
+ * @ingroup Language
+ *
+ * @author Raimond Spekking
+ */
+class LanguageGd extends Language {
+
+ /**
+ * Plural form transformations
+ * Based on this discussion: http://translatewiki.net/w/i.php?title=Portal_talk:Gd&oldid=1094065#%C3%80ireamhan
+ *
+ * $forms[0] - singular form (for 1)
+ * $forms[1] - dual form (for 2)
+ * $forms[2] - plural form 1 (for 3-10)
+ * $forms[3] - plural form 2 (for >= 11)
+ *
+ */
+ function convertPlural( $count, $forms ) {
+ if ( !count($forms) ) { return ''; }
+ $forms = $this->preConvertPlural( $forms, 4 );
+
+ $count = abs( $count );
+ if ( $count === 1 ) {
+ return $forms[0];
+ } elseif ( $count === 2 ) {
+ return $forms[1];
+ } elseif ( $count >= 3 && $count <= 10 ) {
+ return $forms[2];
+ } else {
+ return $forms[3];
+ }
+ }
+}
diff --git a/languages/classes/LanguageHi.php b/languages/classes/LanguageHi.php
new file mode 100644
index 00000000..705c73bc
--- /dev/null
+++ b/languages/classes/LanguageHi.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ *
+ * @ingroup Language
+ */
+class LanguageHi extends Language {
+ /**
+ * Use singular form for zero
+ */
+ function convertPlural( $count, $forms ) {
+ if ( !count($forms) ) { return ''; }
+ $forms = $this->preConvertPlural( $forms, 2 );
+
+ return ($count <= 1) ? $forms[0] : $forms[1];
+ }
+}
diff --git a/languages/classes/LanguageHr.php b/languages/classes/LanguageHr.php
index 5fe6b3a7..d8e84876 100644
--- a/languages/classes/LanguageHr.php
+++ b/languages/classes/LanguageHr.php
@@ -8,6 +8,8 @@ class LanguageHr extends Language {
function convertPlural( $count, $forms ) {
if ( !count($forms) ) { return ''; }
+ // FIXME: CLDR defines 4 plural forms instead of 3. Plural for for decimals is missing.
+ // http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
$forms = $this->preConvertPlural( $forms, 3 );
if ($count > 10 && floor(($count % 100) / 10) == 1) {
diff --git a/languages/classes/LanguageJa.php b/languages/classes/LanguageJa.php
index 72c06e19..4a24260b 100644
--- a/languages/classes/LanguageJa.php
+++ b/languages/classes/LanguageJa.php
@@ -6,15 +6,11 @@
* @ingroup Language
*/
class LanguageJa extends Language {
- function stripForSearch( $string ) {
- # MySQL fulltext index doesn't grok utf-8, so we
- # need to fold cases and convert to hex
- $s = $string;
+ function wordSegmentation( $string ) {
+ // Strip known punctuation ?
+ // $s = preg_replace( '/\xe3\x80[\x80-\xbf]/', '', $s ); # U3000-303f
- # Strip known punctuation ?
- #$s = preg_replace( '/\xe3\x80[\x80-\xbf]/', '', $s ); # U3000-303f
-
- # Space strings of like hiragana/katakana/kanji
+ // Space strings of like hiragana/katakana/kanji
$hiragana = '(?:\xe3(?:\x81[\x80-\xbf]|\x82[\x80-\x9f]))'; # U3040-309f
$katakana = '(?:\xe3(?:\x82[\xa0-\xbf]|\x83[\x80-\xbf]))'; # U30a0-30ff
$kanji = '(?:\xe3[\x88-\xbf][\x80-\xbf]'
@@ -22,14 +18,17 @@ class LanguageJa extends Language {
. '|\xe9[\x80-\xa5][\x80-\xbf]'
. '|\xe9\xa6[\x80-\x99])';
# U3200-9999 = \xe3\x88\x80-\xe9\xa6\x99
- $s = preg_replace( "/({$hiragana}+|{$katakana}+|{$kanji}+)/", ' $1 ', $s );
-
- # Double-width roman characters: ff00-ff5f ~= 0020-007f
- $s = preg_replace( '/\xef\xbc([\x80-\xbf])/e', 'chr((ord("$1") & 0x3f) + 0x20)', $s );
- $s = preg_replace( '/\xef\xbd([\x80-\x99])/e', 'chr((ord("$1") & 0x3f) + 0x60)', $s );
+ $reg = "/({$hiragana}+|{$katakana}+|{$kanji}+)/";
+ $s = self::insertSpace( $string, $reg );
+ return $s;
+ }
+ function normalizeForSearch( $string ) {
+ // Double-width roman characters
+ $s = self::convertDoubleWidth( $string );
+
# Do general case folding and UTF-8 armoring
- return parent::stripForSearch( $s );
+ return parent::normalizeForSearch( $s );
}
# Italic is not appropriate for Japanese script
diff --git a/languages/classes/LanguageKk.php b/languages/classes/LanguageKk.php
index b358a709..318b82a8 100644
--- a/languages/classes/LanguageKk.php
+++ b/languages/classes/LanguageKk.php
@@ -21,10 +21,9 @@ class KkConverter extends LanguageConverter {
function __construct($langobj, $maincode,
$variants=array(),
$variantfallbacks=array(),
- $markup=array(),
$flags = array()) {
parent::__construct( $langobj, $maincode,
- $variants, $variantfallbacks, $markup, $flags );
+ $variants, $variantfallbacks, $flags );
// No point delaying this since they're in code.
// Waiting until loadDefaultTables() means they never get loaded
@@ -209,16 +208,6 @@ class KkConverter extends LanguageConverter {
return $carray;
}
- // Do not convert content on talk pages
- function parserConvert( $text, &$parser ){
- if(is_object($parser->getTitle() ) && $parser->getTitle()->isTalkPage())
- $this->mDoContentConvert=false;
- else
- $this->mDoContentConvert=true;
-
- return parent::parserConvert($text, $parser );
- }
-
/*
* A function wrapper:
* - if there is no selected variant, leave the link
diff --git a/languages/classes/LanguageKu.php b/languages/classes/LanguageKu.php
index 3b84a9b3..5ce68c57 100644
--- a/languages/classes/LanguageKu.php
+++ b/languages/classes/LanguageKu.php
@@ -132,16 +132,6 @@ class KuConverter extends LanguageConverter {
);
}
- // Do not convert content on talk pages
- function parserConvert( $text, &$parser ){
- if(is_object($parser->getTitle() ) && $parser->getTitle()->isTalkPage())
- $this->mDoContentConvert=false;
- else
- $this->mDoContentConvert=true;
-
- return parent::parserConvert($text, $parser );
- }
-
/*
* A function wrapper:
* - if there is no selected variant, leave the link
diff --git a/languages/classes/LanguageLn.php b/languages/classes/LanguageLn.php
new file mode 100644
index 00000000..bcf5f6e3
--- /dev/null
+++ b/languages/classes/LanguageLn.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ *
+ * @ingroup Language
+ */
+class LanguageLn extends Language {
+ /**
+ * Use singular form for zero
+ * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#ln
+
+ */
+ function convertPlural( $count, $forms ) {
+ if ( !count($forms) ) { return ''; }
+ $forms = $this->preConvertPlural( $forms, 2 );
+
+ return ($count <= 1) ? $forms[0] : $forms[1];
+ }
+}
diff --git a/languages/classes/LanguageLv.php b/languages/classes/LanguageLv.php
index 2c8d9f31..84974c37 100644
--- a/languages/classes/LanguageLv.php
+++ b/languages/classes/LanguageLv.php
@@ -23,6 +23,9 @@ class LanguageLv extends Language {
*/
function convertPlural( $count, $forms ) {
if ( !count($forms) ) { return ''; }
+
+ // FIXME: CLDR defines 3 plural forms instead of 2. Form for 0 is missing.
+ // http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#lv
$forms = $this->preConvertPlural( $forms, 2 );
return ( ( $count % 10 == 1 ) && ( $count % 100 != 11 ) ) ? $forms[0] : $forms[1];
diff --git a/languages/classes/LanguageMg.php b/languages/classes/LanguageMg.php
new file mode 100644
index 00000000..8593a298
--- /dev/null
+++ b/languages/classes/LanguageMg.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ *
+ * @ingroup Language
+ */
+class LanguageMg extends Language {
+ /**
+ * Use singular form for zero
+ */
+ function convertPlural( $count, $forms ) {
+ if ( !count($forms) ) { return ''; }
+ $forms = $this->preConvertPlural( $forms, 2 );
+
+ return ($count <= 1) ? $forms[0] : $forms[1];
+ }
+}
diff --git a/languages/classes/LanguageMk.php b/languages/classes/LanguageMk.php
new file mode 100644
index 00000000..268365df
--- /dev/null
+++ b/languages/classes/LanguageMk.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ *
+ * @ingroup Language
+ */
+class LanguageMk extends Language {
+ /**
+ * Plural forms per
+ * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#mk
+ */
+ function convertPlural( $count, $forms ) {
+ if ( !count($forms) ) { return ''; }
+ $forms = $this->preConvertPlural( $forms, 2 );
+
+ if ( $count % 10 === 1 && $count % 100 !== 11 ) {
+ return $forms[0];
+ } else {
+ return $forms[1];
+ }
+ }
+}
diff --git a/languages/classes/LanguageMl.php b/languages/classes/LanguageMl.php
new file mode 100644
index 00000000..98b5fc96
--- /dev/null
+++ b/languages/classes/LanguageMl.php
@@ -0,0 +1,22 @@
+<?php
+
+class LanguageMl extends Language {
+ /**
+ * Temporary hack for the issue described at
+ * http://permalink.gmane.org/gmane.science.linguistics.wikipedia.technical/46396
+ * Convert Unicode 5.0 style Malayalam input to Unicode 5.1. Similar to
+ * bug 9413. Also fixes miscellaneous problems due to mishandling of ZWJ,
+ * e.g. bug 11162.
+ *
+ * FIXME: This is language-specific for now only to avoid the negative
+ * performance impact of enabling it for all languages.
+ */
+ function normalize( $s ) {
+ global $wgFixMalayalamUnicode;
+ $s = parent::normalize( $s );
+ if ( $wgFixMalayalamUnicode ) {
+ $s = $this->transformUsingPairFile( 'normalize-ml.ser', $s );
+ }
+ return $s;
+ }
+}
diff --git a/languages/classes/LanguageMo.php b/languages/classes/LanguageMo.php
new file mode 100644
index 00000000..83cfafb8
--- /dev/null
+++ b/languages/classes/LanguageMo.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ *
+ * @ingroup Language
+ */
+class LanguageMo extends Language {
+ function convertPlural( $count, $forms ) {
+ // Plural rules per
+ // http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#mo
+ if ( !count($forms) ) { return ''; }
+
+ $forms = $this->preConvertPlural( $forms, 3 );
+
+ if ( $count == 1 ) {
+ $index = 0;
+ } elseif ( $count == 0 || $count % 100 < 20 ) {
+ $index = 1;
+ } else {
+ $index = 2;
+ }
+ return $forms[$index];
+ }
+}
diff --git a/languages/classes/LanguageNso.php b/languages/classes/LanguageNso.php
new file mode 100644
index 00000000..1b56e76a
--- /dev/null
+++ b/languages/classes/LanguageNso.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ *
+ * @ingroup Language
+ */
+class LanguageNso extends Language {
+ /**
+ * Use singular form for zero
+ */
+ function convertPlural( $count, $forms ) {
+ if ( !count($forms) ) { return ''; }
+ $forms = $this->preConvertPlural( $forms, 2 );
+
+ return ($count <= 1) ? $forms[0] : $forms[1];
+ }
+}
diff --git a/languages/classes/LanguagePl.php b/languages/classes/LanguagePl.php
index 54314fab..bb798913 100644
--- a/languages/classes/LanguagePl.php
+++ b/languages/classes/LanguagePl.php
@@ -21,4 +21,12 @@ class LanguagePl extends Language {
return $forms[2]; // plural genitive
}
}
+
+ function commafy($_) {
+ if (!preg_match('/^\d{1,4}(.\d+)?$/',$_)) {
+ return strrev((string)preg_replace('/(\d{3})(?=\d)(?!\d*\.)/','$1,',strrev($_)));
+ } else {
+ return $_;
+ }
+ }
}
diff --git a/languages/classes/LanguageRo.php b/languages/classes/LanguageRo.php
new file mode 100644
index 00000000..928f79fb
--- /dev/null
+++ b/languages/classes/LanguageRo.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ *
+ * @ingroup Language
+ */
+class LanguageRo extends Language {
+ function convertPlural( $count, $forms ) {
+ // Plural rules per
+ // http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#ro
+ if ( !count($forms) ) { return ''; }
+
+ $forms = $this->preConvertPlural( $forms, 3 );
+
+ if ( $count == 1 ) {
+ $index = 0;
+ } elseif ( $count == 0 || $count % 100 < 20 ) {
+ $index = 1;
+ } else {
+ $index = 2;
+ }
+ return $forms[$index];
+ }
+}
diff --git a/languages/classes/LanguageRu.php b/languages/classes/LanguageRu.php
index 5933b47a..bb737e84 100644
--- a/languages/classes/LanguageRu.php
+++ b/languages/classes/LanguageRu.php
@@ -76,6 +76,8 @@ class LanguageRu extends Language {
//if no number with word, then use $form[0] for singular and $form[1] for plural or zero
if( count($forms) === 2 ) return $count == 1 ? $forms[0] : $forms[1];
+ // FIXME: CLDR defines 4 plural forms. Form with decimals missing.
+ // See http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#ru
$forms = $this->preConvertPlural( $forms, 3 );
if ($count > 10 && floor(($count % 100) / 10) == 1) {
diff --git a/languages/classes/LanguageSe.php b/languages/classes/LanguageSe.php
new file mode 100644
index 00000000..aac943d6
--- /dev/null
+++ b/languages/classes/LanguageSe.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ *
+ * @ingroup Language
+ */
+class LanguageSe extends Language {
+ function convertPlural( $count, $forms ) {
+ if ( !count($forms) ) { return ''; }
+
+ // plural forms per http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#se
+ $forms = $this->preConvertPlural( $forms, 3 );
+
+ if ( $count == 1 ) {
+ $index = 0;
+ } elseif( $count == 2 ) {
+ $index = 1;
+ } else {
+ $index = 2;
+ }
+ return $forms[$index];
+ }
+}
diff --git a/languages/classes/LanguageSh.php b/languages/classes/LanguageSh.php
new file mode 100644
index 00000000..29f06f4f
--- /dev/null
+++ b/languages/classes/LanguageSh.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ *
+ * @ingroup Language
+ */
+class LanguageSh extends Language {
+ function convertPlural( $count, $forms ) {
+ if ( !count($forms) ) { return ''; }
+
+ //if no number with word, then use $form[0] for singular and $form[1] for plural or zero
+ if( count($forms) === 2 ) return $count == 1 ? $forms[0] : $forms[1];
+
+ // FIXME: CLDR defines 4 plural forms. Form with decimals missing.
+ // See http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#sh
+ $forms = $this->preConvertPlural( $forms, 3 );
+
+ if ($count > 10 && floor(($count % 100) / 10) == 1) {
+ return $forms[2];
+ } else {
+ switch ($count % 10) {
+ case 1: return $forms[0];
+ case 2:
+ case 3:
+ case 4: return $forms[1];
+ default: return $forms[2];
+ }
+ }
+ }
+}
diff --git a/languages/classes/LanguageSma.php b/languages/classes/LanguageSma.php
new file mode 100644
index 00000000..5167fb08
--- /dev/null
+++ b/languages/classes/LanguageSma.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ *
+ * @ingroup Language
+ */
+class LanguageSma extends Language {
+ function convertPlural( $count, $forms ) {
+ if ( !count($forms) ) { return ''; }
+
+ // plural forms per http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#sma
+ $forms = $this->preConvertPlural( $forms, 3 );
+
+ if ( $count == 1 ) {
+ $index = 1;
+ } elseif( $count == 2 ) {
+ $index = 2;
+ } else {
+ $index = 3;
+ }
+ return $forms[$index];
+ }
+}
diff --git a/languages/classes/LanguageSr.php b/languages/classes/LanguageSr.php
index 79a2ec25..693660fb 100644
--- a/languages/classes/LanguageSr.php
+++ b/languages/classes/LanguageSr.php
@@ -76,16 +76,6 @@ class SrConverter extends LanguageConverter {
return $carray;
}
- // Do not convert content on talk pages
- function parserConvert( $text, &$parser ){
- if(is_object($parser->getTitle() ) && $parser->getTitle()->isTalkPage())
- $this->mDoContentConvert=false;
- else
- $this->mDoContentConvert=true;
-
- return parent::parserConvert($text, $parser );
- }
-
/*
* A function wrapper:
* - if there is no selected variant, leave the link
@@ -175,12 +165,34 @@ class LanguageSr extends LanguageSr_ec {
'sr-el' => 'sr',
);
- $marker = array();//don't mess with these, leave them as they are
$flags = array(
'S' => 'S', 'писмо' => 'S', 'pismo' => 'S',
'W' => 'W', 'реч' => 'W', 'reč' => 'W', 'ријеч' => 'W', 'riječ' => 'W'
);
- $this->mConverter = new SrConverter($this, 'sr', $variants, $variantfallbacks, $marker, $flags);
+ $this->mConverter = new SrConverter($this, 'sr', $variants, $variantfallbacks, $flags);
$wgHooks['ArticleSaveComplete'][] = $this->mConverter;
}
+
+ function convertPlural( $count, $forms ) {
+ if ( !count($forms) ) { return ''; }
+
+ //if no number with word, then use $form[0] for singular and $form[1] for plural or zero
+ if( count($forms) === 2 ) return $count == 1 ? $forms[0] : $forms[1];
+
+ // FIXME: CLDR defines 4 plural forms. Form with decimals missing.
+ // See http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#ru
+ $forms = $this->preConvertPlural( $forms, 3 );
+
+ if ($count > 10 && floor(($count % 100) / 10) == 1) {
+ return $forms[2];
+ } else {
+ switch ($count % 10) {
+ case 1: return $forms[0];
+ case 2:
+ case 3:
+ case 4: return $forms[1];
+ default: return $forms[2];
+ }
+ }
+ }
}
diff --git a/languages/classes/LanguageTi.php b/languages/classes/LanguageTi.php
new file mode 100644
index 00000000..1974915d
--- /dev/null
+++ b/languages/classes/LanguageTi.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ *
+ * @ingroup Language
+ */
+class LanguageTi extends Language {
+ /**
+ * Use singular form for zero
+ */
+ function convertPlural( $count, $forms ) {
+ if ( !count($forms) ) { return ''; }
+ $forms = $this->preConvertPlural( $forms, 2 );
+
+ return ($count <= 1) ? $forms[0] : $forms[1];
+ }
+}
diff --git a/languages/classes/LanguageTl.php b/languages/classes/LanguageTl.php
new file mode 100644
index 00000000..23b6ad6f
--- /dev/null
+++ b/languages/classes/LanguageTl.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ *
+ * @ingroup Language
+ */
+class LanguageTl extends Language {
+ /**
+ * Use singular form for zero
+ */
+ function convertPlural( $count, $forms ) {
+ if ( !count($forms) ) { return ''; }
+ $forms = $this->preConvertPlural( $forms, 2 );
+
+ return ($count <= 1) ? $forms[0] : $forms[1];
+ }
+}
diff --git a/languages/classes/LanguageTr.php b/languages/classes/LanguageTr.php
index 8a2dee09..57b0fd07 100644
--- a/languages/classes/LanguageTr.php
+++ b/languages/classes/LanguageTr.php
@@ -7,7 +7,7 @@
*/
class LanguageTr extends Language {
function ucfirst ( $string ) {
- if ( $string[0] == 'i' ) {
+ if ( !empty($string) && $string[0] == 'i' ) {
return 'İ' . substr( $string, 1 );
} else {
return parent::ucfirst( $string );
diff --git a/languages/classes/LanguageUk.php b/languages/classes/LanguageUk.php
index dbebb134..4b1dfde5 100644
--- a/languages/classes/LanguageUk.php
+++ b/languages/classes/LanguageUk.php
@@ -62,6 +62,8 @@ class LanguageUk extends Language {
//if no number with word, then use $form[0] for singular and $form[1] for plural or zero
if( count($forms) === 2 ) return $count == 1 ? $forms[0] : $forms[1];
+ // FIXME: CLDR defines 4 plural forms. Form for decimals is missing/
+ // See http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#uk
$forms = $this->preConvertPlural( $forms, 3 );
if ($count > 10 && floor(($count % 100) / 10) == 1) {
diff --git a/languages/classes/LanguageWa.php b/languages/classes/LanguageWa.php
index d97b2026..4a4296ca 100644
--- a/languages/classes/LanguageWa.php
+++ b/languages/classes/LanguageWa.php
@@ -9,14 +9,22 @@
# k' i gn a.
class LanguageWa extends Language {
+ /**
+ * Use singular form for zero
+ */
+ function convertPlural( $count, $forms ) {
+ if ( !count($forms) ) { return ''; }
+ $forms = $this->preConvertPlural( $forms, 2 );
+
+ return ($count <= 1) ? $forms[0] : $forms[1];
+ }
+
###
### Dates in Walloon are "1î d' <monthname>" for 1st of the month,
### "<day> di <monthname>" for months starting by a consoun, and
### "<day> d' <monthname>" for months starting with a vowel
###
function date( $ts, $adj = false, $format = true, $tc = false ) {
- global $wgUser;
-
if ( $adj ) { $ts = $this->userAdjust( $ts, $tc ); }
$datePreference = $this->dateFormat( $format );
diff --git a/languages/classes/LanguageYue.php b/languages/classes/LanguageYue.php
index fc7f233c..6581d788 100644
--- a/languages/classes/LanguageYue.php
+++ b/languages/classes/LanguageYue.php
@@ -3,19 +3,30 @@
* @ingroup Language
*/
class LanguageYue extends Language {
- function stripForSearch( $string ) {
+ function hasWordBreaks() {
+ return false;
+ }
+
+ /**
+ * Eventually this should be a word segmentation;
+ * for now just treat each character as a word.
+ * @todo Fixme: only do this for Han characters...
+ */
+ function wordSegmentation( $string ) {
+ $reg = "/([\\xc0-\\xff][\\x80-\\xbf]*)/";
+ $s = self::insertSpace( $string, $reg );
+ return $s;
+ }
+
+ function normalizeForSearch( $string ) {
wfProfileIn( __METHOD__ );
- // eventually this should be a word segmentation
- // for now just treat each character as a word
- // @fixme only do this for Han characters...
- $t = preg_replace(
- "/([\\xc0-\\xff][\\x80-\\xbf]*)/",
- " $1", $string);
+ // Double-width roman characters
+ $s = self::convertDoubleWidth( $string );
+ $s = trim( $s );
+ $s = parent::normalizeForSearch( $s );
- // Do general case folding and UTF-8 armoring
- $t = parent::stripForSearch( $t );
wfProfileOut( __METHOD__ );
- return $t;
+ return $s;
}
}
diff --git a/languages/classes/LanguageZh.php b/languages/classes/LanguageZh.php
index cbb748c3..4a73c665 100644
--- a/languages/classes/LanguageZh.php
+++ b/languages/classes/LanguageZh.php
@@ -11,7 +11,6 @@ class ZhConverter extends LanguageConverter {
function __construct($langobj, $maincode,
$variants=array(),
$variantfallbacks=array(),
- $markup=array(),
$flags = array(),
$manualLevel = array() ) {
$this->mDescCodeSep = ':';
@@ -19,7 +18,6 @@ class ZhConverter extends LanguageConverter {
parent::__construct($langobj, $maincode,
$variants,
$variantfallbacks,
- $markup,
$flags,
$manualLevel);
$names = array(
@@ -133,6 +131,7 @@ class LanguageZh extends LanguageZh_hans {
parent::__construct();
$variants = array('zh','zh-hans','zh-hant','zh-cn','zh-hk','zh-mo','zh-my','zh-sg','zh-tw');
+
$variantfallbacks = array(
'zh' => array('zh-hans','zh-hant','zh-cn','zh-tw','zh-hk','zh-sg','zh-mo','zh-my'),
'zh-hans' => array('zh-cn','zh-sg','zh-my'),
@@ -152,7 +151,7 @@ class LanguageZh extends LanguageZh_hans {
$this->mConverter = new ZhConverter( $this, 'zh',
$variants, $variantfallbacks,
- array(),array(),
+ array(),
$ml);
$wgHooks['ArticleSaveComplete'][] = $this->mConverter;
@@ -171,31 +170,31 @@ class LanguageZh extends LanguageZh_hans {
"\"$1\"", $text);
}
- // word segmentation
- function stripForSearch( $string ) {
+ /**
+ * auto convert to zh-hans and normalize special characters.
+ *
+ * @param $string String
+ * @param $autoVariant String, default to 'zh-hans'
+ * @return String
+ */
+ function normalizeForSearch( $string, $autoVariant = 'zh-hans' ) {
wfProfileIn( __METHOD__ );
- // eventually this should be a word segmentation
- // for now just treat each character as a word
- // @fixme only do this for Han characters...
- $t = preg_replace(
- "/([\\xc0-\\xff][\\x80-\\xbf]*)/",
- " $1", $string);
-
- //always convert to zh-hans before indexing. it should be
- //better to use zh-hans for search, since conversion from
- //Traditional to Simplified is less ambiguous than the
- //other way around
-
- $t = $this->mConverter->autoConvert($t, 'zh-hans');
- $t = parent::stripForSearch( $t );
+ // always convert to zh-hans before indexing. it should be
+ // better to use zh-hans for search, since conversion from
+ // Traditional to Simplified is less ambiguous than the
+ // other way around
+ $s = $this->mConverter->autoConvert( $string, $autoVariant );
+ // LanguageZh_hans::normalizeForSearch
+ $s = parent::normalizeForSearch( $s );
wfProfileOut( __METHOD__ );
- return $t;
+ return $s;
}
function convertForSearchResult( $termsArray ) {
$terms = implode( '|', $termsArray );
+ $terms = self::convertDoubleWidth( $terms );
$terms = implode( '|', $this->mConverter->autoConvertToAllVariants( $terms ) );
$ret = array_unique( explode('|', $terms) );
return $ret;
diff --git a/languages/classes/LanguageZh_hans.php b/languages/classes/LanguageZh_hans.php
index 983dd485..5b03d731 100644
--- a/languages/classes/LanguageZh_hans.php
+++ b/languages/classes/LanguageZh_hans.php
@@ -4,21 +4,30 @@
* @ingroup Language
*/
class LanguageZh_hans extends Language {
- function stripForSearch( $string ) {
- # MySQL fulltext index doesn't grok utf-8, so we
- # need to fold cases and convert to hex
- # we also separate characters as "words"
- if( function_exists( 'mb_strtolower' ) ) {
- return preg_replace(
- "/([\\xc0-\\xff][\\x80-\\xbf]*)/e",
- "' U8' . bin2hex( \"$1\" )",
- mb_strtolower( $string ) );
- } else {
- list( , $wikiLowerChars ) = Language::getCaseMaps();
- return preg_replace(
- "/([\\xc0-\\xff][\\x80-\\xbf]*)/e",
- "' U8' . bin2hex( strtr( \"\$1\", \$wikiLowerChars ) )",
- $string );
- }
+ function hasWordBreaks() {
+ return false;
}
-}
+
+ /**
+ * Eventually this should be a word segmentation;
+ * for now just treat each character as a word.
+ * @todo Fixme: only do this for Han characters...
+ */
+ function wordSegmentation( $string ) {
+ $reg = "/([\\xc0-\\xff][\\x80-\\xbf]*)/";
+ $s = self::insertSpace( $string, $reg );
+ return $s;
+ }
+
+ function normalizeForSearch( $string ) {
+ wfProfileIn( __METHOD__ );
+
+ // Double-width roman characters
+ $s = self::convertDoubleWidth( $string );
+ $s = trim( $s );
+ $s = parent::normalizeForSearch( $s );
+
+ wfProfileOut( __METHOD__ );
+ return $s;
+ }
+} \ No newline at end of file
diff --git a/languages/messages/MessagesAb.php b/languages/messages/MessagesAb.php
index 8a34f2bd..54b45c7a 100644
--- a/languages/messages/MessagesAb.php
+++ b/languages/messages/MessagesAb.php
@@ -64,13 +64,31 @@ $messages = array(
# Categories related messages
'pagecategories' => '{{PLURAL:$1|Акатегориа|Акатегориақәа}}',
-'article' => 'Адаҟьа',
+'article' => 'Адаҟьа',
+'mytalk' => 'Сахцәажәара',
+'navigation' => 'Анавигациа',
+
+# Cologne Blue skin
'qbfind' => 'Аҧшаара',
'qbedit' => 'Ариашара',
'qbpageoptions' => 'Ари адаҟьа',
'qbspecialpages' => 'Цастәи адаҟьақәа',
-'mytalk' => 'Сахцәажәара',
-'navigation' => 'Анавигациа',
+
+# Vector skin
+'vector-namespace-category' => 'Акатегориа',
+'vector-namespace-help' => 'Ацхыраара адаҟьа',
+'vector-namespace-image' => 'Афаил',
+'vector-namespace-main' => 'Адаҟьа',
+'vector-namespace-project' => 'Апроект',
+'vector-namespace-special' => 'Цастәи адаҟьа',
+'vector-namespace-talk' => 'Ахцәажәара',
+'vector-namespace-template' => 'Ашаблон',
+'vector-namespace-user' => 'Иалахә Адаҟьа',
+'vector-view-create' => 'Арҿиара',
+'vector-view-edit' => 'Ариашамҭа',
+'vector-view-history' => 'Аҭоурых',
+'vector-view-view' => 'Аҧхьара',
+'vector-view-viewsource' => 'Ахәаҧшра',
'help' => 'Ацхыраара',
'search' => 'Аҧшаара',
@@ -89,7 +107,7 @@ $messages = array(
'talk' => 'Ахцәажәара',
'toolbox' => 'Амаҵыругақәа',
'otherlanguages' => 'Абызшәақәа',
-'lastmodifiedat' => 'Ацыхәтәантәи аҧсахрақәа абри адаҟьа аҟны: $2, $1.', # $1 date, $2 time
+'lastmodifiedat' => 'Ацыхәтәантәи аҧсахрақәа абри адаҟьа аҟны: $2, $1.',
'jumptonavigation' => 'Анавигациа',
'jumptosearch' => 'Аҧшаара',
@@ -126,8 +144,6 @@ $messages = array(
'userlogin' => 'Урдырра/Арегистрациара',
'logout' => 'Асеанс дәылҵра',
'userlogout' => 'Асеанс дәылҵра',
-'uid' => 'Иалоу ID:',
-'yourlanguage' => 'Абызшәа:',
'loginlanguagelabel' => 'Абызшәа: $1',
# Edit pages
@@ -142,6 +158,8 @@ $messages = array(
'preferences' => 'Архиарақәа',
'mypreferences' => 'Архиарақәа',
'searchresultshead' => 'Аҧшаара',
+'uid' => 'Иалоу ID:',
+'yourlanguage' => 'Абызшәа:',
# Groups
'group-user' => 'Иалоуқәа',
@@ -151,11 +169,14 @@ $messages = array(
'grouppage-sysop' => '{{ns:project}}:Администраторцәа',
# Recent changes
-'recentchanges' => 'Арҽеира ҿыцқәа',
-'newpageletter' => 'Ҿ',
+'recentchanges' => 'Арҽеира ҿыцқәа',
+'recentchanges-legend-newpage' => '$1 — адаҟьа ҿыц',
+'newpageletter' => 'Ҿ',
# Recent changes linked
-'recentchangeslinked' => 'Еимадоу ариашарақәа',
+'recentchangeslinked' => 'Еимадоу ариашарақәа',
+'recentchangeslinked-feed' => 'Еимадоу ариашарақәа',
+'recentchangeslinked-toolbox' => 'Еимадоу ариашарақәа',
# Upload
'upload' => 'Афаил аҭагалара',
@@ -166,6 +187,8 @@ $messages = array(
# Random page
'randompage' => 'Машәырлатәи аҩымҭа',
+'brokenredirects-edit' => 'ариашамҭа',
+
# Miscellaneous special pages
'newpages-username' => 'Иалахә:',
@@ -189,6 +212,7 @@ $messages = array(
'mycontris' => 'Салагала',
'contribsub2' => 'Алагала $1 ($2)',
+'sp-contributions-talk' => 'ахцәажәара',
'sp-contributions-submit' => 'Аҧшаара',
# What links here
@@ -198,6 +222,9 @@ $messages = array(
# Block/unblock
'contribslink' => 'алагала',
+# Namespace 8 related
+'allmessages-language' => 'Абызшәа:',
+
# Special:NewFiles
'ilsubmit' => 'Аҧшаара',
diff --git a/languages/messages/MessagesAce.php b/languages/messages/MessagesAce.php
index ec44c787..b0acb659 100644
--- a/languages/messages/MessagesAce.php
+++ b/languages/messages/MessagesAce.php
@@ -47,6 +47,7 @@ $messages = array(
'tog-enotifminoredits' => "Peu'ek cit surat-e keu lon bak neuandam bacut",
'tog-enotifrevealaddr' => 'Peuleumah alamat surat-e lon bak neubrithee surat-e',
'tog-shownumberswatching' => 'Peuleumah jumeulah ureueng kalon',
+'tog-oldsig' => 'Peuleumah tanda jaroe:',
'tog-fancysig' => 'Peujeuet tanda jaroe sibagoe naseukah wiki (hana hubong keudroe)',
'tog-externaleditor' => 'Nguy alat leumiek keu ngon peugot kata luwa',
'tog-externaldiff' => 'Nguy alat leumiek luwa keu eu bida neuandam',
@@ -127,10 +128,18 @@ $messages = array(
'category-article-count' => '{{PLURAL:$2|Kawan nyoë cit na saboh ôn nyoë.|Kawan nyoë na {{PLURAL:$1|ôn|$1 ôn }}, dari ban dum $2.}}',
'listingcontinuesabbrev' => 'samb.',
-'about' => 'Bhah',
-'article' => 'Teunuléh',
-'newwindow' => '(peuhah bak tingkap barô)',
-'cancel' => 'Peubateuë',
+'about' => 'Bhah',
+'article' => 'Teunuléh',
+'newwindow' => '(peuhah bak tingkap barô)',
+'cancel' => 'Peubateuë',
+'moredotdotdot' => 'Lom...',
+'mypage' => 'Ôn lôn',
+'mytalk' => 'Peugah haba lôn',
+'anontalk' => 'Peugah haba IP nyoë.',
+'navigation' => 'Navigasi',
+'and' => '&#32;ngon',
+
+# Cologne Blue skin
'qbfind' => 'Mita',
'qbbrowse' => 'Lop',
'qbedit' => 'Andam',
@@ -138,15 +147,28 @@ $messages = array(
'qbpageinfo' => 'Asoe ôn',
'qbmyoptions' => 'Ôn lôn',
'qbspecialpages' => 'Ôn istimewa',
-'moredotdotdot' => 'Lom...',
-'mypage' => 'Ôn lôn',
-'mytalk' => 'Peugah haba lôn',
-'anontalk' => 'Peugah haba IP nyoë.',
-'navigation' => 'Navigasi',
-'and' => '&#32;ngon',
-
-# Metadata in edit box
-'metadata_help' => 'Metadata',
+'faq' => 'FAQ',
+'faqpage' => 'Project:FAQ',
+
+# Vector skin
+'vector-action-addsection' => 'Beunagi barô',
+'vector-action-delete' => 'Sampôh',
+'vector-action-move' => 'Peupinah',
+'vector-action-protect' => 'Peulindông',
+'vector-action-undelete' => 'Bateuë sampôh',
+'vector-action-unprotect' => 'Bateuë peulindông',
+'vector-namespace-category' => 'Kawan',
+'vector-namespace-help' => 'Ôn beunantu',
+'vector-namespace-image' => 'Beureukah',
+'vector-namespace-main' => 'Ôn',
+'vector-namespace-media' => 'Ôn media',
+'vector-namespace-mediawiki' => 'Peusan',
+'vector-view-create' => 'Peugöt',
+'vector-view-edit' => 'Andam',
+'vector-view-history' => 'Riwayat away',
+'vector-view-view' => 'Baca',
+'vector-view-viewsource' => 'Eu nè',
+'variants' => 'Varian',
'errorpagetitle' => 'Seunalah',
'returnto' => 'Gisa u $1.',
@@ -180,7 +202,7 @@ $messages = array(
'otherlanguages' => 'Bahsa la’én',
'redirectedfrom' => '(Geupeupinah nibak $1)',
'redirectpagesub' => 'Ôn peupinah',
-'lastmodifiedat' => 'Ôn nyoë keuneulheuëh geu’ubah bak $2, $1.', # $1 date, $2 time
+'lastmodifiedat' => 'Ôn nyoë keuneulheuëh geu’ubah bak $2, $1.',
'jumpto' => 'Langsông u:',
'jumptonavigation' => 'navigasi',
'jumptosearch' => 'mita',
@@ -196,8 +218,6 @@ $messages = array(
'disclaimerpage' => 'Project:Beunantah umom',
'edithelp' => 'Bantu andam',
'edithelppage' => 'Help:Andam',
-'faq' => 'FAQ',
-'faqpage' => 'Project:FAQ',
'helppage' => 'Help:Asoë',
'mainpage' => 'Ôn Keuë',
'mainpage-description' => 'Ôn Keuë',
@@ -267,9 +287,6 @@ Meunyo kön nyoë sababjih, Droëneuh kadang ka neuteumèë saboh bug lam softwa
'createaccount' => 'Peudapeuta nan barô',
'gotaccount' => "Ka lheuëh neudapeuta? '''$1'''.",
'gotaccountlink' => 'Tamong',
-'yourrealname' => 'Nan aseuli:',
-'prefs-help-realname' => '* Nan aseuli hana meucéh neupasoë.
-Meunyo neupasoë, euntreuk nan Droëneuh nyan geupeuleumah mangat jitupeuë soë nyang tuléh.',
'loginsuccesstitle' => 'Meuhasé tamong',
'loginsuccess' => "'''Droëneuh jinoë ka neutamong di {{SITENAME}} sibagoë \"\$1\".'''",
'nosuchuser' => 'Hana ureuëng nguy ngön nan "$1".
@@ -280,8 +297,7 @@ Préksa keulayi neu’ija Droëneuh.',
'nouserspecified' => 'Neupasoë nan Droëneuh.',
'wrongpassword' => 'Lageuëm nyang neupasoë salah. Neubaci lom.',
'wrongpasswordempty' => 'Droëneuh hana neupasoë lageuëm. Neubaci lom.',
-'passwordtooshort' => 'Lageuëm rahsia Droëneuh hana sah atawa paneuk that.
-Lageuëm rahsia paléng kureung {{PLURAL:$1|1 karakter|$1 karakter}} ngön beubida ngön nan Droëneuh.',
+'passwordtooshort' => "Lageuëm paléng h'an haroh na {{PLURAL:$1|1 karakter|$1 karakter}}.",
'mailmypassword' => 'Kirém lageuëm barô',
'passwordremindertitle' => 'Lageuëm seumeuntara barô keu {{SITENAME}}',
'passwordremindertext' => 'Salah sidroë (kadang Droëneuh, ngön alamat IP $1) geulakèë kamoë keu meukirém lageuëm rahsia nyang barô keu {{SITENAME}} ($4).
@@ -350,24 +366,25 @@ Ji Droëneuh jeuët [[Special:Search/{{PAGENAME}}|neumita keu nan ôn nyoë]] ba
'copyrightwarning' => "Beuneuingat bahwa ban mandum nyang Droëneuh tuléh keu {{SITENAME}} geukira geupeuteubiët di yup $2 (ngiëng $1 keu leubèh jeulah). Meunyoë Droëneuh h‘an neutém teunuléh Droëneuh ji’andam ngön jiba ho ho la’én, bèk neupasoë teunuléh Droëneuh keunoë.<br />Droëneuh neumeujanji chit meunyoë teunuléh nyoë nakeuh atra neutuléh keudroë, atawa neucok nibak nè nè atra umôm atawa nè bibeuëh la’én.
'''BÈK NEUPASOË TEUNULÉH NYANG GEUPEULINDÔNG HAK KARANG NYANG HANA IDIN'''",
'longpagewarning' => "'''INGAT: Ôn nyoë panyangjih nakeuh $1 kilobit; ladôm alat rawoh web kadang na masalah bak ji’andam ôn nyang panyangjih 32 kb atawa leubèh. Beu neupeutimang keu neuplah jeuët padum boh beunagi nyang leubèh cut. '''",
-'templatesused' => 'Templat nyang geunguy bak ôn nyoë:',
-'templatesusedpreview' => 'Templat nyang geunguy bak eu dilèë nyoë',
+'templatesused' => '{{PLURAL:$1|Templat|Templat}} nyang geunguy bak ôn nyoë:',
+'templatesusedpreview' => '{{PLURAL:$1|Templat|Templat}} nyang geunguy bak eu dilèë nyoë:',
'template-protected' => '(geulindông)',
'template-semiprotected' => '(siteungoh-lindông)',
'hiddencategories' => 'Ôn nyoë nakeuh anggèëta nibak {{PLURAL:$1|1 kawan teusom |$1 kawan teusom}}:',
'nocreatetext' => '{{SITENAME}} ka jikot bak peugöt ôn barô. Ji Droëneuh jeuët neuriwang teuma ngön neu’andam ôn nyang ka na, atawa [[Special:UserLogin|neutamong atawa neudapeuta]].',
'permissionserrorstext-withaction' => 'Droëneuh hana hak tamöng keu $2, muroë {{PLURAL:$1|choë|choë}} nyoë:',
-'recreate-deleted-warn' => "'''Ingat: Droëneuh teungoh neupeugöt ulang saboh ôn nyang ka tom geusampôh. ''',
+'recreate-moveddeleted-warn' => "'''Ingat: Droëneuh teungoh neupeugöt ulang saboh ôn nyang ka tom geusampôh. ''',
Neutimang-timang dilèë peuë ék patôt neupeulanjut atra nyang teungoh neu’andam.
Nyoë pat nakeuh log seunampôh nibak ôn nyoë:",
+'moveddeleted-notice' => 'Ôn nyoë ka geusampôh. Meunyo peureulèë, nyoë pat nakeuh log seunampôh ôn nyoë.',
# History pages
'viewpagelogs' => 'Eu log ôn nyoë',
'currentrev' => 'Geunantoë jinoë',
'currentrev-asof' => 'Geunantoë paléng barô bak $1',
'revisionasof' => 'Gantoë tiëp $1',
-'revision-info' => 'Geunantoë tiëp $1; $2', # Additionally available: $3: revision id
+'revision-info' => 'Geunantoë tiëp $1; $2',
'previousrevision' => '←Geunantoë sigohlomjih',
'nextrevision' => 'Geunantoë lheuëh nyan→',
'currentrevisionlink' => 'Geunantoë jinoë',
@@ -381,7 +398,7 @@ Nyoë pat nakeuh log seunampôh nibak ôn nyoë:",
'histlast' => 'Paléng barô',
# Revision feed
-'history-feed-item-nocomment' => '$1 bak $2', # user at time
+'history-feed-item-nocomment' => '$1 bak $2',
# Revision deletion
'rev-delundel' => 'peuleumah/peusom',
@@ -404,13 +421,11 @@ Nyoë pat nakeuh log seunampôh nibak ôn nyoë:",
'searchresulttext' => 'Keu beurita leubèh le bhah meunita bak {{SITENAME}}, eu [[{{MediaWiki:Helppage}}|ôn beunantu]].',
'searchsubtitle' => 'Droëneuh neumita \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|ban dum ôn nyang geupuphôn ngön "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|bandum ôn nyang teuhubông u "$1"]])',
'searchsubtitleinvalid' => "Droëneuh neumita '''$1'''",
-'noexactmatch' => "'''Hana ôn nyang nanjih ''$1''. ''' Droëneuh jeuët [[:$1|peugèt ôn nyoë]].",
-'noexactmatch-nocreate' => "'''Hana ôn ngön nan \"\$1\".'''",
'notitlematches' => 'Hana nan ôn nyang pah',
'notextmatches' => 'Hana naseukah ôn nyang pah',
-'prevn' => '$1 sigohlomjih',
-'nextn' => '$1 lheuëh nyan',
-'viewprevnext' => 'Eu ($1)($2)($3)',
+'prevn' => '{{PLURAL:$1|$1}} sigohlomjih',
+'nextn' => '{{PLURAL:$1|$1}} lheuëh nyan',
+'viewprevnext' => 'Eu ($1 {{int:pipe-separator}} $2)($3)',
'searchhelp-url' => 'Help:Asoë',
'search-result-size' => '$1 ({{PLURAL:$2|1 kata|$2 kata}})',
'search-redirect' => '(peuninah $1)',
@@ -421,7 +436,6 @@ Nyoë pat nakeuh log seunampôh nibak ôn nyoë:",
'search-interwiki-more' => '(lom)',
'search-mwsuggest-enabled' => 'ngon saran',
'search-mwsuggest-disabled' => 'hana saran',
-'showingresultstotal' => "Hasé mita {{PLURAL:$4|'''$1'''|'''$1 - $2'''}} dari '''$3'''",
'nonefound' => "'''Ceunatat''': Cit ladôm ruweuëng nyang seucara baku geupeutamöng lam meunita. Ci neupuphôn leunakèë Droëneuh ngön ''all:'' keu mita ban dum asoë (rôh cit ôn peugah haba, tèmplat, ngön nyang la’én (nnl)), atawa neunguy ruweuëng nan nyang neumeuh’eut sibagoë neu’away.",
'powersearch' => 'Mita lanjut',
'powersearch-legend' => 'Mita lanjut',
@@ -430,9 +444,12 @@ Nyoë pat nakeuh log seunampôh nibak ôn nyoë:",
'powersearch-field' => 'Mita',
# Preferences page
-'preferences' => 'Galak',
-'mypreferences' => 'Lôn galak',
-'prefs-rc' => 'Ban meuubah',
+'preferences' => 'Galak',
+'mypreferences' => 'Lôn galak',
+'prefs-rc' => 'Ban meuubah',
+'yourrealname' => 'Nan aseuli:',
+'prefs-help-realname' => '* Nan aseuli hana meucéh neupasoë.
+Meunyo neupasoë, euntreuk nan Droëneuh nyan geupeuleumah mangat jitupeuë soë nyang tuléh.',
# Groups
'group-sysop' => 'Ureuëng urôh',
@@ -472,6 +489,8 @@ Nyoë pat nakeuh log seunampôh nibak ôn nyoë:",
# Recent changes linked
'recentchangeslinked' => 'Neuubah meuhubông',
+'recentchangeslinked-feed' => 'Seundi meuhubông',
+'recentchangeslinked-toolbox' => 'Seundi meuhubông',
'recentchangeslinked-title' => 'Neuubah nyang meuhubông ngön $1',
'recentchangeslinked-noresult' => 'Hana neu’ubah bak ôn-ôn meuhubông silawét masa nyang ka geupeuteuntèë.',
'recentchangeslinked-summary' => "Ôn husôh nyoë geupeuleumah dapeuta neu’ubah keuneulheuëh bak ôn ôn meuhubông. Ôn nyang neukalön geubri tanda ngön '''citak teubay'''.",
@@ -488,6 +507,7 @@ Nyoë pat nakeuh log seunampôh nibak ôn nyoë:",
'listfiles' => 'Dapeuta beureukah',
# File description page
+'file-anchor-link' => 'Beureukah',
'filehist' => 'Riwayat beureukah',
'filehist-help' => 'Teugon bak tanggay/watèë keu eu beureukah nyoë ‘oh watèë nyan.',
'filehist-current' => 'jinoë hat',
@@ -501,9 +521,7 @@ Nyoë pat nakeuh log seunampôh nibak ôn nyoë:",
'imagelinks' => 'Hubông beureukah',
'linkstoimage' => 'Ôn di yup nyoë na {{PLURAL:$1|hubông|$1 hubông}} u beureukah nyoë:',
'nolinkstoimage' => 'Hana ôn nyang na hubông u beureukah nyoë.',
-'sharedupload' => 'Beureukah nyoë dari $1 ngön kadang geunguy lé buët-buët la’én.', # $1 is the repo name, $2 is shareduploadwiki(-desc)
-'noimage' => 'Hana beureukah ngön nan nyan, Droëneuh jeuët $1.',
-'noimage-linktext' => 'peutamong beureukah',
+'sharedupload' => 'Beureukah nyoë dari $1 ngön kadang geunguy lé buët-buët la’én.',
'uploadnewversion-linktext' => 'Peulöt seunalén nyang leubèh barô nibak beureukah nyoë.',
# MIME search
@@ -647,7 +665,6 @@ Nyoë pat nakeuh log seunampôh nibak ôn nyoë:",
'protectexpiry' => 'Maté tanggay:',
'protect_expiry_invalid' => 'Watèë maté tanggay hana sah.',
'protect_expiry_old' => 'Watèë maté tanggay nakeuh bak masa u likôt.',
-'protect-unchain' => 'Peuhah neulindông peupinah',
'protect-text' => "Droëneuh jeuët neu’eu atawa neugantoë tingkat lindông keu ôn '''<nowiki>$1</nowiki>''' nyoë pat.",
'protect-locked-access' => "Nan dapeuta Droëneuh hana hak keu jak gantoë tingkat lindông ôn. Nyoë pat nakeuh konfigurasi atra jinoë keu ôn '''$1''':",
'protect-cascadeon' => 'Ôn nyoë teungöh geulindông kareuna geupeuseureuta lam {{PLURAL:$1|ôn|ôn-ôn}} nyoë nyang ka geulindông ngön peuniléh lindông meuturôt geupeuudép.
@@ -660,7 +677,7 @@ Droëneuh jeuët neugantoë tingkat lindông keu ôn nyoë, tapi nyan hana peung
'protect-expiring' => 'maté tanggay $1 (UTC)',
'protect-cascade' => 'Peulindông ban mandum ôn nyang rôh lam ôn nyoë (lindông meuturôt).',
'protect-cantedit' => 'Droëneuh h‘an jeuët neu’ubah tingkat lindông ôn nyoë kareuna Droëneuh hana hak keu neupeulaku nyan.',
-'protect-expiry-options' => '1 jeum:1 hour,1 uroë:1 day,1 minggu:1 week,2 minggu:2 weeks,1 buleuën:1 month,3 buleuën:3 months,6 buleuën:6 months,1 thôn:1 year,sabé:infinite', # display1:time1,display2:time2,...
+'protect-expiry-options' => '1 jeum:1 hour,1 uroë:1 day,1 minggu:1 week,2 minggu:2 weeks,1 buleuën:1 month,3 buleuën:3 months,6 buleuën:6 months,1 thôn:1 year,sabé:infinite',
'restriction-type' => 'Lindông:',
'restriction-level' => 'Tingkat:',
@@ -686,6 +703,7 @@ Droëneuh jeuët neugantoë tingkat lindông keu ôn nyoë, tapi nyan hana peung
'sp-contributions-newbies' => 'Keu ureuëng-ureuëng nyang ban nguy mantöng',
'sp-contributions-newbies-sub' => 'Keu ureuëng nguy barô',
'sp-contributions-blocklog' => 'Log peutheun',
+'sp-contributions-talk' => 'Peugah haba',
'sp-contributions-search' => 'Mita soë nyang tuléh',
'sp-contributions-username' => 'Alamat IP atawa nan ureuëng nguy:',
'sp-contributions-submit' => 'Mita',
@@ -709,7 +727,7 @@ Droëneuh jeuët neugantoë tingkat lindông keu ôn nyoë, tapi nyan hana peung
# Block/unblock
'blockip' => 'Theun ureuëng nguy',
-'ipboptions' => '2 jeum:2 hours,1 uroë:1 day,3 uroë:3 days,1 minggu:1 week,2 minggu:2 weeks,1 buleuën:1 month,3 buleuën:3 months,6 buleuën:6 months,1 thôn:1 year,sabé:infinite', # display1:time1,display2:time2,...
+'ipboptions' => '2 jeum:2 hours,1 uroë:1 day,3 uroë:3 days,1 minggu:1 week,2 minggu:2 weeks,1 buleuën:1 month,3 buleuën:3 months,6 buleuën:6 months,1 thôn:1 year,sabé:infinite',
'ipblocklist' => 'Dapeuta neutheun',
'blocklink' => 'theun',
'unblocklink' => 'peugadöh theun',
@@ -737,7 +755,7 @@ Lam masalah nyoë, meunyo neuhawa, Droëneuh jeuët neupeupinah atawa neupeugab
'move-watch' => 'Kalön ôn nyoë',
'movepagebtn' => 'Peupinah ôn',
'pagemovedsub' => 'Peupinah meuhasé',
-'movepage-moved' => '\'\'\'"$1" ka geupeupinah u "$2".\'\'\'', # The two titles are passed in plain text as $3 and $4 to allow additional goodies in the message.
+'movepage-moved' => '\'\'\'"$1" ka geupeupinah u "$2".\'\'\'',
'articleexists' => 'Ôn ngön nan nyan ka na atawa nan nyang neupiléh hana sah. Neupiléh nan la’én.',
'talkexists' => 'Ôn nyan ka geupeupinah, tapi ôn peugah haba bak ôn nyan h‘an jeuët geupeupinah kareuna ka na ôn peugah haba bak nan barô. Neupeusapat mantöng ôn ôn peugah haba nyan keudroë.',
'movedto' => 'geupeupinah u',
@@ -784,6 +802,7 @@ Droëneuh cit jeuët neu’eu nèjih.',
'tooltip-search-go' => 'Mita saboh ôn ngon nan nyang peureuséh lagèë nyoë meunyo na',
'tooltip-search-fulltext' => 'Mita ôn nyang na asoë lagèë nyoë',
'tooltip-n-mainpage' => 'Jak u Ôn Keuë',
+'tooltip-n-mainpage-description' => 'Saweuë Ôn Keuë',
'tooltip-n-portal' => 'Bhah buët, peuë nyang jeuët neupeulaku, pat tamita sipeuë hay',
'tooltip-n-currentevents' => 'Mita beurita nyang paléng barô',
'tooltip-n-recentchanges' => 'Dapeuta nyang ban meu’ubah lam wiki.',
@@ -849,7 +868,7 @@ Hubông-hubông lheuëh nyan bak baréh nyang saban geukira sibagoë keucuali, n
* exposuretime
* fnumber
* isospeedratings
-* focallength', # Do not translate list items
+* focallength',
# External editor support
'edit-externally' => 'Andam beureukah nyoë ngön aplikasi luwa',
@@ -866,7 +885,7 @@ Hubông-hubông lheuëh nyan bak baréh nyang saban geukira sibagoë keucuali, n
'watchlisttools-raw' => 'Andam dapeuta keunalön meuntah',
# Special:Version
-'version' => 'Curak', # Not used as normal message but as header for the special page itself
+'version' => 'Curak',
# Special:SpecialPages
'specialpages' => 'Ôn husôh',
diff --git a/languages/messages/MessagesAf.php b/languages/messages/MessagesAf.php
index fe5d570c..9326cf44 100644
--- a/languages/messages/MessagesAf.php
+++ b/languages/messages/MessagesAf.php
@@ -10,9 +10,11 @@
* @author Adriaan
* @author Anrie
* @author Arnobarnard
+ * @author Byeboer
* @author Deadelf
* @author Manie
* @author Naudefj
+ * @author Purodha
* @author SPQRobin
* @author Spacebirdy
*/
@@ -48,13 +50,50 @@ $magicWords = array(
'forcetoc' => array( '0', '__DWINGIO__', '__FORCETOC__' ),
'toc' => array( '0', '__IO__', '__TOC__' ),
'noeditsection' => array( '0', '__GEENNUWEAFDELING__', '__NOEDITSECTION__' ),
- 'currentmonth' => array( '1', 'HUIDIGEMAAND', 'CURRENTMONTH' ),
+ 'noheader' => array( '0', '__GEENOPSKRIF__', '__NOHEADER__' ),
+ 'currentmonth' => array( '1', 'HUIDIGEMAAND', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+ 'currentmonth1' => array( '1', 'HUIDIGEMAAND1', 'CURRENTMONTH1' ),
'currentmonthname' => array( '1', 'HUIDIGEMAANDNAAM', 'CURRENTMONTHNAME' ),
'currentmonthabbrev' => array( '1', 'HUIDIGEMAANDAFK', 'CURRENTMONTHABBREV' ),
'currentday' => array( '1', 'HUIDIGEDAG', 'CURRENTDAY' ),
'currentday2' => array( '1', 'HUIDIGEDAG2', 'CURRENTDAY2' ),
'currentdayname' => array( '1', 'HUIDIGEDAGNAAM', 'CURRENTDAYNAME' ),
+ 'currentyear' => array( '1', 'HUIDIGEJAAR', 'CURRENTYEAR' ),
+ 'currenttime' => array( '1', 'HUIDIGETYD', 'CURRENTTIME' ),
+ 'currenthour' => array( '1', 'HUIDIGEUUR', 'CURRENTHOUR' ),
+ 'numberofpages' => array( '1', 'AANTALBLADSYE', 'NUMBEROFPAGES' ),
+ 'numberofarticles' => array( '1', 'AANTALARTIKELS', 'NUMBEROFARTICLES' ),
+ 'numberoffiles' => array( '1', 'AANTALLêERS', 'NUMBEROFFILES' ),
+ 'numberofusers' => array( '1', 'AANTALGEBRUIKERS', 'NUMBEROFUSERS' ),
+ 'numberofactiveusers' => array( '1', 'AANTALAKTIEWEGEBRUIKERS', 'NUMBEROFACTIVEUSERS' ),
+ 'numberofedits' => array( '1', 'AANTALWYSIGINGS', 'NUMBEROFEDITS' ),
+ 'numberofviews' => array( '1', 'AANTALKEERGESIEN', 'NUMBEROFVIEWS' ),
+ 'pagename' => array( '1', 'BLADSYNAAM', 'PAGENAME' ),
+ 'namespace' => array( '1', 'NAAMSPASIE', 'NAMESPACE' ),
+ 'talkspace' => array( '1', 'BESPREKINGSBLADSY', 'TALKSPACE' ),
+ 'img_right' => array( '1', 'regs', 'right' ),
+ 'img_left' => array( '1', 'links', 'left' ),
+ 'img_none' => array( '1', 'geen', 'none' ),
+ 'img_border' => array( '1', 'raam', 'border' ),
+ 'img_top' => array( '1', 'bo', 'top' ),
+ 'img_middle' => array( '1', 'middel', 'middle' ),
+ 'img_bottom' => array( '1', 'onder', 'bottom' ),
+ 'sitename' => array( '1', 'WERFNAAM', 'SITENAME' ),
+ 'server' => array( '0', 'BEDIENER', 'SERVER' ),
+ 'servername' => array( '0', 'BEDIENERNAAM', 'SERVERNAME' ),
+ 'gender' => array( '0', 'GESLAG:', 'GENDER:' ),
+ 'localweek' => array( '1', 'HUIDIGEWEEK', 'LOCALWEEK' ),
+ 'plural' => array( '0', 'MEERVOUD', 'PLURAL:' ),
+ 'fullurl' => array( '0', 'VOLURL', 'FULLURL:' ),
+ 'displaytitle' => array( '1', 'VERTOONTITEL', 'DISPLAYTITLE' ),
+ 'currentversion' => array( '1', 'HUIDIGEWEERGAWE', 'CURRENTVERSION' ),
'language' => array( '0', '#TAAL:', '#LANGUAGE:' ),
+ 'special' => array( '0', 'spesiaal', 'special' ),
+ 'filepath' => array( '0', 'LêERPAD:', 'FILEPATH:' ),
+ 'tag' => array( '0', 'etiket', 'tag' ),
+ 'pagesize' => array( '1', 'BLADSYGROOTTE', 'PAGESIZE' ),
+ 'index' => array( '1', '__INDEKS__', '__INDEX__' ),
+ 'noindex' => array( '1', '__GEENINDEKS__', '__NOINDEX__' ),
);
$specialPageAliases = array(
@@ -82,7 +121,9 @@ $specialPageAliases = array(
'Unusedcategories' => array( 'OngebruikdeKategorieë' ),
'Unusedimages' => array( 'OngebruikdeBeelde' ),
'Wantedpages' => array( 'GesoekdeBladsye', 'GebreekteSkakels' ),
- 'Wantedcategories' => array( 'GesoekdeKategorieë' ),
+ 'Wantedcategories' => array( 'GesoekteKategorieë' ),
+ 'Wantedfiles' => array( 'GesoekteLêers' ),
+ 'Wantedtemplates' => array( 'GesoekteSjablone' ),
'Mostlinked' => array( 'MeeteGeskakel' ),
'Mostlinkedcategories' => array( 'MeesGeskakeldeKategorieë' ),
'Mostlinkedtemplates' => array( 'MeesGeskakeldeSjablone' ),
@@ -105,22 +146,45 @@ $specialPageAliases = array(
'Emailuser' => array( 'Stuur e-pos', 'Stuure-pos', 'Stuur epos', 'Stuurepos' ),
'Confirmemail' => array( 'Bevestig e-posadres', 'Bevestige-posadres', 'Bevestig eposadres', 'Bevestigeposadres' ),
'Whatlinkshere' => array( 'Skakels hierheen', 'Skakelshierheen' ),
+ 'Recentchangeslinked' => array( 'OnlangseVeranderingsMetSkakels', 'VerwanteVeranderings' ),
'Movepage' => array( 'Skuif bladsy', 'Skuifbladsy' ),
'Blockme' => array( 'BlokMy' ),
'Booksources' => array( 'Boekbronne' ),
'Categories' => array( 'Kategorieë' ),
+ 'Export' => array( 'Eksporteer' ),
'Version' => array( 'Weergawe' ),
'Allmessages' => array( 'Stelselboodskappe', 'Alle stelselboodskappe', 'Allestelselboodskappe', 'Boodskappe' ),
+ 'Log' => array( 'Logboek', 'Logboeke' ),
'Blockip' => array( 'BlokIP' ),
+ 'Undelete' => array( 'Ontskrap' ),
+ 'Import' => array( 'Importeer' ),
+ 'Lockdb' => array( 'SluitDB' ),
+ 'Unlockdb' => array( 'OntsluitDB' ),
+ 'Userrights' => array( 'GebruikersRegte' ),
'MIMEsearch' => array( 'MIME-soek', 'MIMEsoek', 'MIME soek' ),
+ 'FileDuplicateSearch' => array( 'LerDuplikaatSoek' ),
+ 'Unwatchedpages' => array( 'NieDopgehoudeBladsye' ),
+ 'Listredirects' => array( 'LysAansture' ),
+ 'Revisiondelete' => array( 'WeergaweSkrap' ),
+ 'Unusedtemplates' => array( 'OngebruikteSjablone' ),
'Randomredirect' => array( 'Lukrake aanstuur', 'Lukrakeaanstuur' ),
- 'Mypage' => array( 'Mybladsy' ),
+ 'Mypage' => array( 'MyBladsy' ),
'Mytalk' => array( 'Mybespreking', 'Mybesprekings' ),
'Mycontributions' => array( 'Mybydrae' ),
+ 'Listadmins' => array( 'LysAdministrateurs' ),
+ 'Listbots' => array( 'LysRobotte' ),
+ 'Popularpages' => array( 'PopulêreBladsye' ),
'Search' => array( 'Soek' ),
'Resetpass' => array( 'HerstelWagwoord' ),
'Withoutinterwiki' => array( 'Sonder taalskakels', 'Sondertaalskakels' ),
+ 'MergeHistory' => array( 'VersmeltGeskiedenis' ),
'Filepath' => array( 'Lêerpad' ),
+ 'Invalidateemail' => array( 'OngeldigeEpos' ),
+ 'Blankpage' => array( 'SkoonBladsy' ),
+ 'LinkSearch' => array( 'SkakelSoektog' ),
+ 'DeletedContributions' => array( 'GeskrapteBydraes' ),
+ 'Tags' => array( 'Etikette' ),
+ 'Activeusers' => array( 'AktieweGebruikers' ),
);
# South Africa uses space for thousands and comma for decimal
@@ -160,6 +224,7 @@ $messages = array(
'tog-enotifminoredits' => 'Stuur ook e-pos vir klein bladsywysigings',
'tog-enotifrevealaddr' => 'Stel my e-posadres bloot in kennisgewingspos',
'tog-shownumberswatching' => 'Wys die aantal gebruikers wat dophou',
+'tog-oldsig' => 'Voorskou van bestaande handtekening:',
'tog-fancysig' => 'Hanteer handtekening as wikiteks (sonder outomatiese skakels)',
'tog-externaleditor' => "Gebruik outomaties 'n eksterne redigeringsprogram",
'tog-externaldiff' => "Gebruik 'n eksterne vergelykingsprogram (net vir deskundiges - benodig spesiale verstellings op u rekenaar)",
@@ -181,6 +246,13 @@ $messages = array(
'underline-never' => 'Nooit',
'underline-default' => 'Blaaierverstek',
+# Font style option in Special:Preferences
+'editfont-style' => 'Lettertipe vir wysigingsvenster:',
+'editfont-default' => 'Blaaierverstek',
+'editfont-monospace' => 'Monospaced lettertipe',
+'editfont-sansserif' => 'Sans-serif lettertipe',
+'editfont-serif' => 'Serif lettertipe',
+
# Dates
'sunday' => 'Sondag',
'monday' => 'Maandag',
@@ -240,7 +312,7 @@ $messages = array(
'category-media-header' => 'Media in kategorie "$1"',
'category-empty' => "''Hierdie kategorie bevat geen bladsye of media nie.''",
'hidden-categories' => '{{PLURAL:$1|Versteekte kategorie|Versteekte kategorië}}',
-'hidden-category-category' => 'Versteekte kategorieë', # Name of the category where hidden categories will be listed
+'hidden-category-category' => 'Versteekte kategorieë',
'category-subcat-count' => "{{PLURAL:$2|Hierdie kategorie bevat slegs die volgende subkategorie.|Hierdie kategorie bevat die volgende {{PLURAL:$1|subkategorie|$1 subkategorië}}, uit 'n totaal van $2.}}",
'category-subcat-count-limited' => 'Hierdie kategorie het die volgende {{PLURAL:$1|subkategorie|$1 subkategorië}}.',
'category-article-count' => "{{PLURAL:$2|Hierdie kategorie bevat slegs die volgende bladsy.|Die volgende {{PLURAL:$1|bladsy|$1 bladsye}} is in hierdie kategorie, uit 'n totaal van $2.}}",
@@ -248,6 +320,8 @@ $messages = array(
'category-file-count' => "{{PLURAL:$2|Hierdie kategorie bevat net die volgende lêer.|Die volgende {{PLURAL:$1|lêer|$1 lêers}} is in hierdie kategorie, uit 'n totaal van $2.}}",
'category-file-count-limited' => 'Die volgende {{PLURAL:$1|lêer|$1 lêers}} is in die huidige kategorie.',
'listingcontinuesabbrev' => 'vervolg',
+'index-category' => 'Geïndekseerde bladsye',
+'noindex-category' => 'Ongeïndekseerde bladsye',
'mainpagetext' => "'''MediaWiki is suksesvol geïnstalleer.'''",
'mainpagedocfooter' => "Konsulteer '''[http://meta.wikimedia.org/wiki/Help:Contents User's Guide]''' vir inligting oor hoe om die wikisagteware te gebruik.
@@ -257,10 +331,18 @@ $messages = array(
* [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
-'about' => 'Aangaande',
-'article' => 'Inhoudbladsy',
-'newwindow' => '(verskyn in nuwe venster)',
-'cancel' => 'Kanselleer',
+'about' => 'Aangaande',
+'article' => 'Inhoudbladsy',
+'newwindow' => '(verskyn in nuwe venster)',
+'cancel' => 'Kanselleer',
+'moredotdotdot' => 'Meer…',
+'mypage' => 'My bladsy',
+'mytalk' => 'My besprekings',
+'anontalk' => 'Besprekingsblad vir hierdie IP',
+'navigation' => 'Navigasie',
+'and' => '&#32;en',
+
+# Cologne Blue skin
'qbfind' => 'Vind',
'qbbrowse' => 'Snuffel',
'qbedit' => 'Wysig',
@@ -268,15 +350,35 @@ $messages = array(
'qbpageinfo' => 'Bladsyinligting',
'qbmyoptions' => 'My bladsye',
'qbspecialpages' => 'Spesiale bladsye',
-'moredotdotdot' => 'Meer…',
-'mypage' => 'My bladsy',
-'mytalk' => 'My besprekings',
-'anontalk' => 'Besprekingsblad vir hierdie IP',
-'navigation' => 'Navigasie',
-'and' => '&#32;en',
-
-# Metadata in edit box
-'metadata_help' => 'Metadata:',
+'faq' => 'Gewilde vrae',
+'faqpage' => 'Project:GewildeVrae',
+
+# Vector skin
+'vector-action-addsection' => 'Nuwe onderwerp',
+'vector-action-delete' => 'Skrap',
+'vector-action-move' => 'Skuif',
+'vector-action-protect' => 'Beskerm',
+'vector-action-undelete' => 'Ontskrap',
+'vector-action-unprotect' => 'Verwyder beskerming',
+'vector-namespace-category' => 'Kategorie',
+'vector-namespace-help' => 'Hulpbladsy',
+'vector-namespace-image' => 'Lêer',
+'vector-namespace-main' => 'Bladsy',
+'vector-namespace-media' => 'Mediablad',
+'vector-namespace-mediawiki' => 'Boodskap',
+'vector-namespace-project' => 'Projekblad',
+'vector-namespace-special' => 'Spesiale bladsy',
+'vector-namespace-talk' => 'Bespreking',
+'vector-namespace-template' => 'Sjabloon',
+'vector-namespace-user' => 'Gebruikersblad',
+'vector-view-create' => 'Skep',
+'vector-view-edit' => 'Wysig',
+'vector-view-history' => 'Wys geskiedenis',
+'vector-view-view' => 'Lees',
+'vector-view-viewsource' => 'Wys bronteks',
+'actions' => 'Aksies',
+'namespaces' => 'Naamruimtes',
+'variants' => 'Variante',
'errorpagetitle' => 'Fout',
'returnto' => 'Keer terug na $1.',
@@ -326,18 +428,22 @@ $messages = array(
'otherlanguages' => 'Ander tale',
'redirectedfrom' => '(Aangestuur vanaf $1)',
'redirectpagesub' => 'Aanstuurblad',
-'lastmodifiedat' => 'Laaste wysiging op $2, $1.', # $1 date, $2 time
+'lastmodifiedat' => 'Laaste wysiging op $2, $1.',
'viewcount' => 'Hierdie bladsy is al {{PLURAL:$1|keer|$1 kere}} aangevra.',
'protectedpage' => 'Beskermde bladsy',
'jumpto' => 'Spring na:',
'jumptonavigation' => 'navigasie',
'jumptosearch' => 'soek',
+'view-pool-error' => "Jammer, die bedieners is tans oorbelas.
+Te veel gebruikers probeer om na hierdie bladsy te kyk.
+Wag asseblief 'n rukkie voordat u weer probeer om die bladsy op te roep.
+
+$1",
# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
'aboutsite' => 'Inligting oor {{SITENAME}}',
'aboutpage' => 'Project:Omtrent',
'copyright' => 'Teks is beskikbaar onderhewig aan $1.',
-'copyrightpagename' => '{{SITENAME}} kopiereg',
'copyrightpage' => '{{ns:project}}:kopiereg',
'currentevents' => 'Huidige gebeure',
'currentevents-url' => 'Project:Huidige gebeure',
@@ -345,8 +451,6 @@ $messages = array(
'disclaimerpage' => 'Project:Voorwaardes',
'edithelp' => 'Wysighulp',
'edithelppage' => 'Help:Wysig',
-'faq' => 'Gewilde vrae',
-'faqpage' => 'Project:GewildeVrae',
'helppage' => 'Help:Inhoud',
'mainpage' => 'Tuisblad',
'mainpage-description' => 'Tuisblad',
@@ -426,10 +530,6 @@ Die laaste navraag was:
"$1"
vanuit funksie "$2".
Databasis gee foutboodskap: "$3: $4".',
-'noconnect' => 'Die wiki ondervind tegniese probleme en kon nie na die databasis konnekteer nie.<br />
-$1',
-'nodb' => 'Kon nie databasis $1 selekteer nie',
-'cachederror' => "Die volgende is 'n gekaste kopie van die aangevraagde blad, en is dalk nie op datum nie.",
'laggedslavemode' => 'Waarskuwing: Onlangse wysigings dalk nie in bladsy vervat nie.',
'readonly' => 'Databasis gesluit',
'enterlockreason' => 'Rede vir die sluiting,
@@ -450,6 +550,8 @@ Indien dit nie die geval is nie, het u moontlik 'n fout in die sagteware ontdek.
'readonly_lag' => 'Die databasis is outomaties gesluit terwyl die slaafdatabasisse sinchroniseer met die meester',
'internalerror' => 'Interne fout',
'internalerror_info' => 'Interne fout: $1',
+'fileappenderrorread' => 'Kon nie "$1" tydens die "append" lees nie.',
+'fileappenderror' => 'Kon nie "$1" agteraan "$2" voeg nie.',
'filecopyerror' => 'Kon nie lêer van "$1" na "$2" kopieer nie.',
'filerenameerror' => 'Kon nie lêernaam van "$1" na "$2" wysig nie.',
'filedeleteerror' => 'Kon nie lêer "$1" skrap nie.',
@@ -459,7 +561,8 @@ Indien dit nie die geval is nie, het u moontlik 'n fout in die sagteware ontdek.
'unexpected' => 'Onverwagte waarde: "$1"="$2".',
'formerror' => 'Fout: kon vorm nie stuur nie',
'badarticleerror' => 'Die aksie kon nie op hierdie bladsy uitgevoer word nie.',
-'cannotdelete' => 'Kon nie die bladsy of prent skrap nie, iemand anders het dit miskien reeds geskrap.',
+'cannotdelete' => 'Die bladsy of lêer "$1" kon nie skrap word nie.
+Iemand anders het dit moontlik reeds geskrap.',
'badtitle' => 'Ongeldige titel',
'badtitletext' => "Die bladsytitel waarvoor gevra is, is ongeldig, leeg, of
'n verkeerd geskakelde tussen-taal of tussen-wiki titel.",
@@ -492,7 +595,6 @@ Die rede gegee is ''$2''.",
'virus-unknownscanner' => 'onbekende antivirus:',
# Login and logout pages
-'logouttitle' => 'Teken uit',
'logouttext' => "'''U is nou uitgeteken'''
U kan aanhou om {{SITENAME}} anoniem te gebruik; of u kan weer [[Special:UserLogin|inteken]] as dieselfde of 'n ander gebruiker.
@@ -500,7 +602,6 @@ Dit is moontlik dat sommige bladsye nog sal aandui dat u aangeteken is totdat u
'welcomecreation' => '== Welkom, $1! ==
U rekening is geskep;
moenie vergeet om u [[Special:Preferences|persoonlike voorkeure vir {{SITENAME}}]] te stel nie.',
-'loginpagetitle' => 'Teken in',
'yourname' => 'Gebruikersnaam:',
'yourpassword' => 'Wagwoord:',
'yourpasswordagain' => 'Herhaal wagwoord',
@@ -511,6 +612,7 @@ moenie vergeet om u [[Special:Preferences|persoonlike voorkeure vir {{SITENAME}}
'nav-login-createaccount' => 'Teken in',
'loginprompt' => 'U blaaier moet koekies toelaat om by {{SITENAME}} te kan aanteken.',
'userlogin' => 'Teken in / registreer',
+'userloginnocreate' => 'Teken in',
'logout' => 'Teken uit',
'userlogout' => 'Teken uit',
'notloggedin' => 'Nie ingeteken nie',
@@ -523,28 +625,8 @@ moenie vergeet om u [[Special:Preferences|persoonlike voorkeure vir {{SITENAME}}
'badretype' => 'Die ingetikte wagwoorde is nie dieselfde nie.',
'userexists' => "Die gebruikersnaam wat u gekies het is reeds geneem.
Kies asseblief 'n ander naam.",
-'youremail' => 'E-pos',
-'username' => 'Gebruikersnaam:',
-'uid' => 'Gebruiker-ID:',
-'prefs-memberingroups' => 'Lid van {{PLURAL:$1|groep|groepe}}:',
-'yourrealname' => 'Regte naam:',
-'yourlanguage' => 'Taal:',
-'yournick' => 'Bynaam (vir handtekening)',
-'badsig' => 'Ongeldige handtekening; gaan HTML na.',
-'badsiglength' => 'U handtekening is te lank.
-Dit mag nie meer as $1 {{PLURAL:$1|karakter|karakters}} bevat nie.',
-'yourgender' => 'Geslag:',
-'gender-unknown' => 'Nie gespesifiseer',
-'gender-male' => 'Man',
-'gender-female' => 'Vrou',
-'prefs-help-gender' => 'Opsioneel: dit word gebruik om gebruikers korrek aan te spreek in die sagteware.
-Die inligting is vir ander gebruikers sigbaar.',
-'email' => 'E-pos',
-'prefs-help-realname' => 'Regte naam (opsioneel): as u hierdie verskaf, kan dit gebruik word om erkenning vir u werk te gee.',
'loginerror' => 'Intekenfout',
-'prefs-help-email' => 'E-posadres is opsioneel, maar maak dit moontlik om u wagwoord aan u te pos sou u dit vergeet.
-U kan ook besluit om e-pos te ontvang as ander gebruikers u gebruikers- of besprekingsblad wysig sonder om u identiteit te verraai.',
-'prefs-help-email-required' => 'E-pos adres word benodig.',
+'createaccounterror' => "Kon nie 'n rekening skep nie: $1",
'nocookiesnew' => 'Die gebruikersrekening is geskep, maar u is nie ingeteken nie.
{{SITENAME}} gebruik koekies om gebruikers in te teken.
U rekenaar laat tans nie koekies toe nie.
@@ -558,16 +640,19 @@ Gebruikersname is gevoelig vir hoofletters.
Maak seker dit is reg gespel of [[Special:UserLogin/signup|skep \'n nuwe rekening]].',
'nosuchusershort' => 'Daar is geen gebruikersnaam "<nowiki>$1</nowiki>" nie. Maak seker dit is reg gespel.',
'nouserspecified' => "U moet 'n gebruikersnaam spesifiseer.",
+'login-userblocked' => 'Hierdie gebruiker is geblokkeer.
+Intekening word verbied.',
'wrongpassword' => 'Ongeldige wagwoord, probeer weer.',
'wrongpasswordempty' => 'Die wagwoord was leeg. Probeer asseblief weer.',
-'passwordtooshort' => 'U wagwoord is te kort.
-Dit moet ten minste {{PLURAL:$1|1 karakter|$1 karakters}} hê en kan nie u gebruikersnaam insluit nie.',
+'passwordtooshort' => 'Wagwoorde moet ten minste {{PLURAL:$1|1 karakter|$1 karakters}} lank wees.',
+'password-name-match' => 'U wagwoord mag nie dieselfde as u gebruikersnaam wees nie.',
'mailmypassword' => "E-pos my 'n nuwe wagwoord",
'passwordremindertitle' => 'Wagwoordwenk van {{SITENAME}}',
'passwordremindertext' => 'Iemand (waarskynlik u vanaf IP-adres $1) het \'n nuwe wagwoord vir {{SITENAME}} ($4) gevra. \'n Tydelike wagwoord is vir gebruiker "$2" geskep. Die nuwe wagwoord is "$3". U kan met die tydelike wagwoord aanteken en \'n nuwe wagwoord stel. Die tydelike wagwoord sal na {{PLURAL:$5|een dag|$5 dae}} verval.
Indien iemand anders hierdie navraag gerig het, of u het die wagwoord intussen onthou en wil nie meer die wagwoord wysig nie, kan u die boodskap ignoreer en voortgaan om die ou wagwoord te gebruik.',
'noemail' => 'Daar is geen e-posadres vir gebruiker "$1" nie.',
+'noemailcreate' => "U moet 'n geldige e-posadres verskaf",
'passwordsent' => 'Nuwe wagwoord gestuur na e-posadres vir "$1".
Teken asseblief in na u dit ontvang het.',
'blocked-mailpassword' => 'U IP-adres is tans teen wysigings geblokkeer. Om verdere misbruik te voorkom is dit dus nie moontlik om die wagwoordherwinningfunksie te gebruik nie.',
@@ -591,9 +676,11 @@ Voer asseblief 'n geldige e-posadres in, of laat die veld leeg.",
U word aangeraai om in te teken so gou as moontlik u wagwoord te verander.
Indien hierdie rekening foutief geskep is, kan u hierdie boodskap ignoreer.',
+'usernamehasherror' => "'n Gebruikersnaam mag nie 'n hekkie-karakter (#) in hê nie",
'login-throttled' => "U het al te veel kere met 'n ongeldige wagwoord probeer aanteken.
Wag asseblief alvorens u weer probeer.",
'loginlanguagelabel' => 'Taal: $1',
+'suspicious-userlogout' => "U versoek om af te teken is geïgnoreer omdat dit lyk asof dit deur 'n gebreekte webleser of instaanbediener gestuur is.",
# Password reset dialog
'resetpass' => 'Verander wagwoord',
@@ -605,18 +692,13 @@ Om voort te gaan moet u 'n nuwe wagwoord hier kies:",
'retypenew' => 'Tik nuwe wagwoord weer in',
'resetpass_submit' => 'Stel wagwoord en teken in',
'resetpass_success' => 'U wagwoord is suksesvol gewysig! Besig om u in te teken ...',
-'resetpass_bad_temporary' => "Ongeldige tydelike wagwoord.
-U het u wagwoord al gewysig of 'n nuwe tydelike wagwoord aangevra.",
'resetpass_forbidden' => 'Wagwoorde kannie gewysig word nie.',
'resetpass-no-info' => 'U moet ingeteken wees om hierdie bladsy direk te kan gebruik.',
'resetpass-submit-loggedin' => 'Verander wagwoord',
+'resetpass-submit-cancel' => 'Kanselleer',
'resetpass-wrong-oldpass' => "Die huidige of tydelike wagwoord is ongeldig.
U het moontlik reeds u wagwoord gewysig of 'n nuwe tydelike wagwoord aangevra.",
'resetpass-temp-password' => 'Tydelike wagwoord:',
-'resetpass-log' => 'Logboek van wagwoorde herstel',
-'resetpass-logtext' => "Onder is 'n logboek van gebruikers wat se wagwoorde deur administrateurs herstel is.",
-'resetpass-logentry' => 'verander die wagwoord vir $1',
-'resetpass-comment' => 'Rede vir herstel van wagwoord:',
# Edit page toolbar
'bold_sample' => 'Vetgedrukte teks',
@@ -690,7 +772,6 @@ Vermeld asseblief die bovermelde bloknommer as u die saak rapporteer,",
'blockededitsource' => "Die teks van '''u wysigings''' aan '''$1''' word hier onder vertoon:",
'whitelistedittitle' => 'U moet aangeteken wees om te kan redigeer.',
'whitelistedittext' => 'U moet $1 om bladsye te wysig.',
-'confirmedittitle' => 'E-pos-bevestiging nodig om te redigeer',
'confirmedittext' => 'U moet u e-posadres bevestig voor u bladsye wysig. Verstel en bevestig asseblief u e-posadres by u [[Special:Preferences|voorkeure]].',
'nosuchsectiontitle' => 'Kan nie die afdeling vind nie',
'nosuchsectiontext' => "U het probeer om 'n afdeling wat nie bestaan nie te wysig.
@@ -711,9 +792,15 @@ As u per ongeluk hier uitgekom het, gebruik u blaaier se '''terug'''-knoppie.",
U kan [[Special:Search/{{PAGENAME}}|vir die bladsytitel in ander bladsye soek]],
<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} die verwante logboeke deursoek]
of [{{fullurl:{{FULLPAGENAME}}|action=edit}} hierdie bladsy wysig]</span>.',
+'noarticletext-nopermission' => 'Daar is tans geen teks in hierdie bladsy nie. U kan vir die bladsytitel [[Special:Search/{{PAGENAME}}|in ander bladsye soek]] of
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} die verwante logboeke deursoek]</span>.',
'userpage-userdoesnotexist' => 'U is besig om \'n gebruikersblad wat nie bestaan nie te wysig (gebruiker "$1"). Maak asseblief seker of u die bladsy wil skep/ wysig.',
+'userpage-userdoesnotexist-view' => 'Die gebruiker "$1" is nie geregistreer nie.',
+'blocked-notice-logextract' => 'Hierdie gebruiker is tans geblokkeer.
+Die laaste inskrywing in die blokkeerlogboek word hieronder vertoon:',
'clearyourcache' => "'''Let wel''': Na die voorkeure gestoor is, moet u blaaier se kasgeheue verfris word om die veranderinge te sien: '''Mozilla:''' klik ''Reload'' (of ''Ctrl-R''), '''IE / Opera:''' ''Ctrl-F5'', '''Safari:''' ''Cmd-R'', '''Konqueror''' ''Ctrl-R''.",
-'usercssjsyoucanpreview' => "'''Wenk:''' Gebruik die \"Wys voorskou\"-knoppie om u nuwe CSS/JS te toets voor u stoor.",
+'usercssyoucanpreview' => "'''Wenk:''' Gebruik die \"{{int:showpreview}}\"-knoppie om u nuwe CSS te toets voor u dit stoor.",
+'userjsyoucanpreview' => "'''Wenk:''' Gebruik die \"{{int:showpreview}}\"-knoppie om u nuwe JS te toets voor u dit stoor.",
'usercsspreview' => "'''Onthou hierdie is slegs 'n voorskou van u persoonlike CSS.'''
'''Dit is nog nie gestoor nie!'''",
'userjspreview' => "'''Onthou hierdie is slegs 'n toets/voorskou van u gebruiker-JavaScript, dit is nog nie gestoor nie.'''",
@@ -763,13 +850,14 @@ Die bladsy kan nie gestoor word nie.'''",
'readonlywarning' => "'''WAARSKUWING: Die databasis is gesluit vir onderhoud. Dus sal u nie nou u wysigings kan stoor nie. Dalk wil u die teks plak in 'n lêer en stoor vir later.'''
Een administrateur het die databasis geblokkeer vir hierdie rede: $1",
-'protectedpagewarning' => "'''WAARSKUWING: Hierdie blad is beskerm, en slegs administrateurs kan die inhoud verander.'''",
-'semiprotectedpagewarning' => "'''Let wel:''' Hierdie artikel is beskerm sodat slegs ingetekende gebruikers dit kan wysig.",
+'protectedpagewarning' => "'''WAARSKUWING: Hierdie bladsy is beveilig sodat slegs administrateurs die inhoud sal kan verander.''' Die nuutste logboekinskrywing word hieronder ter verwysing vertoon:",
+'semiprotectedpagewarning' => "'''Let wel:''' Hierdie artikel is beveilig sodat slegs ingetekende gebruikers dit sal kan wysig. Die nuutste logboekinskrywing word hieronder ter verwysing vertoon:",
'cascadeprotectedwarning' => "'''Waarskuwing:''' Die bladsy was beveilig sodat dit slegs deur administrateurs gewysig kan word, omrede dit ingesluit is in die volgende {{PLURAL:$1|bladsy|bladsye}} wat kaskade-beskerming geniet:",
-'titleprotectedwarning' => "'''WAARSKUWING: Die bladsy is gesluit sodat net gebruikers met [[Special:ListGroupRights|spesiale regte]] dit sal kan skep.'''",
-'templatesused' => 'Sjablone in gebruik op hierdie blad:',
-'templatesusedpreview' => 'Sjablone in hierdie voorskou gebruik:',
-'templatesusedsection' => 'Sjablone gebruik in hierdie afdeling:',
+'titleprotectedwarning' => "'''WAARSKUWING: Hierdie bladsy is beveilig. Slegs gebruikers met [[Special:ListGroupRights|spesiale regte]] sal dit kan skep.'''
+Die nuutste logboekinskrywing word hieronder ter verwysing vertoon:",
+'templatesused' => 'Hierdie bladsy {{PLURAL:$1|gebruik sjabloon|gebruik sjablone}}:',
+'templatesusedpreview' => '{{PLURAL:$1|Sjabloon|Sjablone}} gebruik in hierdie voorskou:',
+'templatesusedsection' => 'Die volgende {{PLURAL:$1|sjabloon|sjablone}} word in hierdie afdeling gebruik:',
'template-protected' => '(beskermd)',
'template-semiprotected' => '(half-beskerm)',
'hiddencategories' => "Hierdie bladsy is 'n lid van {{PLURAL:$1|1 versteekte kategorie|$1 versteekte kategorië}}:",
@@ -778,16 +866,18 @@ Een administrateur het die databasis geblokkeer vir hierdie rede: $1",
'nocreatetext' => '{{SITENAME}} het die skep van nuwe bladsye beperk.
U kan slegs bestaande bladsye wysig, of u kan [[Special:UserLogin|aanteken of registreer]].',
'nocreate-loggedin' => 'U het nie regte om nuwe blaaie te skep nie.',
+'sectioneditnotsupported-title' => 'Dit is nie moontlik om paragrawe te wysig nie',
+'sectioneditnotsupported-text' => 'Dit is nie moontlik om paragrawe op hierdie bladsy te wysig nie.',
'permissionserrors' => 'Toestemmings Foute',
'permissionserrorstext' => 'U het nie toestemming om hierdie te doen nie, om die volgende {{PLURAL:$1|rede|redes}}:',
'permissionserrorstext-withaction' => 'U het geen regte om $2, vir die volgende {{PLURAL:$1|rede|redes}}:',
-'recreate-deleted-warn' => "'''Waarskuwing: U skep 'n bladsy wat vantevore verwyder was.'''
+'recreate-moveddeleted-warn' => "'''Waarskuwing: U skep 'n bladsy wat vantevore verwyder was.'''
U moet besluit of dit wys is om voort te gaan en aan die bladsy te werk.
Die verwyderingslogboek vir die blad word hier onder vertoon vir u gerief:",
-'deleted-notice' => 'Hierdie bladsy is verwyder.
-Die skraplogboek word hieronder ter inligting weergegee.',
-'deletelog-fulllog' => 'Wys volledige logboek',
+'moveddeleted-notice' => 'Hierdie bladsy is verwyder.
+Die skrap- en skuif-logboeke word hieronder ter inligting weergegee.',
+'log-fulllog' => 'Wys volledige logboek',
'edit-hook-aborted' => "Die wysiging is deur 'n hoek gekanselleer.
Geen verduideliking is verskaf nie.",
'edit-gone-missing' => 'Die bladsy is nie gewysig nie.
@@ -810,6 +900,7 @@ Hierdie parameters is uitgelaat.",
'post-expand-template-argument-category' => 'Bladsye met weggelate sjabloonargumente',
'parser-template-loop-warning' => "Sjablone is in 'n oneindige lus: [[$1]]",
'parser-template-recursion-depth-warning' => 'Die rekursiediepte vir sjablone is oorskry ($1)',
+'language-converter-depth-warning' => 'Die dieptelimiet vir die taalomskakelaar is oorskrei ($1)',
# "Undo" feature
'undo-success' => 'Die wysiging kan ongedaan gemaak word.
@@ -830,7 +921,7 @@ Die rede verskaf deur $3 is ''$2''",
'currentrev' => 'Huidige wysiging',
'currentrev-asof' => 'Huidige wysiging per $1',
'revisionasof' => 'Wysiging soos op $1',
-'revision-info' => 'Weergawe soos op $1 deur $2', # Additionally available: $3: revision id
+'revision-info' => 'Weergawe soos op $1 deur $2',
'previousrevision' => '← Ouer weergawe',
'nextrevision' => 'Nuwer weergawe →',
'currentrevisionlink' => 'Huidige weergawe',
@@ -842,7 +933,7 @@ Die rede verskaf deur $3 is ''$2''",
'histlegend' => 'Byskrif: (huidige) = verskil van huidige weergawe,
(vorige) = verskil van vorige weergawe, M = klein wysiging',
'history-fieldset-title' => 'Blaai deur geskiedenis',
-'deletedrev' => '[geskrap]',
+'history-show-deleted' => 'Slegs geskrapte',
'histfirst' => 'Oudste',
'histlast' => 'Nuutste',
'historysize' => '({{PLURAL:$1|1 greep|$1 grepe}})',
@@ -851,68 +942,114 @@ Die rede verskaf deur $3 is ''$2''",
# Revision feed
'history-feed-title' => 'Weergawegeskiedenis',
'history-feed-description' => 'Wysigingsgeskiedenis vir die bladsy op die wiki',
-'history-feed-item-nocomment' => '$1 by $2', # user at time
+'history-feed-item-nocomment' => '$1 by $2',
'history-feed-empty' => 'Die verlangde bladsy bestaan nie.
Dit was moontlik geskrap of geskuif.
[[Special:Search|Deursoek die wiki]] vir relevante bladsye.',
# Revision deletion
-'rev-deleted-comment' => '(opsomming geskrap)',
-'rev-deleted-user' => '(gebruikersnaam geskrap)',
-'rev-deleted-event' => '(stawingsaksie verwyder)',
-'rev-deleted-text-permission' => "Hierdie weergawe van die bladsy was '''geskrap'''.
+'rev-deleted-comment' => '(opsomming geskrap)',
+'rev-deleted-user' => '(gebruikersnaam geskrap)',
+'rev-deleted-event' => '(stawingsaksie verwyder)',
+'rev-deleted-user-contribs' => '[gebruikersnaam of IP-adres is verwyder - wysiging versteek in bydraes]',
+'rev-deleted-text-permission' => "Die weergawe van die bladsy is '''verwyder'''.
Vir meer besonderhede, raadpleeg die [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} skrapingslogboek].",
-'rev-deleted-text-view' => "Hierdie bladsy weergawe was '''geskrap'''.
-As administrateur kan u dit wel sien; daar mag dalk meer besonderhede in die [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} skrapingslogboek] wees.",
-'rev-deleted-no-diff' => "U kan nie hierdie verandering sien nie, omdat een van die hersienings '''geskrap''' is.<br />
-Daar mag dalk meer inligting in die [{{fullurl:Special:Log/delete|page={{FULLPAGENAMEE}}}} skraplogboek] beskikbaar wees.",
-'rev-delundel' => 'wys/versteek',
-'revisiondelete' => 'Verwyder/herstel weergawes',
-'revdelete-nooldid-title' => 'Ongeldige teiken weergawe',
-'revdelete-nooldid-text' => 'U het geen teikenweergawes vir hierdie aksie verskaf nie, die aangegewe weergawe bestaan nie, of u probeer om die laaste weergawe te verberg.',
-'revdelete-nologtype-title' => 'Geen logboektipe verskaf nie',
-'revdelete-nologtype-text' => "U het nie 'n logboektipe verskaf om hierdie handeling op uit te voer nie.",
-'revdelete-toomanytargets-title' => 'Te veel teikens',
-'revdelete-toomanytargets-text' => 'U het te veel tipes teikens verskaf om die aksie uit te voer.',
-'revdelete-nologid-title' => 'Ongeldige logboekreël',
-'revdelete-nologid-text' => 'U het óf geen logboeke gespesifiseer nie óf die gevraagde lyn bestaan nie in die logboek nie.',
-'revdelete-selected' => "'''Geselekteerde {{PLURAL:$2|wysiging|wysigings}} vir [[:$1]]:'''",
-'logdelete-selected' => "'''Geselekteerde {{PLURAL:$1|logboek aksie|logboek aksies}}:'''",
-'revdelete-text' => "'''Geskrapte weergawes en gebeure sal steeds sigbaar wees in die bladsy se geskiedenis en logboeke, maar dele van die huidige inhoud sal ontoeganklik wees vir die publiek.'''
-Ander administrateurs van {{SITENAME}} sal steeds in staat wees om toegang te kry tot die versteekte inhoud en kan dit weer herstel deur gebruik te maak van dieselfde koppelvlak indien daar geen addisionele beperkinge gestel is nie.
-
-Bevestig asseblief u voorneme, dat u die gevolge van u voorneme verstaan en dat u dit doen in ooreenstemming met [[{{MediaWiki:Policy-url}}|die beleid]].",
-'revdelete-suppress-text' => "Verberging van weergawes mag '''slegs''' in die volgende gevalle gebruik word:
+'rev-deleted-text-unhide' => "Hierdie weergawe van die bladsy is '''verwyder'''.
+Details kan moontlik in die [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} skraplogboek] aanwesig wees.
+As administrateur kan u, as u wil, na [$1 die weergawe kyk].",
+'rev-suppressed-text-unhide' => "Hierdie weergawe van die blad word '''onderdruk'''.
+Details kan moontlik in die [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} logboek van onderdrukte weergawes] gesien word.
+As administrateur kan u, as u wil, na [$1 die verskille kyk].",
+'rev-deleted-text-view' => "Hierdie weergawe is '''verwyder'''.
+As administrateur kan u dit wel sien.
+Details kan moontlik in die [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} skraplogboek] aanwesig wees.",
+'rev-suppressed-text-view' => "Hierdie weergawe van die bladsy word '''onderdruk'''.
+As administrateur kan u dit sien.
+Details kan moontlik in die [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} logboek van onderdrukte weergawes] gesien word.",
+'rev-deleted-no-diff' => "U kan nie die verskille sien nie omdat een van die weergawes '''verwyder''' is.
+Details kan moontlik in die [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} skraplogboek] aanwesig wees.",
+'rev-suppressed-no-diff' => "U kan nie hierdie verskil sien nie omdat een van die weergawes '''geskrap''' is.",
+'rev-deleted-unhide-diff' => "Een van die weergawes vir hierdie verskil wat u aangevra het is '''verwyder'''.
+Meer details mag moontlik in die [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwyderingslogboek] aanwesig wees.
+As administrateur kan u steeds [$1 die verskille sien] as u wil voortgaan.",
+'rev-suppressed-unhide-diff' => "Een van die weergawes vir hierdie verskil wat u aangevra het is '''onderdruk'''.
+Meer details mag moontlik in die [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} verbergingslogboek] aanwesig wees.
+As administrateur kan u steeds [$1 hierdie weergawe sien] as u wil voortgaan.",
+'rev-deleted-diff-view' => "Een van die weergawes van die verskil wat u aangevra het is '''verwyder'''.
+As administrateur kan u hierdie verskil sien. Meer details mag moontlik is die [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwyderingslogboek] beskikbaar wees.",
+'rev-suppressed-diff-view' => "Een van die weergawes vir die verskil wat u aangevra het is '''onderdruk'''.
+As administrateur kan u hierdie verskil sien. Meer details mag moontlik in die [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} verbergingslogboek] beskikbaar wees.",
+'rev-delundel' => 'wys/versteek',
+'rev-showdeleted' => 'wys',
+'revisiondelete' => 'Verwyder/herstel weergawes',
+'revdelete-nooldid-title' => 'Ongeldige teiken weergawe',
+'revdelete-nooldid-text' => 'U het geen teikenweergawes vir hierdie aksie verskaf nie, die aangegewe weergawe bestaan nie, of u probeer om die laaste weergawe te verberg.',
+'revdelete-nologtype-title' => 'Geen logboektipe verskaf nie',
+'revdelete-nologtype-text' => "U het nie 'n logboektipe verskaf om hierdie handeling op uit te voer nie.",
+'revdelete-nologid-title' => 'Ongeldige logboekreël',
+'revdelete-nologid-text' => 'U het óf geen logboeke gespesifiseer nie óf die gevraagde lyn bestaan nie in die logboek nie.',
+'revdelete-no-file' => 'Die gespesifiseerde lêer bestaan nie.',
+'revdelete-show-file-confirm' => 'Is u seker u wil die geskrapte weergawe van die lêer "<nowiki>$1</nowiki>" van $2 om $3 sien?',
+'revdelete-show-file-submit' => 'Ja',
+'revdelete-selected' => "'''Geselekteerde {{PLURAL:$2|wysiging|wysigings}} vir [[:$1]]:'''",
+'logdelete-selected' => "'''Geselekteerde {{PLURAL:$1|logboek aksie|logboek aksies}}:'''",
+'revdelete-text' => "'''Geskrapte wysigings en aksies sal in die geskiedenis en logboeke sigbaar bly, maar dele van die inhoud sal nie publiek toeganklik wees nie.'''
+Ander administrateurs van {{SITENAME}} kan steeds die verborge inhoud sien en die verwydering met behulp van die vorm ongedaan maak, tensy aanvullende beperkinge deur die stelseladministrateur opgelê is.",
+'revdelete-confirm' => 'Bevestig asseblief dat u dit wil doen, dat u die nagevolge verstaan en dat u dit doen in ooreenstemming met die [[{{MediaWiki:Policy-url}}|beleid]].',
+'revdelete-suppress-text' => "Verberging van weergawes mag '''slegs''' in die volgende gevalle gebruik word:
* Potensieel lasterlike inligting
* Ongepaste persoonlike inligting
*: ''woonadres, telefoonnommers, ID-nommers, ensovoorts.''",
-'revdelete-legend' => 'Stel sigbaarheid beperkinge',
-'revdelete-hide-text' => 'Steek hersiening teks weg',
-'revdelete-hide-name' => 'Steek aksie en teiken weg',
-'revdelete-hide-comment' => 'Versteek wysigopsomming',
-'revdelete-hide-user' => 'Steek redigeerder se gebruikersnaam/IP weg',
-'revdelete-hide-restricted' => 'Onderdruk data van administrateurs asook andere',
-'revdelete-suppress' => 'Onderdruk data van administrateurs en ander.',
-'revdelete-hide-image' => 'Steek lêer inhoud weg',
-'revdelete-unsuppress' => 'Verwyder beperkinge op herstelde weergawes',
-'revdelete-log' => 'Rede:',
-'revdelete-submit' => 'Pas op gekose weergawe toe',
-'revdelete-logentry' => 'sigbaarheid van weergawe is gewysig vir [[$1]]',
-'logdelete-logentry' => 'verander sigbaarheid van gebeurtenis [[$1]]',
-'revdelete-success' => "'''Die sigbaarheid van die wysiging is suksesvol opgedateer.'''",
-'logdelete-success' => "'''Sigbaarheid van die gebeurtenis suksesvol gestel.'''",
-'revdel-restore' => 'Verander sigbaarheid',
-'pagehist' => 'Bladsy geskiedenis',
-'deletedhist' => 'Verwyderde geskiedenis',
-'revdelete-content' => 'inhoud',
-'revdelete-summary' => 'redigeringsopsomming',
-'revdelete-uname' => 'gebruikersnaam',
-'revdelete-restricted' => 'beperkings is aan administrateurs opgelê',
-'revdelete-unrestricted' => 'beperkings vir administrateurs is opgehef',
-'revdelete-hid' => '$1 verskuil',
-'revdelete-unhid' => '$1 onverskuil',
-'revdelete-log-message' => '$1 vir $2 {{PLURAL:$2|weergawe|weergawes}}',
-'logdelete-log-message' => '$1 vir $2 {{PLURAL:$2|gebeurtenis|gebeurtenisse}}',
+'revdelete-legend' => 'Stel sigbaarheid beperkinge',
+'revdelete-hide-text' => 'Steek hersiening teks weg',
+'revdelete-hide-image' => 'Steek lêer inhoud weg',
+'revdelete-hide-name' => 'Steek aksie en teiken weg',
+'revdelete-hide-comment' => 'Versteek wysigopsomming',
+'revdelete-hide-user' => 'Steek redigeerder se gebruikersnaam/IP weg',
+'revdelete-hide-restricted' => 'Onderdruk data van administrateurs asook andere',
+'revdelete-radio-same' => '(moenie verander nie)',
+'revdelete-radio-set' => 'Ja',
+'revdelete-radio-unset' => 'Nee',
+'revdelete-suppress' => 'Onderdruk data van administrateurs en ander.',
+'revdelete-unsuppress' => 'Verwyder beperkinge op herstelde weergawes',
+'revdelete-log' => 'Rede:',
+'revdelete-submit' => 'Pas op gekose {{PLURAL:$1|weergawe|weergawes}} toe',
+'revdelete-logentry' => 'sigbaarheid van weergawe is gewysig vir [[$1]]',
+'logdelete-logentry' => 'verander sigbaarheid van gebeurtenis [[$1]]',
+'revdelete-success' => "'''Die sigbaarheid van die wysiging is suksesvol opgedateer.'''",
+'revdelete-failure' => "'''Die sigbaarheid van die wysiging kon nie opgedateer word nie:'''
+$1",
+'logdelete-success' => "'''Sigbaarheid van die gebeurtenis suksesvol gestel.'''",
+'logdelete-failure' => "'''Sigbaarheid kon nie vir die logboekreël gestel word nie:'''
+$1",
+'revdel-restore' => 'Verander sigbaarheid',
+'pagehist' => 'Bladsy geskiedenis',
+'deletedhist' => 'Verwyderde geskiedenis',
+'revdelete-content' => 'inhoud',
+'revdelete-summary' => 'redigeringsopsomming',
+'revdelete-uname' => 'gebruikersnaam',
+'revdelete-restricted' => 'beperkings is aan administrateurs opgelê',
+'revdelete-unrestricted' => 'beperkings vir administrateurs is opgehef',
+'revdelete-hid' => '$1 verskuil',
+'revdelete-unhid' => '$1 onverskuil',
+'revdelete-log-message' => '$1 vir $2 {{PLURAL:$2|weergawe|weergawes}}',
+'logdelete-log-message' => '$1 vir $2 {{PLURAL:$2|gebeurtenis|gebeurtenisse}}',
+'revdelete-hide-current' => 'Fout met die wegsteek van die item gedateer $2 om $1 uur: hierdie is die huidige weergawe. Dit kan nie versteek word nie.',
+'revdelete-show-no-access' => 'Fout met die vertoon van die item gedateer $2 om $1 uur: hierdie item is as "beskermd" gemerk.
+U het nie toegang tot die item nie.',
+'revdelete-modify-no-access' => 'Fout met die wysiging van die item gedateer $2 om $1 uur: hierdie item is as "beskermd" gemerk. U het nie toegang tot die item nie.',
+'revdelete-modify-missing' => 'Fout met die wysiging van item ID $1: dit is nie in die databasis nie!',
+'revdelete-no-change' => "'''Waarskuwing:''' die item van $1 om $2 uur het reeds die gevraagde sigbaarheidsinstellings.",
+'revdelete-concurrent-change' => "'n Fout het voorgekom met die wysiging van die objek van $1 om $2 uur: die status is intussen deur iemand anders gewysig.
+Kontroleer asseblief die logboeke.",
+'revdelete-only-restricted' => "'n Fout het voorgekom met die verberging van die item van $1, $2: u kan nie items onderdruk uit die sig van administrateurs sonder om ook een van die ander sigbaarheidsopsies te kies nie.",
+'revdelete-reason-dropdown' => '* Algemene redes vir skrapping
+** Skending van outeursreg
+** Onbetaamlike persoonlike inligting',
+'revdelete-otherreason' => 'Ander rede:',
+'revdelete-reasonotherlist' => 'Ander rede',
+'revdelete-edit-reasonlist' => 'Wysig skrap redes',
+'revdelete-offender' => 'Outeur van hersiening:',
# Suppression log
'suppressionlog' => 'Verbergingslogboek',
@@ -951,67 +1088,13 @@ Let op dat die gebruik van navigasieskakels hierdie kolom se waardes sal herstel
'mergelogpagetext' => "Hieronder is 'n lys van die mees onlangse versmeltings van een bladsy se geskiedenis na 'n ander.",
# Diffs
-'history-title' => 'Weergawegeskiedenis van "$1"',
-'difference' => '(Verskil tussen weergawes)',
-'lineno' => 'Lyn $1:',
-'compareselectedversions' => 'Vergelyk gekose weergawes',
-'visualcomparison' => 'Visuele vergelyking',
-'wikicodecomparison' => 'Wikiteks vergelyking',
-'editundo' => 'maak ongedaan',
-'diff-multi' => '({{PLURAL:$1|Een tussenin wysiging|$1 tussenin wysigings}} word nie gewys nie.)',
-'diff-movedto' => 'geskuif na $1',
-'diff-styleadded' => 'styl $1 toegevoeg',
-'diff-added' => '$1 bygevoeg',
-'diff-changedto' => 'verander na $1',
-'diff-movedoutof' => 'uitgeskuif uit $1',
-'diff-styleremoved' => 'styl $1 is verwyder',
-'diff-removed' => '$1 is verwyder',
-'diff-changedfrom' => 'gewysig van $1',
-'diff-src' => 'bron',
-'diff-withdestination' => 'met bestemming $1',
-'diff-with' => '&#32;met $1 $2',
-'diff-with-final' => '&#32;en $1 $2',
-'diff-width' => 'breedte',
-'diff-height' => 'hoogte',
-'diff-p' => "'n '''paragraaf'''",
-'diff-blockquote' => "'n '''aanhaling'''",
-'diff-h1' => "'n '''Opskrif (vlak 1)'''",
-'diff-h2' => "'n '''Opskrif (vlak 2)'''",
-'diff-h3' => "'n '''Opskrif (vlak 3)'''",
-'diff-h4' => "'n '''Opskrif (vlak 4)'''",
-'diff-h5' => "'n '''Opskrif (vlak 5)'''",
-'diff-pre' => "'n '''voorgeformatteerde teksblok'''",
-'diff-div' => "'n '''afdeling'''",
-'diff-ul' => "'n '''ongenommerde lys''''",
-'diff-ol' => "'n '''genommerde lys'''",
-'diff-li' => "'n '''lys-item'''",
-'diff-table' => "'n '''tabel'''",
-'diff-tbody' => "'''tabelinhoud'''",
-'diff-tr' => "'n '''ry'''",
-'diff-td' => "'n '''sel'''",
-'diff-th' => "'n '''kolomopskrif'''",
-'diff-br' => "'n '''lynbreek'''",
-'diff-hr' => "'n '''horisontale lyn'''",
-'diff-code' => "'n '''teksblok met programkode'''",
-'diff-dl' => "'n '''definisie-lys'''",
-'diff-dt' => "'n '''definisie-item'''",
-'diff-dd' => "'n '''definisie'''",
-'diff-input' => "'n '''invoerveld'''",
-'diff-form' => "'n '''vorm'''",
-'diff-img' => "'n '''beeld'''",
-'diff-span' => "'n '''span'''",
-'diff-a' => "'n '''skakel'''",
-'diff-i' => "'''kursief'''",
-'diff-b' => "'''vet'''",
-'diff-strong' => "'''sterk'''",
-'diff-em' => "'''nadruk'''",
-'diff-font' => "'''lettertipe'''",
-'diff-big' => "'''groot'''",
-'diff-del' => "'''verwyderd'''",
-'diff-tt' => "'''vaste breedte'''",
-'diff-sub' => "'''subscript'''",
-'diff-sup' => "'''superscript'''",
-'diff-strike' => "'''doodgetrek'''",
+'history-title' => 'Weergawegeskiedenis van "$1"',
+'difference' => '(Verskil tussen weergawes)',
+'lineno' => 'Lyn $1:',
+'compareselectedversions' => 'Vergelyk gekose weergawes',
+'showhideselectedversions' => 'Wys/versteek gekose weergawes',
+'editundo' => 'maak ongedaan',
+'diff-multi' => '({{PLURAL:$1|Een tussenin wysiging|$1 tussenin wysigings}} word nie gewys nie.)',
# Search results
'searchresults' => 'soekresultate',
@@ -1019,28 +1102,25 @@ Let op dat die gebruik van navigasieskakels hierdie kolom se waardes sal herstel
'searchresulttext' => 'Vir meer inligting oor {{SITENAME}} soekresultate, lees [[{{MediaWiki:Helppage}}|{{int:help}}]].',
'searchsubtitle' => 'U soek vir \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|alle bladsye wat met "$1" begin]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|alle bladsye wat aan "$1" skakel]])',
'searchsubtitleinvalid' => 'Vir navraag "$1"',
-'noexactmatch' => "'''Geen bladsy met die titel \"\$1\" bestaan nie.''' Probeer 'n volteksnavraag of [[:\$1|skep die bladsy]].",
-'noexactmatch-nocreate' => "'''Daar bestaan geen bladsy met titel \"\$1\" nie.'''",
'toomanymatches' => "Te veel resultate. Probeer asseblief 'n ander soektog.",
'titlematches' => 'Artikeltitel resultate',
'notitlematches' => 'Geen artikeltitel resultate nie',
'textmatches' => 'Artikelteks resultate',
'notextmatches' => 'Geen artikelteks resultate nie',
-'prevn' => 'vorige $1',
-'nextn' => 'volgende $1',
+'prevn' => 'vorige {{PLURAL:$1|$1}}',
+'nextn' => 'volgende {{PLURAL:$1|$1}}',
'prevn-title' => 'Vorige {{PLURAL:$1|resultaat|$1 resultate}}',
'nextn-title' => 'Volgende {{PLURAL:$1|resultaat|$1 resultate}}',
'shown-title' => '$1 {{PLURAL:$1|resultaat|resultate}} per bladsy',
-'viewprevnext' => 'Kyk na ($1) ($2) ($3).',
+'viewprevnext' => 'Kyk na ($1 {{int:pipe-separator}} $2) ($3).',
'searchmenu-legend' => 'Soekopsies',
'searchmenu-exists' => "'''Daar is reeds 'n bladsy genaamd \"[[:\$1]]\" op die wiki'''",
'searchmenu-new' => "'''Skep die bladsy \"[[:\$1]]\" op hierdie wiki'''",
'searchhelp-url' => 'Help:Inhoud',
'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Wys bladsye wat met die voorvoegsel begin]]',
'searchprofile-articles' => 'Inhoudelike bladsye',
-'searchprofile-articles-and-proj' => 'Inhoudelike en projekbladsye',
-'searchprofile-project' => 'Projekblaaie',
-'searchprofile-images' => 'Lêers',
+'searchprofile-project' => 'Hulp- en projekbladsye',
+'searchprofile-images' => 'Multimedia',
'searchprofile-everything' => 'Alles',
'searchprofile-advanced' => 'Uitgebreid',
'searchprofile-articles-tooltip' => 'Soek in $1',
@@ -1048,8 +1128,6 @@ Let op dat die gebruik van navigasieskakels hierdie kolom se waardes sal herstel
'searchprofile-images-tooltip' => 'Soek na lêers',
'searchprofile-everything-tooltip' => 'Soek deur alle inhoud (ook besprekingsbladsye)',
'searchprofile-advanced-tooltip' => 'Soek in spesifieke naamruimtes',
-'prefs-search-nsdefault' => 'Soek met verstek-instellings.',
-'prefs-search-nscustom' => 'Soek in aangegewe naamruimtes:',
'search-result-size' => '$1 ({{PLURAL:$2|1 woord|$2 woorde}})',
'search-result-score' => 'Relevansie: $1%',
'search-redirect' => '(aanstuur $1)',
@@ -1062,11 +1140,12 @@ Let op dat die gebruik van navigasieskakels hierdie kolom se waardes sal herstel
'search-mwsuggest-disabled' => 'geen voorstelle',
'search-relatedarticle' => 'Verwante',
'mwsuggest-disable' => 'Deaktiveer AJAX-voorstelle',
+'searcheverything-enable' => 'Soek in alle naamruimtes',
'searchrelated' => 'verwante',
'searchall' => 'alle',
'showingresults' => "Hier volg {{PLURAL:$1|'''1''' resultaat|'''$1''' resultate}} wat met #'''$2''' begin.",
'showingresultsnum' => "Hier onder {{PLURAL:$3|is '''1''' resultaat|is '''$3''' resultate}} vanaf #'''$2'''.",
-'showingresultstotal' => "Hier onder is {{PLURAL:$4|resultaat '''$1''' van '''$3'''|resultate '''$1 - $2''' van '''$3'''}}",
+'showingresultsheader' => "{{PLURAL:$5|Resultaat '''$1''' van '''$3'''|Resultate '''$1 - $2''' van '''$3'''}} vir '''$4'''",
'nonefound' => "<strong>Opmerking</strong>: nie alle naamruimtes word by verstek deursoek nie.
As die voorvoegsel \"''all:''\" in 'n soekopdrag gebruik word, word alle bladsye deursoek (inklusief besprekengsbladsye, sjablone, ensovoorts).
U kan ook 'n naamruimte as voorvoegsel gebruik.",
@@ -1076,113 +1155,151 @@ U kan ook 'n naamruimte as voorvoegsel gebruik.",
'powersearch-ns' => 'Soek in naamruimtes:',
'powersearch-redir' => 'Wys aanstuurbladsye',
'powersearch-field' => 'Soek vir',
+'powersearch-togglelabel' => 'Kies',
+'powersearch-toggleall' => 'Alles',
+'powersearch-togglenone' => 'Geen',
'search-external' => 'Eksterne soektog',
'searchdisabled' => '{{SITENAME}} se soekfunksie is tans afgeskakel ter wille van werkverrigting. Gebruik gerus intussen Google of Yahoo! Let daarop dat hulle indekse van die {{SITENAME}}-inhoud verouderd mag wees.',
+# Quickbar
+'qbsettings' => 'Snelbalkvoorkeure',
+'qbsettings-none' => 'Geen',
+'qbsettings-fixedleft' => 'Links vas.',
+'qbsettings-fixedright' => 'Regs vas.',
+'qbsettings-floatingleft' => 'Dryf links.',
+'qbsettings-floatingright' => 'Dryf regs.',
+
# Preferences page
-'preferences' => 'Voorkeure',
-'mypreferences' => 'My voorkeure',
-'prefs-edits' => 'Aantal wysigings:',
-'prefsnologin' => 'Nie ingeteken nie',
-'prefsnologintext' => 'U moet <span class="plainlinks">[{{fullurl:Special:UserLogin|returnto=$1}} aanteken] om voorkeure te kan verander.',
-'prefsreset' => 'Voorkeure is herstel.',
-'qbsettings' => 'Snelbalkvoorkeure',
-'qbsettings-none' => 'Geen',
-'qbsettings-fixedleft' => 'Links vas.',
-'qbsettings-fixedright' => 'Regs vas.',
-'qbsettings-floatingleft' => 'Dryf links.',
-'qbsettings-floatingright' => 'Dryf regs.',
-'changepassword' => 'Verander wagwoord',
-'skin' => 'Omslag',
-'skin-preview' => 'Voorskou',
-'math' => 'Wiskunde',
-'dateformat' => 'Datumformaat',
-'datedefault' => 'Geen voorkeur',
-'datetime' => 'Datum en tyd',
-'math_failure' => 'Kon nie verbeeld nie',
-'math_unknown_error' => 'onbekende fout',
-'math_unknown_function' => 'onbekende funksie',
-'math_lexing_error' => 'leksikale fout',
-'math_syntax_error' => 'sintaksfout',
-'math_image_error' => 'PNG-omskakeling het gefaal.
-Kontroleer of latex, dvips en gs korrek geïnstalleer is en skakel om',
-'math_bad_tmpdir' => 'Die gids vir tydelike lêers vir wiskundige formules bestaan nie of kan nie geskep word nie',
-'math_bad_output' => 'Die gids vir lêers met wiskundige formules bestaan nie of kan nie geskep word nie',
-'math_notexvc' => 'Kan nie die texvc program vind nie;
-stel asseblief op volgens die beskrywing in math/README.',
-'prefs-personal' => 'Gebruikersdata',
-'prefs-rc' => 'Onlangse wysigings',
-'prefs-watchlist' => 'Dophoulys',
-'prefs-watchlist-days' => 'Aantal dae om in dophoulys te wys:',
-'prefs-watchlist-days-max' => '(maksimum 7 dae)',
-'prefs-watchlist-edits' => 'Aantal wysigings om in uitgebreide dophoulys te wys:',
-'prefs-watchlist-edits-max' => '(maksimum aantal: 1000)',
-'prefs-misc' => 'Allerlei',
-'prefs-resetpass' => 'Verander wagwoord',
-'saveprefs' => 'Stoor voorkeure',
-'resetprefs' => 'Herstel voorkeure',
-'restoreprefs' => 'Herstel voorkeure',
-'textboxsize' => 'Wysiging',
-'prefs-edit-boxsize' => 'Afmetings van die wysigingsvenster.',
-'rows' => 'Rye',
-'columns' => 'Kolomme',
-'searchresultshead' => 'Soekresultate',
-'resultsperpage' => 'Aantal resultate om te wys',
-'contextlines' => 'Aantal lyne per resultaat',
-'contextchars' => 'Karakters konteks per lyn',
-'stub-threshold' => 'Drempel vir merk as <a href="#" class="stub">saadjie</a> (grepe):',
-'recentchangesdays' => 'Aantal dae wat in onlangse wysigings vertoon word:',
-'recentchangesdays-max' => '(maksimum $1 {{PLURAL:$1|dag|dae}})',
-'recentchangescount' => 'Aantal titels in onlangse wysigings',
-'savedprefs' => 'U voorkeure is gestoor.',
-'timezonelegend' => 'Tydsone:',
-'timezonetext' => 'Aantal ure waarmee plaaslike tyd van UTC verskil.',
-'localtime' => 'Plaaslike tyd:',
-'timezoneselect' => 'Tydsone:',
-'timezoneuseserverdefault' => 'Bedienerverstek',
-'timezoneuseoffset' => 'Ander (spesifiseer tydsverskil)',
-'timezoneoffset' => 'Tydsverskil¹:',
-'servertime' => 'Bedienertyd:',
-'guesstimezone' => 'Vul in vanaf webblaaier',
-'timezoneregion-africa' => 'Afrika',
-'timezoneregion-america' => 'Amerika',
-'timezoneregion-antarctica' => 'Antarktika',
-'timezoneregion-arctic' => 'Arktiese gebied',
-'timezoneregion-asia' => 'Asië',
-'timezoneregion-atlantic' => 'Atlantiese Oseaan',
-'timezoneregion-australia' => 'Australië',
-'timezoneregion-europe' => 'Europa',
-'timezoneregion-indian' => 'Indiese Oseaan',
-'timezoneregion-pacific' => 'Stille Oseaan',
-'allowemail' => 'Laat e-pos van ander toe',
-'prefs-searchoptions' => 'Soekopsies',
-'prefs-namespaces' => 'Naamruimtes',
-'defaultns' => 'Verstek naamruimtes vir soektog:',
-'default' => 'verstek',
-'files' => 'Lêers',
-'prefs-custom-css' => 'Persoonlike CSS',
-'prefs-custom-js' => 'Persoonlike JS',
+'preferences' => 'Voorkeure',
+'mypreferences' => 'My voorkeure',
+'prefs-edits' => 'Aantal wysigings:',
+'prefsnologin' => 'Nie ingeteken nie',
+'prefsnologintext' => 'U moet <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} aanteken] om voorkeure te kan verander.',
+'changepassword' => 'Verander wagwoord',
+'prefs-skin' => 'Omslag',
+'skin-preview' => 'Voorskou',
+'prefs-math' => 'Wiskunde',
+'datedefault' => 'Geen voorkeur',
+'prefs-datetime' => 'Datum en tyd',
+'prefs-personal' => 'Gebruikersdata',
+'prefs-rc' => 'Onlangse wysigings',
+'prefs-watchlist' => 'Dophoulys',
+'prefs-watchlist-days' => 'Aantal dae om in dophoulys te wys:',
+'prefs-watchlist-days-max' => 'Maksimum 7 dae',
+'prefs-watchlist-edits' => 'Aantal wysigings om in uitgebreide dophoulys te wys:',
+'prefs-watchlist-edits-max' => 'Maksimum aantal: 1000',
+'prefs-watchlist-token' => 'Dophoulys-sleutel:',
+'prefs-misc' => 'Allerlei',
+'prefs-resetpass' => 'Verander wagwoord',
+'prefs-email' => 'E-posopsies',
+'prefs-rendering' => 'Voorkoms',
+'saveprefs' => 'Stoor voorkeure',
+'resetprefs' => 'Herstel voorkeure',
+'restoreprefs' => 'Herstel voorkeure',
+'prefs-editing' => 'Wysigings',
+'prefs-edit-boxsize' => 'Afmetings van die wysigingsvenster.',
+'rows' => 'Rye',
+'columns' => 'Kolomme',
+'searchresultshead' => 'Soekresultate',
+'resultsperpage' => 'Aantal resultate om te wys',
+'contextlines' => 'Aantal lyne per resultaat',
+'contextchars' => 'Karakters konteks per lyn',
+'stub-threshold' => 'Drempel vir merk as <a href="#" class="stub">saadjie</a> (grepe):',
+'recentchangesdays' => 'Aantal dae wat in onlangse wysigings vertoon word:',
+'recentchangesdays-max' => 'Maksimum $1 {{PLURAL:$1|dag|dae}}',
+'recentchangescount' => 'Aantal wysigings om by verstek te vertoon:',
+'prefs-help-recentchangescount' => 'Dit geld vir onlangse wysigings, bladsygeskiedenis en logboekbladsye.',
+'prefs-help-watchlist-token' => "Deur 'n geheime sleutel hier in te sleutel word 'n RSS-voer vir u dophoulys geskep.
+Enige een wat die sleutel ken sal u dophoulys kan lees. Kies dus 'n veilige sleutel.
+Hier volg 'n lukraak gegenereerde waarde wat u kan gebruik: $1",
+'savedprefs' => 'U voorkeure is gestoor.',
+'timezonelegend' => 'Tydsone:',
+'localtime' => 'Plaaslike tyd:',
+'timezoneuseserverdefault' => 'Bedienerverstek',
+'timezoneuseoffset' => 'Ander (spesifiseer tydsverskil)',
+'timezoneoffset' => 'Tydsverskil¹:',
+'servertime' => 'Bedienertyd:',
+'guesstimezone' => 'Vul in vanaf webblaaier',
+'timezoneregion-africa' => 'Afrika',
+'timezoneregion-america' => 'Amerika',
+'timezoneregion-antarctica' => 'Antarktika',
+'timezoneregion-arctic' => 'Arktiese gebied',
+'timezoneregion-asia' => 'Asië',
+'timezoneregion-atlantic' => 'Atlantiese Oseaan',
+'timezoneregion-australia' => 'Australië',
+'timezoneregion-europe' => 'Europa',
+'timezoneregion-indian' => 'Indiese Oseaan',
+'timezoneregion-pacific' => 'Stille Oseaan',
+'allowemail' => 'Laat e-pos van ander toe',
+'prefs-searchoptions' => 'Soekopsies',
+'prefs-namespaces' => 'Naamruimtes',
+'defaultns' => 'Anders soek in hierdie naamruimtes:',
+'default' => 'verstek',
+'prefs-files' => 'Lêers',
+'prefs-custom-css' => 'Persoonlike CSS',
+'prefs-custom-js' => 'Persoonlike JS',
+'prefs-reset-intro' => 'U kan die blad gebruik om u voorkeure terug te stel na die webwerf se verstekwaardes.
+Die aksie kan nie ongedaan gemaak word nie.',
+'prefs-emailconfirm-label' => 'E-posbevestiging:',
+'prefs-textboxsize' => 'Afmetings van die wysigingsvenster',
+'youremail' => 'E-pos',
+'username' => 'Gebruikersnaam:',
+'uid' => 'Gebruiker-ID:',
+'prefs-memberingroups' => 'Lid van {{PLURAL:$1|groep|groepe}}:',
+'prefs-registration' => 'Registrasiedatum:',
+'yourrealname' => 'Regte naam:',
+'yourlanguage' => 'Taal:',
+'yournick' => 'Bynaam (vir handtekening)',
+'prefs-help-signature' => 'Kommentaar op besprekingsbladsye moet met "<nowiki>~~~~</nowiki>" onderteken word.
+Die tildes word in u handtekening omgeskakel en die datum en tyd word insluit.',
+'badsig' => 'Ongeldige handtekening; gaan HTML na.',
+'badsiglength' => 'U handtekening is te lank.
+Dit mag nie meer as $1 {{PLURAL:$1|karakter|karakters}} bevat nie.',
+'yourgender' => 'Geslag:',
+'gender-unknown' => 'Nie gespesifiseer',
+'gender-male' => 'Man',
+'gender-female' => 'Vrou',
+'prefs-help-gender' => 'Opsioneel: dit word gebruik om gebruikers korrek aan te spreek in die sagteware.
+Die inligting is vir ander gebruikers sigbaar.',
+'email' => 'E-pos',
+'prefs-help-realname' => 'Regte naam (opsioneel): as u hierdie verskaf, kan dit gebruik word om erkenning vir u werk te gee.',
+'prefs-help-email' => 'E-posadres is opsioneel, maar maak dit moontlik om u wagwoord aan u te pos sou u dit vergeet.
+U kan ook besluit om e-pos te ontvang as ander gebruikers u gebruikers- of besprekingsblad wysig sonder om u identiteit te verraai.',
+'prefs-help-email-required' => 'E-pos adres word benodig.',
+'prefs-info' => 'Basiese inligting',
+'prefs-i18n' => 'Taalinstellings',
+'prefs-signature' => 'Handtekening',
+'prefs-dateformat' => 'Datumformaat',
+'prefs-timeoffset' => 'Tydsverskil',
+'prefs-advancedediting' => 'Gevorderde instellings',
+'prefs-advancedrc' => 'Gevorderde instellings',
+'prefs-advancedrendering' => 'Gevorderde instellings',
+'prefs-advancedsearchoptions' => 'Gevorderde instellings',
+'prefs-advancedwatchlist' => 'Gevorderde instellings',
+'prefs-display' => 'Vertoonopsies',
+'prefs-diffs' => 'Verskille',
# User rights
-'userrights' => 'Bestuur gebruikersregte', # Not used as normal message but as header for the special page itself
-'userrights-lookup-user' => 'Beheer gebruikersgroepe',
-'userrights-user-editname' => 'Voer gebruikersnaam in:',
-'editusergroup' => 'Wysig gebruikersgroepe',
-'editinguser' => "Besig om gebruikersregte van gebruiker '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]]) te wysig",
-'userrights-editusergroup' => 'wysig gebruikersgroepe',
-'saveusergroups' => 'Stoor gebruikersgroepe',
-'userrights-groupsmember' => 'Lid van:',
-'userrights-groups-help' => "U kan die groepe waarvan die gebruiker 'n lid is verander.
+'userrights' => 'Bestuur gebruikersregte',
+'userrights-lookup-user' => 'Beheer gebruikersgroepe',
+'userrights-user-editname' => 'Voer gebruikersnaam in:',
+'editusergroup' => 'Wysig gebruikersgroepe',
+'editinguser' => "Besig om gebruikersregte van gebruiker '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]]) te wysig",
+'userrights-editusergroup' => 'wysig gebruikersgroepe',
+'saveusergroups' => 'Stoor gebruikersgroepe',
+'userrights-groupsmember' => 'Lid van:',
+'userrights-groupsmember-auto' => 'Implisiete lid van:',
+'userrights-groups-help' => "U kan die groepe waarvan die gebruiker 'n lid is verander.
* 'n Geselekteerde boks beteken dat die gebruiker lid is van die groep.
* 'n Ongeselekteerde boks beteken dat die gebruiker nie 'n lid van die groep is nie.
* 'n Ster (*) beteken dat u nie die gebruiker uit 'n groep kan verwyder as hy eers daaraan behoort nie, of vice versa.",
-'userrights-reason' => 'Rede:',
-'userrights-no-interwiki' => 'U het nie toestemming om gebruikersregte op ander wikis te verander nie.',
-'userrights-nodatabase' => 'Databasis $1 bestaan nie of is nie hier beskikbaar nie.',
-'userrights-nologin' => "U moet [[Special:UserLogin|aanteken]] as 'n administrateur om gebruikersregte te mag toeken.",
-'userrights-notallowed' => 'U het nie die toestemming om gebruikersregte toe te ken nie.',
-'userrights-changeable-col' => 'Groepe wat u kan verander',
-'userrights-unchangeable-col' => 'Groepe wat u nie kan verander nie',
+'userrights-reason' => 'Rede:',
+'userrights-no-interwiki' => 'U het nie toestemming om gebruikersregte op ander wikis te verander nie.',
+'userrights-nodatabase' => 'Databasis $1 bestaan nie of is nie hier beskikbaar nie.',
+'userrights-nologin' => "U moet [[Special:UserLogin|aanteken]] as 'n administrateur om gebruikersregte te mag toeken.",
+'userrights-notallowed' => 'U het nie die toestemming om gebruikersregte toe te ken nie.',
+'userrights-changeable-col' => 'Groepe wat u kan verander',
+'userrights-unchangeable-col' => 'Groepe wat u nie kan verander nie',
# Groups
'group' => 'Groep:',
@@ -1235,6 +1352,7 @@ stel asseblief op volgens die beskrywing in math/README.',
'right-bigdelete' => 'Skrap bladsye met groot geskiedenisse',
'right-deleterevision' => 'Skrap en ontskrap spesifieke hersienings van bladsye',
'right-deletedhistory' => 'Wys geskrapte geskiedenis-inskrywings, sonder hul teks',
+'right-deletedtext' => 'Wys verwyderde teks en veranderings tussen geskrapte weergawes',
'right-browsearchive' => 'Soek uigeveede bladsye',
'right-undelete' => "Ontskrap 'n bladsy",
'right-suppressrevision' => 'Hersien en herstel weergawes verborge van administrateurs',
@@ -1248,6 +1366,8 @@ stel asseblief op volgens die beskrywing in math/README.',
'right-editprotected' => 'Wysig beskermde bladsye (sonder kaskade-beskerming)',
'right-editinterface' => 'Wysig die gebruikerskoppelvlak',
'right-editusercssjs' => 'Wysig ander gebruikers se CSS- en JS-lêers',
+'right-editusercss' => 'Wysig ander gebruikers se CSS-lêers',
+'right-edituserjs' => 'Wysig ander gebruikers se JS-lêers',
'right-rollback' => "Rol wysigings van die laaste gebruiker wat 'n bladsy gewysig het vinnig terug",
'right-markbotedits' => 'Merk teruggerolde wysigings as botbywerkings',
'right-noratelimit' => 'Negeer tydsafhanklike beperkings',
@@ -1264,6 +1384,8 @@ stel asseblief op volgens die beskrywing in math/README.',
'right-siteadmin' => 'Sluit en ontsluit die datbasis',
'right-reset-passwords' => 'Herstel ander gebruikers se wagwoorde',
'right-override-export-depth' => "Eksporteer bladsye insluitend geskakelde bladsye tot 'n diepte van 5",
+'right-versiondetail' => 'Wys omvattende sagteware weergawe inligting',
+'right-sendemail' => 'Stuur e-pos aan ander gebruikers',
# User rights log
'rightslog' => 'Gebruikersregtelogboek',
@@ -1313,6 +1435,15 @@ stel asseblief op volgens die beskrywing in math/README.',
'recentchanges-legend' => 'Opsies vir onlangse wysigings',
'recentchangestext' => 'Volg die mees onlangse wysigings aan die wiki op die bladsy.',
'recentchanges-feed-description' => 'Spoor die mees onlangse wysigings op die wiki na in die voer.',
+'recentchanges-label-legend' => 'Sleutel: $1.',
+'recentchanges-legend-newpage' => '$1 - nuwe bladsy',
+'recentchanges-label-newpage' => "Met die wysiging is 'n nuwe bladsy geskep",
+'recentchanges-legend-minor' => '$1 - klein wysiging',
+'recentchanges-label-minor' => "Hierdie is 'n klein wysiging",
+'recentchanges-legend-bot' => '$1 - botbywerking',
+'recentchanges-label-bot' => "Hierdie wysiging was deur 'n bot uitgevoer",
+'recentchanges-legend-unpatrolled' => '$1 - ongekontroleerde wysiging',
+'recentchanges-label-unpatrolled' => 'Die wysiging is nog nie gekontroleer nie',
'rcnote' => "Hier volg die laaste {{PLURAL:$1|'''$1''' wysiging|'''$1''' wysigings}} vir die afgelope {{PLURAL:$2|dag|'''$2''' dae}}, soos vanaf $4, $5.",
'rcnotefrom' => 'Hier onder is die wysigings sedert <b>$2</b> (tot by <b>$1</b> word gewys).',
'rclistfrom' => 'Vertoon wysigings vanaf $1',
@@ -1339,6 +1470,8 @@ stel asseblief op volgens die beskrywing in math/README.',
# Recent changes linked
'recentchangeslinked' => 'Verwante veranderings',
+'recentchangeslinked-feed' => 'Verwante veranderings',
+'recentchangeslinked-toolbox' => 'Verwante veranderings',
'recentchangeslinked-title' => 'Wysigings verwant aan "$1"',
'recentchangeslinked-noresult' => 'Geen veranderinge op geskakelde bladsye gedurende die periode nie.',
'recentchangeslinked-summary' => "Hier volg 'n lys van wysigings wat onlangs gemaak is aan bladsye wat van die gespesifiseerde bladsy geskakel word (of van bladsye van die gespesifiseerde kategorie).
@@ -1349,8 +1482,8 @@ Bladsye op [[Special:Watchlist|u dophoulys]] word in '''vetdruk''' uitgewys.",
# Upload
'upload' => 'Laai lêer',
'uploadbtn' => 'Laai lêer',
-'reupload' => 'Herlaai',
'reuploaddesc' => 'Keer terug na die laaivorm.',
+'upload-tryagain' => 'Stuur gewysigde lêerbeskrywing',
'uploadnologin' => 'Nie ingeteken nie',
'uploadnologintext' => 'Teken eers in [[Special:UserLogin|logged in]]
om lêers te laai.',
@@ -1390,6 +1523,7 @@ Om die lêer in 'n artikel te gebruik, plaas 'n skakel in een van die volgende f
'minlength1' => 'Prentname moet ten minste een letter lank wees.',
'illegalfilename' => 'Die lêernaam "$1" bevat karakters wat nie toegelaat word in bladsytitels nie. Verander asseblief die naam en probeer die lêer weer laai.',
'badfilename' => 'Prentnaam is verander na "$1".',
+'filetype-mime-mismatch' => 'Lêer-uitbreiding stem nie met die MIME-tipe ooreen nie.',
'filetype-badmime' => 'Lêers met MIME-tipe "$1" word nie toegelaat nie.',
'filetype-bad-ie-mime' => 'Die lêer kan nie opgelaai word nie omdat Internet Explorer dit sal identifiseer as "$1", \'n nie toegelate lêertipe wat moontlik skadelik is.',
'filetype-unwanted-type' => "'''\".\$1\"''' is 'n ongewenste lêertipe.
@@ -1411,7 +1545,6 @@ Wysig asseblief die bladsy handmatig om u beskrywing by te werk.
* Naam van die opgelaaide lêer: '''<tt>[[:$1]]</tt>'''
* Naam van die bestaande lêer: '''<tt>[[:$2]]</tt>'''
Kies asseblief 'n ander naam.",
-'fileexists-thumb' => "<center>'''Bestaande lêer'''</center>",
'fileexists-thumbnail-yes' => "Die lêer lyk na 'n verkleinde weergawe ''(duimnael)''.
[[$1|thumb]]
Kontroleer asseblief die lêer '''<tt>[[:$1]]</tt>'''.
@@ -1431,6 +1564,7 @@ Indien u die lêer nog wil oplaai, gaan asseblief terug en kies 'n ander naam.
Dit word aanbeveel dat u die lêer se skrapgeskiedenis besigtig voor u poog om dit weer op te laai.",
'successfulupload' => 'Laai suksesvol',
'uploadwarning' => 'Laaiwaarskuwing',
+'uploadwarning-text' => 'Verander die onderstaande lêerbeskrywing en probeer dan weer.',
'savefile' => 'Stoor lêer',
'uploadedimage' => 'het "[[$1]]" gelaai',
'overwroteimage' => 'het een nuwe weergawe van "[[$1]]" gelaai',
@@ -1439,11 +1573,14 @@ Dit word aanbeveel dat u die lêer se skrapgeskiedenis besigtig voor u poog om d
'php-uploaddisabledtext' => 'Die oplaai van lêers is in PHP afgeskakel.
Kyk na die "file_uploads"-instelling.',
'uploadscripted' => "Hierdie lêer bevat HTML- en scriptkode wat verkeerdelik deur 'n webblaaier geïnterpreteer kan word.",
-'uploadcorrupt' => "Die lêer is foutief of is van 'n verkeerde tipe. Gaan asseblief die lêer na en laai weer op.",
'uploadvirus' => "Hierdie lêer bevat 'n virus! Inligting: $1",
+'upload-source' => 'Bronlêer',
'sourcefilename' => 'Bronlêernaam:',
+'sourceurl' => 'Bron-URL:',
'destfilename' => 'Teikenlêernaam:',
'upload-maxfilesize' => 'Maksimum lêer grootte: $1',
+'upload-description' => 'Lêerbeskrywing',
+'upload-options' => 'Oplaai-opsies',
'watchthisupload' => 'Hou die lêer dop',
'filewasdeleted' => "'n Lêer met hierdie naam is al voorheen opgelaai en daarna geskrap.
Kyk asseblief na die $1 voor u aangaan om dit weer op te laai.",
@@ -1454,15 +1591,46 @@ Die verwyderingsinligting van die lêer word vir u gemak hier herhaal:",
'filename-bad-prefix' => "Die naam van die lêer wat u besig is om op te laai begin met '''\"\$1\"''', wat 'n nie-beskrywende term is, gewoonlik outomaties toegedien deur digitale kameras.
Kies asseblief 'n meer beskrywende naam vir die lêer.",
-'upload-proto-error' => 'Verkeerde protokol',
-'upload-proto-error-text' => 'Oplaaie via hierdie metode vereis dat die URL met <code>http://</code> of <code>ftp://</code> begin.',
-'upload-file-error' => 'Interne fout',
-'upload-file-error-text' => "'n Interne fout het plaasgevind in die poging om 'n tydelike lêer op die bediener te skep.
+'upload-proto-error' => 'Verkeerde protokol',
+'upload-proto-error-text' => 'Oplaaie via hierdie metode vereis dat die URL met <code>http://</code> of <code>ftp://</code> begin.',
+'upload-file-error' => 'Interne fout',
+'upload-file-error-text' => "'n Interne fout het plaasgevind in die poging om 'n tydelike lêer op die bediener te skep.
Kontak asseblief 'n [[Special:ListUsers/sysop|administrateur]].",
-'upload-misc-error' => 'Onbekende laai fout',
-'upload-misc-error-text' => "'n Onbekende fout het tydens die oplaaiproses voorgekom.
+'upload-misc-error' => 'Onbekende laai fout',
+'upload-misc-error-text' => "'n Onbekende fout het tydens die oplaaiproses voorgekom.
Maak asseblief seker dat die adres (URL) geldig en toeganklik is en probeer dan weer.
As daar steeds probleme is, kontak 'n [[Special:ListUsers/sysop|administrateur]].",
+'upload-too-many-redirects' => 'Die URL bevat te veel aansture',
+'upload-unknown-size' => 'Onbekende grootte',
+'upload-http-error' => "'n HTTP-fout het voorgekom: $1",
+
+# img_auth script messages
+'img-auth-accessdenied' => 'Toegang geweier',
+'img-auth-nopathinfo' => 'PATH_INFO word vermis.
+U bediener is nie ingestel om hierdie inligting deur te stuur nie.
+Miskien gebruik dit CGI, waartydens img_auth nie ondersteun word nie.
+Sien http://www.mediawiki.org/wiki/Manual:Image_Authorization vir meer inligting.',
+'img-auth-notindir' => 'Die aangevraagde pad is nie die ingestelde oplaaigids nie.',
+'img-auth-badtitle' => 'Dit was nie moontlik om \'n geldige bladsynaam van "$1" te maak nie.',
+'img-auth-nologinnWL' => 'U is nie aangeteken en "$1" is nie op die witlys nie.',
+'img-auth-nofile' => 'Lêer "$1" bestaan nie.',
+'img-auth-isdir' => 'U probeer om toegang na gids "$1" te kry.
+Slegs toegang tot lêers word toegelaat.',
+'img-auth-streaming' => 'Besig met die stoom van "$1".',
+'img-auth-public' => "Die doel van img_auth.php is die afvoer van lêers vanaf 'n privaat wiki.
+Hierdie wiki is opgestel as 'n publieke wiki.
+Vir veiligheidsredes is img_auth.php gedeaktiveer.",
+'img-auth-noread' => 'Gebruiker het nie toegang om "$1" te lees nie.',
+
+# HTTP errors
+'http-invalid-url' => 'Ongeldige URL: $1',
+'http-invalid-scheme' => 'URL\'s met die "$1"-skema word nie ondersteun nie',
+'http-request-error' => "'n Onbekende fout het tydens die stuur van die versoek voorgekom.",
+'http-read-error' => 'Fout met die lees van HTTP.',
+'http-timed-out' => 'HTTP-versoek se tyd is verstreke.',
+'http-curl-error' => 'Fout met die ophaal van URL: $1',
+'http-host-unreachable' => 'Die URL is nie bereikbaar nie.',
+'http-bad-status' => "Daar was 'n probleem tydens die HTTP-versoek: $1 $2",
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => 'Kon nie die URL bereik nie',
@@ -1474,6 +1642,7 @@ Kontroleer of die webwerf wel beskikbaar is of wag 'n rukkie en probeer dan weer
U kan miskien selfs tydens 'n minder besige tyd weer probeer.",
'license' => 'Lisensiëring:',
+'license-header' => 'Lisensiëring',
'nolicense' => 'Niks gekies',
'license-nopreview' => '(Voorskou nie beskikbaar)',
'upload_source_url' => " ('n geldige, publiek toeganklike URL)",
@@ -1494,6 +1663,7 @@ Klik op die opskrifte om die tabel anders te sorteer.',
'listfiles_count' => 'Weergawes',
# File description page
+'file-anchor-link' => 'Lêer',
'filehist' => 'Lêergeskiedenis',
'filehist-help' => 'Klik op die datum/tyd om te sien hoe die lêer destyds gelyk het.',
'filehist-deleteall' => 'verwyder alles',
@@ -1508,6 +1678,7 @@ Klik op die opskrifte om die tabel anders te sorteer.',
'filehist-dimensions' => 'Dimensies',
'filehist-filesize' => 'Lêergrootte',
'filehist-comment' => 'Opmerking',
+'filehist-missing' => 'Die lêer kon nie gevind word nie',
'imagelinks' => 'Lêerskakels',
'linkstoimage' => 'Die volgende {{PLURAL:$1|bladsy|$1 bladsye}} gebruik hierdie prent:',
'linkstoimage-more' => "Daar is meer as $1 {{PLURAL:$1|skakel|skakels}} na hierdie lêer.
@@ -1517,15 +1688,16 @@ Die volgende lys vertoon slegs die eerste {{PLURAL:$1|skakel|$1 skakels}} wat na
'morelinkstoimage' => 'Wys [[Special:WhatLinksHere/$1|meer skakels]] na die lêer.',
'redirectstofile' => "Die volgende {{PLURAL:$1|lêer is 'n aanstuur|$1 lêers is aansture}} na die lêer:",
'duplicatesoffile' => "Die volgende {{PLURAL:$1|lêer is 'n duplikaat|$1 lêers is duplikate}} van die lêer ([[Special:FileDuplicateSearch/$2|meer details]]):",
-'sharedupload' => 'Die lêer kom vanaf $1 en mag moontlik ook op ander projekte gebruik word.', # $1 is the repo name, $2 is shareduploadwiki(-desc)
-'shareduploadwiki' => 'Sien $1 vir verdere inligting.',
-'shareduploadwiki-desc' => 'Die beskrywing in die $1 uit die gedeelde lêerbank word hier onder weergegee.',
-'shareduploadwiki-linktext' => 'lêerbeskrywingsbladsy',
-'noimage' => "Daar bestaan nie 'n lêer met so 'n naam nie, maar u kan $1.",
-'noimage-linktext' => 'laai een op',
+'sharedupload' => 'Die lêer kom vanaf $1 en mag moontlik ook op ander projekte gebruik word.',
+'sharedupload-desc-there' => 'Hierdie lêer kom vanaf $1 en kan ook in ander projekte gebruik word.
+Sien die [$2 lêer se beskrywingsblad] vir meer inligting.',
+'sharedupload-desc-here' => 'Hierdie lêer kom vanaf $1 en kan ook in ander projekte gebruik word.
+Die beskrywing op die [$2 lêer se inligtingsblad] word hieronder weergegee.',
+'filepage-nofile' => "Daar bestaan nie 'n lêer met die naam nie.",
+'filepage-nofile-link' => "Daar bestaan nie 'n lêer met die naam nie, maar u kan een [$1 oplaai].",
'uploadnewversion-linktext' => "Laai 'n nuwe weergawe van hierdie lêer",
-'shared-repo-from' => 'vanaf $1', # $1 is the repository name
-'shared-repo' => "'n gedeelde lêerbank", # used when shared-repo-NAME does not exist
+'shared-repo-from' => 'vanaf $1',
+'shared-repo' => "'n gedeelde lêerbank",
# File reversion
'filerevert' => 'Maak $1 ongedaan',
@@ -1554,6 +1726,7 @@ Die volgende lys vertoon slegs die eerste {{PLURAL:$1|skakel|$1 skakels}} wat na
** Kopieregskending
** Duplikaatlêer',
'filedelete-edit-reasonlist' => 'Wysig skrap redes',
+'filedelete-maintenance' => 'Die verwydering en terugplasing van lêers is tydelik opgeskort weens onderhoud.',
# MIME search
'mimesearch' => 'MIME-soek',
@@ -1574,7 +1747,7 @@ Die volgende lys vertoon slegs die eerste {{PLURAL:$1|skakel|$1 skakels}} wat na
# Random page
'randompage' => 'Lukrake bladsy',
-'randompage-nopages' => 'Daar is geen bladye in naamspasie "$1".',
+'randompage-nopages' => 'Daar is geen bladye in die volgende {{PLURAL:$2|naamspasie|naamspasies}}: $1.',
# Random redirect
'randomredirect' => 'Lukrake aanstuur',
@@ -1586,6 +1759,7 @@ Die volgende lys vertoon slegs die eerste {{PLURAL:$1|skakel|$1 skakels}} wat na
'statistics-header-edits' => 'Wysig statistieke',
'statistics-header-views' => 'Wys statistieke',
'statistics-header-users' => 'Gebruikerstatistiek',
+'statistics-header-hooks' => 'Ander statistieke',
'statistics-articles' => 'Inhoudelike bladsye',
'statistics-pages' => 'Bladsye',
'statistics-pages-desc' => 'Alle bladsye in die wiki, insluitend besprekings-, aanstuur- en ander bladsye.',
@@ -1615,8 +1789,8 @@ Elke ry bevat skakels na die eerste en die tweede aanstuur, asook die eerste re
'brokenredirects' => 'Stukkende aansture',
'brokenredirectstext' => 'Die volgende aansture skakel na bladsye wat nie bestaan nie.',
-'brokenredirects-edit' => '(wysig)',
-'brokenredirects-delete' => '(skrap)',
+'brokenredirects-edit' => 'wysig',
+'brokenredirects-delete' => 'skrap',
'withoutinterwiki' => 'Bladsye sonder taalskakels',
'withoutinterwiki-summary' => 'Die volgende bladsye het nie skakels na weergawes in ander tale nie:',
@@ -1725,14 +1899,17 @@ Dit is moontlik dat die naam karakters bevat wat nie in titels gebruik mag word
# Special:Categories
'categories' => 'Kategorieë',
-'categoriespagetext' => 'Die volgende kategorieë bestaan op die wiki.',
+'categoriespagetext' => 'Die volgende {{PLURAL:$1|kategorie|kategorieë}} bevat bladsye of media.
+[[Special:UnusedCategories|Ongebruikte kategorieë]] word nie hier weergegee nie.
+Sie ook [[Special:WantedCategories|nie-bestaande kategorieë met verwysings]].',
'categoriesfrom' => 'Wys kategorieë vanaf:',
'special-categories-sort-count' => 'sorteer volgens getal',
'special-categories-sort-abc' => 'sorteer alfabeties',
# Special:DeletedContributions
-'deletedcontributions' => 'Geskrapte gebruikersbydraes',
-'deletedcontributions-title' => 'Geskrapte gebruikersbydraes',
+'deletedcontributions' => 'Geskrapte gebruikersbydraes',
+'deletedcontributions-title' => 'Geskrapte gebruikersbydraes',
+'sp-deletedcontributions-contribs' => 'bydraes',
# Special:LinkSearch
'linksearch' => 'Eksterne skakels',
@@ -1748,6 +1925,16 @@ Ondersteunde protokolle: <tt>$1</tt>',
'listusersfrom' => 'Wys gebruikers, beginnende by:',
'listusers-submit' => 'Wys',
'listusers-noresult' => 'Geen gebruiker gevind.',
+'listusers-blocked' => '(geblokkeer)',
+
+# Special:ActiveUsers
+'activeusers' => 'Aktiewe gebruikers',
+'activeusers-intro' => "Hierdie is 'n lys van gebruikers wat die laaste {{PLURAL:$1|dag|$1 dae}} enige aktiwiteit getoon het.",
+'activeusers-count' => '$1 onlangse {{PLURAL:$1|wysiging|wysigings}} in die {{PLURAL:$3|afgelope dag|laatste $3 dae}}',
+'activeusers-from' => 'Wys gebruikers, beginnende by:',
+'activeusers-hidebots' => 'Versteek bots',
+'activeusers-hidesysops' => 'Versteek administrateurs',
+'activeusers-noresult' => 'Geen gebruikers gevind nie.',
# Special:Log/newusers
'newuserlogpage' => 'Logboek van nuwe gebruikers',
@@ -1758,17 +1945,23 @@ Ondersteunde protokolle: <tt>$1</tt>',
'newuserlog-autocreate-entry' => 'Gebruiker outomaties geskep',
# Special:ListGroupRights
-'listgrouprights' => 'Gebruikersgroepregte',
-'listgrouprights-summary' => "Hier volg 'n lys van gebruikersgroepe met hulle ooreenstemmende regte wat op die wiki gedefinieer is.
+'listgrouprights' => 'Gebruikersgroepregte',
+'listgrouprights-summary' => "Hier volg 'n lys van gebruikersgroepe met hulle ooreenstemmende regte wat op die wiki gedefinieer is.
Daar kan [[{{MediaWiki:Listgrouprights-helppage}}|extra inligting]] oor individuele regte aanwesig wees.",
-'listgrouprights-group' => 'Groep',
-'listgrouprights-rights' => 'Regte',
-'listgrouprights-helppage' => 'Help:Groep regte',
-'listgrouprights-members' => '(lys van lede)',
-'listgrouprights-addgroup' => 'Gebruikers by die volgende {{PLURAL:$2|groep|groepe}} byvoeg: $1',
-'listgrouprights-removegroup' => 'Gebruikers uit die volgende {{PLURAL:$2|groep|groepe}} verwyder: $1',
-'listgrouprights-addgroup-all' => 'Gebruikers van alle groepe byvoeg',
-'listgrouprights-removegroup-all' => 'Gebruikers uit alle groepe verwyder',
+'listgrouprights-key' => '* <span class="listgrouprights-granted">Toegekende regte</span>
+* <span class="listgrouprights-revoked">Teruggetrekte regte</span>',
+'listgrouprights-group' => 'Groep',
+'listgrouprights-rights' => 'Regte',
+'listgrouprights-helppage' => 'Help:Groep regte',
+'listgrouprights-members' => '(lys van lede)',
+'listgrouprights-addgroup' => 'Gebruikers by die volgende {{PLURAL:$2|groep|groepe}} byvoeg: $1',
+'listgrouprights-removegroup' => 'Gebruikers uit die volgende {{PLURAL:$2|groep|groepe}} verwyder: $1',
+'listgrouprights-addgroup-all' => 'Gebruikers van alle groepe byvoeg',
+'listgrouprights-removegroup-all' => 'Gebruikers uit alle groepe verwyder',
+'listgrouprights-addgroup-self' => 'Die volgende {{PLURAL:$2|groep|groepe}} byvoeg tot eie gebruiker: $1',
+'listgrouprights-removegroup-self' => 'Die volgende {{PLURAL:$2|groep|groepe}} verwyder van eie gebruiker: $1',
+'listgrouprights-addgroup-self-all' => 'Alle groepe byvoeg tot eie gebruiker',
+'listgrouprights-removegroup-self-all' => 'Alle groepe verwyder van eie gebruiker',
# E-mail user
'mailnologin' => 'Geen versendadres beskikbaar',
@@ -1853,13 +2046,17 @@ Outeur se kontakdetails:
E-pos: $PAGEEDITOR_EMAIL
Wiki: $PAGEEDITOR_WIKI
-Tensy u hierdie bladsy besoek, sal u geen verdere kennisgewings ontvang nie. U kan ook die waarskuwingsvlag op u dophoulys verstel.
+Tensy u hierdie bladsy besoek, sal u geen verdere kennisgewings ontvang nie.
+U kan ook die waarskuwingsvlag op u dophoulys verstel.
- Groete van die {{SITENAME}} waarskuwingssisteem.
+ Groete van {{SITENAME}} se waarskuwingssisteem.
--
U kan u dophoulys wysig by:
-{{fullurl:Special:Watchlist/edit}}
+{{fullurl:{{#special:Watchlist}}/edit}}
+
+Om die bladsy vanaf u dophoulys te verwyder, besoek:
+$UNWATCHURL
Terugvoer en verdere bystand:
{{fullurl:{{MediaWiki:Helppage}}}}',
@@ -1873,10 +2070,11 @@ Terugvoer en verdere bystand:
'exblank' => 'bladsy was leeg',
'delete-confirm' => 'Skrap "$1"',
'delete-legend' => 'Skrap',
-'historywarning' => "Waarskuwing: Die bladsy het 'n geskiedenis:",
+'historywarning' => "'''Waarskuwing:''' Die bladsy wat u wil verwyder het 'n geskiedenis met ongeveer $1 {{PLURAL:$1|weergawe|weergawes}}:",
'confirmdeletetext' => "U staan op die punt om 'n bladsy of prent asook al hulle geskiedenis uit die databasis te skrap.
Bevestig asseblief dat u dit wil doen, dat u die gevolge verstaan en dat u dit doen in ooreenstemming met die [[{{MediaWiki:Policy-url}}]].",
'actioncomplete' => 'Aksie uitgevoer',
+'actionfailed' => 'Aksie het gefaal',
'deletedtext' => '"<nowiki>$1</nowiki>" is geskrap.
Kyk na $2 vir \'n rekord van onlangse skrappings.',
'deletedarticle' => '"$1" geskrap',
@@ -1900,19 +2098,20 @@ Deur weg te doen met hierdie bladsy mag dalk die werking van {{SITENAME}} verste
Tree asseblief versigtig op.",
# Rollback
-'rollback' => 'Rol veranderinge terug',
-'rollback_short' => 'Rol terug',
-'rollbacklink' => 'Rol terug',
-'rollbackfailed' => 'Terugrol onsuksesvol',
-'cantrollback' => 'Kan nie na verandering terug keer nie; die laaste bydraer is die enigste outer van hierdie bladsy.',
-'alreadyrolled' => "Dit is nie moontlik om die laaste wysiging van die bladsy [[:$1]] deur [[User:$2|$2]] ([[User talk:$2|bespreking]]{{int:pipe-separator}}[[Special:Contributions/$2|bydraes]]) ongedaan te maak nie.
+'rollback' => 'Rol veranderinge terug',
+'rollback_short' => 'Rol terug',
+'rollbacklink' => 'Rol terug',
+'rollbackfailed' => 'Terugrol onsuksesvol',
+'cantrollback' => 'Kan nie na verandering terug keer nie; die laaste bydraer is die enigste outer van hierdie bladsy.',
+'alreadyrolled' => "Dit is nie moontlik om die laaste wysiging van die bladsy [[:$1]] deur [[User:$2|$2]] ([[User talk:$2|bespreking]]{{int:pipe-separator}}[[Special:Contributions/$2|bydraes]]) ongedaan te maak nie.
Iemand anders het reeds hierdie bladsy gewysig of teruggerol na 'n vroeëre weergawe.
Die mees onlangse wysiging is gemaak deur [[User:$3|$3]] ([[User talk:$3|bespreking]]{{int:pipe-separator}}[[Special:Contributions/$3|bydraes]]).",
-'editcomment' => "Die wysigsopsomming was: \"''\$1''\".", # only shown if there is an edit comment
-'revertpage' => 'Wysigings deur [[Special:Contributions/$2|$2]] teruggerol na laaste weergawe deur $1', # Additionally available: $3: revid of the revision reverted to, $4: timestamp of the revision reverted to, $5: revid of the revision reverted from, $6: timestamp of the revision reverted from
-'rollback-success' => 'Wysigings deur $1 teruggerol; terugverander na laaste weergawe deur $2.',
-'sessionfailure' => "Dit lyk of daar 'n probleem met u sessie is.
+'editcomment' => "Die wysigsopsomming was: \"''\$1''\".",
+'revertpage' => 'Wysigings deur [[Special:Contributions/$2|$2]] teruggerol na laaste weergawe deur $1',
+'revertpage-nouser' => 'Rol wysigings deur (gebruikersnaam verwyder) terug na die laaste weergawe deur [[User:$1|$1]]',
+'rollback-success' => 'Wysigings deur $1 teruggerol; terugverander na laaste weergawe deur $2.',
+'sessionfailure' => "Dit lyk of daar 'n probleem met u sessie is.
Hierdie aksie is gekanselleer omdat dit 'n veiligheidsrisiko is (moontlike kaping van u sessie).
Gaan een bladsy terug, herlaai die bladsy en probeer dan weer.",
@@ -1931,7 +2130,7 @@ Sien die [[Special:ProtectedPages|lys van beveiligde bladsye]] vir alle bladsye
'protectexpiry' => 'Verval:',
'protect_expiry_invalid' => 'Vervaltyd is ongeldig.',
'protect_expiry_old' => 'Vervaltyd is in die verlede.',
-'protect-unchain' => 'Gee regte om te skuif',
+'protect-unchain-permissions' => 'Ontsluit verdere beskermingsopsies',
'protect-text' => "U kan die veiligheidsvlak vir blad '''<nowiki>$1</nowiki>''' hier bekyk of verander.",
'protect-locked-blocked' => "U kan nie beskermingsvlakke verander terwyl u geblok is nie.
Hier volg die huidige oprigtings vir die bladsy '''$1''':",
@@ -1960,7 +2159,7 @@ Hier is die huidige verstellings vir bladsy '''$1''':",
** Wysigingsoorlog
** Voorkomende beveiliging vir besige bladsye',
'protect-edit-reasonlist' => 'Wysig rede vir beveiliging',
-'protect-expiry-options' => '1 uur:1 hour,1 dag:1 day,1 week:1 week,2 weke:2 weeks,1 maand:1 month,3 maande:3 months,6 maande:6 months,1 jaar:1 year,onbeperk:infinite', # display1:time1,display2:time2,...
+'protect-expiry-options' => '1 uur:1 hour,1 dag:1 day,1 week:1 week,2 weke:2 weeks,1 maand:1 month,3 maande:3 months,6 maande:6 months,1 jaar:1 year,onbeperk:infinite',
'restriction-type' => 'Regte:',
'restriction-level' => 'Beperkingsvlak:',
'minimum-size' => 'Minimum grootte',
@@ -2002,6 +2201,7 @@ U mag moontlik 'n foutiewe skakel hê, of die weergawe is reeds herstel of uit d
'undelete-nodiff' => 'Geen vorige wysigings gevind.',
'undeletebtn' => 'Terugplaas',
'undeletelink' => 'bekyk/herstel',
+'undeleteviewlink' => 'bekyk',
'undeletereset' => 'Herinstel',
'undeleteinvert' => 'Omgekeerde seleksie',
'undeletecomment' => 'Rede:',
@@ -2040,19 +2240,23 @@ $1',
'contributions-title' => '$1 se bydraes',
'mycontris' => 'My bydraes',
'contribsub2' => 'Vir $1 ($2)',
-'nocontribs' => 'Geen veranderinge wat by hierdie kriteria pas, is gevind nie.', # Optional parameter: $1 is the user name
+'nocontribs' => 'Geen veranderinge wat by hierdie kriteria pas, is gevind nie.',
'uctop' => ' (boontoe)',
'month' => 'Vanaf maand (en vroeër):',
'year' => 'Vanaf jaar (en vroeër):',
-'sp-contributions-newbies' => 'Wys slegs bydraes van nuwe gebruikers',
-'sp-contributions-newbies-sub' => 'Vir nuwe gebruikers',
-'sp-contributions-newbies-title' => 'Bydraes van nuwe gebruikers',
-'sp-contributions-blocklog' => 'blokkeer-logboek',
-'sp-contributions-logs' => 'logboeke',
-'sp-contributions-search' => 'Soek na bydraes',
-'sp-contributions-username' => 'IP-adres of gebruikersnaam:',
-'sp-contributions-submit' => 'Vertoon',
+'sp-contributions-newbies' => 'Wys slegs bydraes van nuwe gebruikers',
+'sp-contributions-newbies-sub' => 'Vir nuwe gebruikers',
+'sp-contributions-newbies-title' => 'Bydraes van nuwe gebruikers',
+'sp-contributions-blocklog' => 'blokkeer-logboek',
+'sp-contributions-deleted' => 'geskrapte gebruikersbydraes',
+'sp-contributions-logs' => 'logboeke',
+'sp-contributions-talk' => 'bespreking',
+'sp-contributions-userrights' => 'bestuur gebruikersregte',
+'sp-contributions-blocked-notice' => 'Hierdie gebruiker is tans geblokkeer. Die laaste inskrywing in die blokkeerlogboek word hieronder vertoon:',
+'sp-contributions-search' => 'Soek na bydraes',
+'sp-contributions-username' => 'IP-adres of gebruikersnaam:',
+'sp-contributions-submit' => 'Vertoon',
# What links here
'whatlinkshere' => 'Skakels hierheen',
@@ -2075,6 +2279,7 @@ $1',
# Block/unblock
'blockip' => 'Blokkeer gebruiker',
+'blockip-title' => 'Blokkeer gebruiker',
'blockip-legend' => 'Blokkeer gebruiker of IP-adres',
'blockiptext' => "Gebruik die vorm hier onder om skryftoegang van 'n sekere IP-adres te blok.
Dit moet net gedoen word om vandalisme te voorkom en in ooreenstemming met [[{{MediaWiki:Policy-url}}|{{SITENAME}}-beleid]].
@@ -2098,7 +2303,7 @@ Vul 'n spesifieke rede hier onder in (haal byvoorbeeld spesifieke bladsye wat ge
'ipbenableautoblock' => 'Outomaties die IP-adresse van die gebruiker blokkeer',
'ipbsubmit' => 'Versper hierdie gebruiker',
'ipbother' => 'Ander tydperk:',
-'ipboptions' => '2 ure:2 hours,1 dag:1 day,3 dae:3 days,1 week:1 week,2 weke:2 weeks,1 maand:1 month,3 maande:3 months,6 maande:6 months,1 jaar:1 year,onbeperk:infinite', # display1:time1,display2:time2,...
+'ipboptions' => '2 ure:2 hours,1 dag:1 day,3 dae:3 days,1 week:1 week,2 weke:2 weeks,1 maand:1 month,3 maande:3 months,6 maande:6 months,1 jaar:1 year,onbeperk:infinite',
'ipbotheroption' => 'ander',
'ipbotherreason' => 'Ander/ekstra rede:',
'ipbhidename' => 'Verberg gebruiker van wysigings en lyste',
@@ -2127,9 +2332,11 @@ Sien die [[Special:IPBlockList|IP-bloklys]] vir 'n oorsig van blokkerings.",
'ipblocklist-sh-tempblocks' => 'tydelike blokkades $1',
'ipblocklist-sh-addressblocks' => 'enkel IP-blokkades $1',
'ipblocklist-submit' => 'Soek',
+'ipblocklist-localblock' => 'Lokale blokkade',
+'ipblocklist-otherblocks' => 'Ander {{PLURAL:$1|blokkade|blokkades}}',
'blocklistline' => '$1, $2 het $3 geblok ($4)',
'infiniteblock' => 'vir altyd',
-'expiringblock' => 'verval op $1',
+'expiringblock' => 'verval op $1 om $2',
'anononlyblock' => 'anoniem-alleen',
'noautoblockblock' => 'autoblok afgeskakel',
'createaccountblock' => 'skep van gebruikersrekeninge is geblokkeer',
@@ -2143,7 +2350,10 @@ Sien die [[Special:IPBlockList|IP-bloklys]] vir 'n oorsig van blokkerings.",
'contribslink' => 'bydraes',
'autoblocker' => "Outomaties geblokkeer omdat u IP-adres ooreenkom met die van [[User:\$1|\$1]], wat om die volgende rede geblokkeer is: \"'''\$2'''\"",
'blocklogpage' => 'Blokkeer-logboek',
-'blocklog-fulllog' => 'Volledige blokkeerlogboek',
+'blocklog-showlog' => 'Hierdie gebruiker is al vantevore geblokkeer.
+Die blokkeerlogboek word hieronder ter verwysing weergegee:',
+'blocklog-showsuppresslog' => 'Hierdie gebruiker was voorheen geblokkeer gewees en (dele van) wysigings van hierdie gebruiker is verborge.
+Die verbergingslogboek word hieronder ter verwysing weergegee:',
'blocklogentry' => '"[[$1]]" is vir \'n periode van $2 $3 geblok',
'reblock-logentry' => 'het die instellings vir die blokkade vir [[$1]] gewysig. Dit verval nou op $2 om $3',
'blocklogtext' => "Hier is 'n lys van onlangse blokkeer en deblokkeer aksies. Outomaties geblokkeerde IP-adresse word nie vertoon nie.
@@ -2164,11 +2374,13 @@ Sien die [[Special:IPBlockList|IP-bloklys]] vir geblokkeerde adresse.",
'ipb-needreblock' => '== Hierdie gebruiker is reeds geblokkeer ==
$1 is al geblokkeer.
Wil u die instellings wysig?',
+'ipb-otherblocks-header' => 'Ander {{PLURAL:$1|blokkade|blokkades}}',
'ipb_cant_unblock' => 'Fout: Blokkade-ID $1 kan nie gevind word nie.
Die blokkade is moontlik reeds opgehef.',
'ipb_blocked_as_range' => "Fout: die IP-adres $1 is nie direk geblokkeer nie en die blokkade kan nie opgehef word nie.
Die blokkade is 'n onderdeel van die reeks $2, waarvan die blokkade wel opgehef kan word.",
'ip_range_invalid' => 'Ongeldige IP waardegebied.',
+'ip_range_toolarge' => 'Reeks-blokkades groter as /$1 word nie toegelaat nie.',
'blockme' => 'Versper my',
'proxyblocker' => 'Proxyblokker',
'proxyblocker-disabled' => 'Die funksie is gedeaktiveer.',
@@ -2179,6 +2391,8 @@ Kontak asseblief u internet-diensverskaffer of tegniese ondersteuning en lig hul
'sorbs_create_account_reason' => "U IP-adres is gelys as 'n oop instaanbediener (proxy) in die DNS-swartlys wat op {{SITENAME}} gebruik word.
U kan nie 'n rekening skep nie.",
'cant-block-while-blocked' => 'U kan nie ander gebruikers blokkeer terwyl u self geblokkeer is nie.',
+'cant-see-hidden-user' => "Die gebruiker wat u probeer blokkeer is reeds geblokkeer en weggesteek.
+Aangesien u nie die 'hideuser'-reg het nie, kan u nie die blokkade van die gebruiker sien of wysig nie.",
# Developer tools
'lockdb' => 'Sluit databasis',
@@ -2219,6 +2433,8 @@ maak asseblief seker dat u die gevolge van hierdie aksie verstaan voordat u voor
Indien wel sal u self die blad moet skuif of versmelt (indien nodig).",
'movearticle' => 'Skuif bladsy',
+'moveuserpage-warning' => "'''Waarskuwing:''' U gaan 'n gebruikersblad skuif.
+Let daarop dat slegs die bladsy geskuif sal word. Die gebruiker self sal ''nie'' hernoem word ''nie''.",
'movenologin' => 'Nie ingeteken nie',
'movenologintext' => "U moet 'n geregistreerde gebruiker wees en [[Special:UserLogin|ingeteken]]
wees om 'n bladsy te skuif.",
@@ -2230,7 +2446,7 @@ wees om 'n bladsy te skuif.",
'move-watch' => 'Hou hierdie bladsy dop',
'movepagebtn' => 'Skuif bladsy',
'pagemovedsub' => 'Verskuiwing het geslaag',
-'movepage-moved' => '\'\'\'"$1" is geskuif na "$2"\'\'\'', # The two titles are passed in plain text as $3 and $4 to allow additional goodies in the message.
+'movepage-moved' => '\'\'\'"$1" is geskuif na "$2"\'\'\'',
'movepage-moved-redirect' => "'n Aanstuur is geskep.",
'movepage-moved-noredirect' => 'Geen aanstuurblad is geskep nie.',
'articleexists' => "'n Bladsy met daardie naam bestaan reeds, of die naam wat u gekies het, is nie geldig nie.
@@ -2272,6 +2488,13 @@ Die teikenartikel "[[:$1]]" bestaan reeds. Wil u dit skrap om plek te maak vir d
'imageinvalidfilename' => 'Die nuwe lêernaam is ongeldig',
'fix-double-redirects' => 'Opdateer alle aansture wat na die oorspronklike titel wys',
'move-leave-redirect' => "Los 'n aanstuur agter",
+'protectedpagemovewarning' => "'''Waarskuwing:''' Hierdie bladsy kan slegs deur administrateurs geskuif word. Die nuutste logboekinskrywing word hieronder ter verwysing vertoon:",
+'semiprotectedpagemovewarning' => "'''Let wel:''' Hierdie bladsy kan slegs deur geregistreerde gebruikers geskuif word. Die nuutste logboekinskrywing word hieronder ter verwysing vertoon:",
+'move-over-sharedrepo' => "== Die lêer bestaan reeds ==
+[[:$1]] bestaan al reeds in 'n gedeelde mediabank.
+As u 'n lêer na die naam skuif, sal die lêer in die gedeelde mediabank nie meer gebruik word nie.",
+'file-exists-sharedrepo' => "Hierdie lêernaam bestaan reeds in 'n gedeelde mediabank.
+Kies asseblief 'n andere lêernaam.",
# Export
'export' => 'Eksporteer bladsye',
@@ -2294,15 +2517,21 @@ In die laatste geval kan u ook \'n verwysing gebruik, byvoorbeeld [[{{#Special:E
'export-pagelinks' => "Sluit geskakelde bladsye by tot 'n diepte van:",
# Namespace 8 related
-'allmessages' => 'Stelselboodskappe',
-'allmessagesname' => 'Naam',
-'allmessagesdefault' => 'Verstekteks',
-'allmessagescurrent' => 'Huidige teks',
-'allmessagestext' => "Hier is 'n lys boodskappe wat in die ''MediaWiki''-naamspasie beskikbaar is.
+'allmessages' => 'Stelselboodskappe',
+'allmessagesname' => 'Naam',
+'allmessagesdefault' => 'Verstekteks',
+'allmessagescurrent' => 'Huidige teks',
+'allmessagestext' => "Hier is 'n lys boodskappe wat in die ''MediaWiki''-naamspasie beskikbaar is.
Gaan na [http://www.mediawiki.org/wiki/Localisation MediaWiki-lokalisasie] en [http://translatewiki.net translatewiki.net] as u wil help om MediaWiki te vertaal.",
-'allmessagesnotsupportedDB' => "Daar is geen ondersteuning vir '''{{ns:special}}:Allmessages''' omdat '''\$wgUseDatabaseMessages''' uitgeskakel is.",
-'allmessagesfilter' => 'Boodskapnaamfilter:',
-'allmessagesmodified' => 'Wys slegs gewysigdes',
+'allmessagesnotsupportedDB' => "Daar is geen ondersteuning vir '''{{ns:special}}:Allmessages''' omdat '''\$wgUseDatabaseMessages''' uitgeskakel is.",
+'allmessages-filter-legend' => 'Filter',
+'allmessages-filter' => 'Filtreer op staat van verandering:',
+'allmessages-filter-unmodified' => 'Onveranderd',
+'allmessages-filter-all' => 'Alle',
+'allmessages-filter-modified' => 'Verander',
+'allmessages-prefix' => 'Filter op voorvoegsel:',
+'allmessages-language' => 'Taal:',
+'allmessages-filter-submit' => 'Laat waai',
# Thumbnails
'thumbnail-more' => 'Vergroot',
@@ -2312,6 +2541,9 @@ Gaan na [http://www.mediawiki.org/wiki/Localisation MediaWiki-lokalisasie] en [h
'djvu_no_xml' => 'Die XML vir die DjVu-lêer kon nie bekom word nie',
'thumbnail_invalid_params' => 'Ongeldige parameters vir duimnaelskets',
'thumbnail_dest_directory' => 'Nie in staat om die gids te skep nie',
+'thumbnail_image-type' => 'Die lêertipe word nie ondersteun nie',
+'thumbnail_gd-library' => 'Onvolledige GD-biblioteek verstellings: die funksie $1 is weg',
+'thumbnail_image-missing' => 'Lêer blyk weg te wees: $1',
# Special:Import
'import' => 'Voer bladsye in',
@@ -2378,6 +2610,7 @@ Die lêer is slegs gedeeltelik opgelaai.',
'tooltip-ca-viewsource' => 'Hierdie bladsy is beskerm. U kan die bronteks besigtig.',
'tooltip-ca-history' => 'Ouer weergawes van hierdie bladsy.',
'tooltip-ca-protect' => 'Beskerm hierdie bladsy',
+'tooltip-ca-unprotect' => 'Verwyder beskerming vir die bladsy',
'tooltip-ca-delete' => 'Skrap hierdie bladsy',
'tooltip-ca-undelete' => 'Herstel die bydraes aan hierdie bladsy voordat dit geskrap is',
'tooltip-ca-move' => 'Skuif hierdie bladsy',
@@ -2388,6 +2621,7 @@ Die lêer is slegs gedeeltelik opgelaai.',
'tooltip-search-fulltext' => 'Deursoek bladsye vir hierdie teks',
'tooltip-p-logo' => 'Besoek die tuisblad',
'tooltip-n-mainpage' => 'Besoek die Tuisblad',
+'tooltip-n-mainpage-description' => 'Gaan na die tuisblad',
'tooltip-n-portal' => 'Meer oor die projek, wat u kan doen, nuttige skakels',
'tooltip-n-currentevents' => "'n Plek waar almal gesellig kan verkeer",
'tooltip-n-recentchanges' => "'n Lys van onlangse wysigings",
@@ -2436,10 +2670,12 @@ U kan daar \'n wysigingsopsomming byvoeg.',
# Attribution
'anonymous' => 'Anonieme {{PLURAL:$1|gebruiker|gebruikers}} van {{SITENAME}}',
'siteuser' => '{{SITENAME}} gebruiker $1',
-'lastmodifiedatby' => 'Hierdie bladsy is laas op $1 om $2 deur $3 gewysig.', # $1 date, $2 time, $3 user
+'anonuser' => 'Anonieme {{SITENAME}}-gebruiker $1',
+'lastmodifiedatby' => 'Hierdie bladsy is laas op $1 om $2 deur $3 gewysig.',
'othercontribs' => 'Gebaseer op werk van $1.',
'others' => 'ander',
'siteusers' => '{{SITENAME}}-{{PLURAL:$2|gebruikers|gebruikers}} $1',
+'anonusers' => 'Anonieme {{SITENAME}}-{{PLURAL:$2|gebruiker|gebruikers}} $1',
'creditspage' => 'Outeursblad',
'nocredits' => 'Geen outeursinligting is vir hierdie bladsy nie beskikbaar nie.',
@@ -2473,11 +2709,24 @@ Hierdie situasie was waarskynlik deur 'n skakel na 'n eksterne webtuiste op ons
'mw_math_modern' => 'Moderne blaaiers.',
'mw_math_mathml' => 'MathML',
+# Math errors
+'math_failure' => 'Kon nie verbeeld nie',
+'math_unknown_error' => 'onbekende fout',
+'math_unknown_function' => 'onbekende funksie',
+'math_lexing_error' => 'leksikale fout',
+'math_syntax_error' => 'sintaksfout',
+'math_image_error' => 'PNG-omskakeling het gefaal.
+Kontroleer of latex, dvips en gs korrek geïnstalleer is en skakel om',
+'math_bad_tmpdir' => 'Die gids vir tydelike lêers vir wiskundige formules bestaan nie of kan nie geskep word nie',
+'math_bad_output' => 'Die gids vir lêers met wiskundige formules bestaan nie of kan nie geskep word nie',
+'math_notexvc' => 'Kan nie die texvc program vind nie;
+stel asseblief op volgens die beskrywing in math/README.',
+
# Patrolling
'markaspatrolleddiff' => 'Merk as gekontroleerd',
'markaspatrolledtext' => 'Merk hierdie bladsy as gekontroleerd',
'markedaspatrolled' => 'As gekontroleerd gemerk',
-'markedaspatrolledtext' => 'Die gekose weergawe is as gekontroleerd gemerk.',
+'markedaspatrolledtext' => 'Die gekose weergawe van [[:$1]] is as gekontroleerd gemerk.',
'rcpatroldisabled' => 'Onlangse Wysigingskontrolering buiten staat gestel',
'rcpatroldisabledtext' => 'Die Onlangse Wysigingskontroleringsfunksie is tans buiten staat gestel.',
'markedaspatrollederror' => 'Kan nie as gekontroleerd merk nie',
@@ -2507,12 +2756,9 @@ $1',
'previousdiff' => '← Ouer wysiging',
'nextdiff' => 'Nuwer wysiging →',
-# Visual comparison
-'visual-comparison' => 'Visuele vergelyking',
-
# Media information
'mediawarning' => "'''Waarskuwing''': hierdie lêertipe bevat moontlik programkode wat u stelsel skade kan berokken.",
-'imagemaxsize' => 'Beperk beelde op beeldbeskrywingsbladsye tot:',
+'imagemaxsize' => "Beperk beeldgrootte tot:<br />''(vir lêerbeskrywingsbladsye)''",
'thumbsize' => 'Grootte van duimnaelskets:',
'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|bladsy|bladsye}}',
'file-info' => '(lêergrootte: $1, MIME-tipe: $2)',
@@ -2521,6 +2767,8 @@ $1',
'svg-long-desc' => '(SVG-lêer, nominaal $1 × $2 pixels, lêergrootte: $3)',
'show-big-image' => 'Volle resolusie',
'show-big-image-thumb' => '<small>Grootte van hierdie voorskou: $1 × $2 pixels</small>',
+'file-info-gif-looped' => 'herhalend',
+'file-info-gif-frames' => '$1 {{PLURAL:$1|raam|rame}}',
# Special:NewFiles
'newimages' => 'Gallery van nuwe beelde',
@@ -2555,7 +2803,7 @@ Ander velde sal versteek wees.
* exposuretime
* fnumber
* isospeedratings
-* focallength', # Do not translate list items
+* focallength',
# EXIF tags
'exif-imagewidth' => 'Breedte',
@@ -2682,14 +2930,14 @@ Ander velde sal versteek wees.
'exif-unknowndate' => 'Datum onbekend',
-'exif-orientation-1' => 'Normaal', # 0th row: top; 0th column: left
-'exif-orientation-2' => 'Horisontaal gespieël', # 0th row: top; 0th column: right
-'exif-orientation-3' => '180° gedraai', # 0th row: bottom; 0th column: right
-'exif-orientation-4' => 'Vertikaal gespieël', # 0th row: bottom; 0th column: left
-'exif-orientation-5' => 'Spieëlbeeld van linksbo-regsonder', # 0th row: left; 0th column: top
-'exif-orientation-6' => '90° regs gedraai', # 0th row: right; 0th column: top
-'exif-orientation-7' => 'Spieëlbeeld van linksonder-regsbo', # 0th row: right; 0th column: bottom
-'exif-orientation-8' => '90° links gedraai', # 0th row: left; 0th column: bottom
+'exif-orientation-1' => 'Normaal',
+'exif-orientation-2' => 'Horisontaal gespieël',
+'exif-orientation-3' => '180° gedraai',
+'exif-orientation-4' => 'Vertikaal gespieël',
+'exif-orientation-5' => 'Spieëlbeeld van linksbo-regsonder',
+'exif-orientation-6' => '90° regs gedraai',
+'exif-orientation-7' => 'Spieëlbeeld van linksonder-regsbo',
+'exif-orientation-8' => '90° links gedraai',
'exif-planarconfiguration-1' => 'chunky dataformaat',
'exif-planarconfiguration-2' => 'planar dataformat',
@@ -2811,7 +3059,7 @@ Ander velde sal versteek wees.
'exif-gpsmeasuremode-2' => '2-dimensionele meting',
'exif-gpsmeasuremode-3' => '3-dimensionele meting',
-# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+# Pseudotags used for GPSSpeedRef
'exif-gpsspeed-k' => 'Kilometer per huur',
'exif-gpsspeed-m' => 'Myl per huur',
'exif-gpsspeed-n' => 'Knope',
@@ -2830,6 +3078,7 @@ Ander velde sal versteek wees.
'watchlistall2' => 'alles',
'namespacesall' => 'alle',
'monthsall' => 'alle',
+'limitall' => 'alle',
# E-mail address confirmation
'confirmemail' => 'Bevestig e-posadres',
@@ -2851,18 +3100,18 @@ Die e-posprogram meld: $1',
'confirmemail_loggedin' => 'U e-posadres is nou bevestig.',
'confirmemail_error' => 'Iets het foutgegaan met die stoor van u bevestiging.',
'confirmemail_subject' => '{{SITENAME}}: E-posadres-bevestiging',
-'confirmemail_body' => 'Iemand, waarskynlik van u IP-adres: $1, het \'n rekening "$2" geregistreer met hierdie e-posadres by {{SITENAME}}.
+'confirmemail_body' => 'Iemand, waarskynlik u vanaf IP-adres: $1, het \'n rekening "$2" met hierdie e-posadres by {{SITENAME}} geregistreer.
-Om te bevestig dat hierdie adres werklik aan u behoort, en om die posfasiliteite by {{SITENAME}} te aktiveer, besoek hierdie skakel in u blaaier:
+Om te bevestig dat hierdie adres werklik aan u behoort, en om die posfasiliteite by {{SITENAME}} te aktiveer, besoek hierdie skakel in u webblaaier:
$3
-Indien dit nié u was nie, ignoreer bloot die skakel (en hierdie pos).
-Follow this link to cancel the e-mail address confirmation:
+Indien dit nié u was nie, ignoreer bloot die skakel (en hierdie e-pos).
+Volg hierdie skakel om die bevestiging van u e-posadres te kanselleer:
$5
-Hierde bevestigingkode verval om $4.',
+Hierdie bevestigingkode verval om $4.',
'confirmemail_invalidated' => 'Die e-pos bevestiging is gekanselleer.',
'invalidateemail' => 'Kanselleer e-pos bevestiging',
@@ -2962,7 +3211,7 @@ U kan ook die [[Special:Watchlist/edit|standaard opdaterigskerm gebruik]].',
'duplicate-defaultsort' => 'Waarskuwing: Die standaardsortering "$2" kry voorrang voor die sortering "$1".',
# Special:Version
-'version' => 'Weergawe', # Not used as normal message but as header for the special page itself
+'version' => 'Weergawe',
'version-extensions' => 'Uitbreidings geïnstalleer',
'version-specialpages' => 'Spesiale bladsye',
'version-parserhooks' => 'Ontlederhoeke',
@@ -2976,7 +3225,7 @@ U kan ook die [[Special:Watchlist/edit|standaard opdaterigskerm gebruik]].',
'version-skin-extension-functions' => 'Omslag-uitbreidingsfunksies',
'version-hook-name' => 'Hoek naam',
'version-hook-subscribedby' => 'Gebruik deur',
-'version-version' => 'Weergawe',
+'version-version' => '(Weergawe $1)',
'version-license' => 'Lisensie',
'version-software' => 'Geïnstalleerde sagteware',
'version-software-product' => 'Produk',
@@ -3057,4 +3306,15 @@ Verskaf die lêernaam sonder die "{{ns:file}}:" voorvoegsel.',
'dberr-outofdate' => 'Let daarop dat hulle indekse van ons inhoud moontlik verouderd mag wees.',
'dberr-cachederror' => "Hierdie is 'n gekaste kopie van die aangevraagde blad, en dit mag moontlik nie op datum wees nie.",
+# HTML forms
+'htmlform-invalid-input' => 'Daar is probleme met van die ingevoerde waardes',
+'htmlform-select-badoption' => 'Die ingevoerde waarde is ongeldig.',
+'htmlform-int-invalid' => "Die ingevoer waarde is nie 'n heeltal nie.",
+'htmlform-float-invalid' => "Die waarde wat u ingevoer het is nie 'n getal nie.",
+'htmlform-int-toolow' => 'Die ingevoerde waarde is laer as die minimum van $1',
+'htmlform-int-toohigh' => 'Die ingevoerde waarde is groter as die maksimum van $1',
+'htmlform-submit' => 'Dien in',
+'htmlform-reset' => 'Maak wysigings ongedaan',
+'htmlform-selectorother-other' => 'Ander',
+
);
diff --git a/languages/messages/MessagesAk.php b/languages/messages/MessagesAk.php
index e8eb4d3f..2300bd1f 100644
--- a/languages/messages/MessagesAk.php
+++ b/languages/messages/MessagesAk.php
@@ -81,4 +81,6 @@ $messages = array(
# Watchlist
'watch' => 'Hwɛ',
+'sp-contributions-talk' => 'Kasa',
+
);
diff --git a/languages/messages/MessagesAln.php b/languages/messages/MessagesAln.php
index 70711594..cb3408a9 100644
--- a/languages/messages/MessagesAln.php
+++ b/languages/messages/MessagesAln.php
@@ -15,11 +15,52 @@
$fallback = 'sq';
+$namespaceNames = array(
+ NS_SPECIAL => 'Speciale',
+ NS_TALK => 'Diskutim',
+ NS_USER => 'Përdorues',
+ NS_USER_TALK => 'Përdoruesi_diskutim',
+ NS_PROJECT_TALK => '$1_diskutim',
+ NS_FILE => 'Skeda',
+ NS_FILE_TALK => 'Skeda_diskutim',
+ NS_MEDIAWIKI_TALK => 'MediaWiki_diskutim',
+ NS_TEMPLATE => 'Stampa',
+ NS_TEMPLATE_TALK => 'Stampa_diskutim',
+ NS_HELP => 'Ndihmë',
+ NS_HELP_TALK => 'Ndihmë_diskutim',
+ NS_CATEGORY => 'Kategoria',
+ NS_CATEGORY_TALK => 'Kategoria_diskutim',
+);
+
+$namespaceAliases = array(
+ 'Perdoruesi' => NS_USER,
+ 'Perdoruesi_diskutim' => NS_USER_TALK,
+ 'Përdoruesi' => NS_USER,
+ 'Përdoruesi_diskutim' => NS_USER_TALK,
+ 'Figura' => NS_FILE,
+ 'Figura_diskutim' => NS_FILE_TALK,
+ 'Kategori' => NS_CATEGORY,
+ 'Kategori_Diskutim' => NS_CATEGORY_TALK
+);
+
$specialPageAliases = array(
'Popularpages' => array( 'Faqe të famshme' ),
'Search' => array( 'Kërko' ),
);
+$magicWords = array(
+ 'currentmonth' => array( '1', 'MUEJIAKTUAL', 'MUEJIAKTUAL2', 'MUAJIMOMENTAL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+ 'currentmonth1' => array( '1', 'MUEJIAKTUAL1', 'CURRENTMONTH1' ),
+ 'currentmonthname' => array( '1', 'EMNIMUEJITAKTUAL', 'EMRIIMUAJITMOMENTAL', 'CURRENTMONTHNAME' ),
+ 'currenttime' => array( '1', 'KOHATASH', 'KOHATANI', 'CURRENTTIME' ),
+ 'currenthour' => array( '1', 'ORATASH', 'ORATANI', 'CURRENTHOUR' ),
+ 'localmonth' => array( '1', 'MUEJILOKAL', 'MUAJILOKAL', 'LOCALMONTH', 'LOCALMONTH2' ),
+ 'img_center' => array( '1', 'qendër', 'qendrore', 'qëndër', 'qëndrore', 'center', 'centre' ),
+ 'img_baseline' => array( '1', 'vijabazë', 'linjabazë', 'baseline' ),
+ 'servername' => array( '0', 'EMNISERVERIT', 'EMRIISERVERIT', 'SERVERNAME' ),
+ 'currentweek' => array( '1', 'JAVAAKTUALE', 'JAVAMOMENTALE', 'CURRENTWEEK' ),
+);
+
$messages = array(
# User preference toggles
'tog-underline' => 'Nënvizoji lidhjet',
@@ -51,6 +92,7 @@ $messages = array(
'tog-enotifminoredits' => 'Njoftomë me email për redaktime të vogla të faqeve',
'tog-enotifrevealaddr' => 'Shfaqe adresën time në emailat njoftues',
'tog-shownumberswatching' => 'Shfaqe numrin e përdoruesve mbikëqyrës',
+'tog-oldsig' => 'Parapamja e nënshkrimit ekzistues:',
'tog-fancysig' => 'Trajto nënshkrimin si tekst (pa vegëz automatike)',
'tog-externaleditor' => 'Përdor program të jashtëm për redaktim (vetëm për eksperta, lyp përcaktime speciale në kompjuterin tuej)',
'tog-externaldiff' => 'Përdor program të jashtëm për dallime (vetëm për eksperta, lyp përcaktime speciale në kompjuterin tuej)',
@@ -74,6 +116,13 @@ $messages = array(
'underline-never' => 'kurrë',
'underline-default' => 'njisoj si shfletuesi',
+# Font style option in Special:Preferences
+'editfont-style' => 'Redakto stilin e fontit të fushës:',
+'editfont-default' => 'Parazgjedhja e browserit',
+'editfont-monospace' => "Font me hapësinë t'njitrajtshme",
+'editfont-sansserif' => 'Font pa serifa',
+'editfont-serif' => 'Font me serifa',
+
# Dates
'sunday' => 'E diel',
'monday' => 'E hâne',
@@ -133,7 +182,7 @@ $messages = array(
'category-media-header' => 'Media në kategori "$1"',
'category-empty' => "''Kjo kategori tashpërtash nuk përmban asnji faqe apo media.''",
'hidden-categories' => '{{PLURAL:$1|Kategori e msheftë|Kategori të mshefta}}',
-'hidden-category-category' => 'Kategori të mshefta', # Name of the category where hidden categories will be listed
+'hidden-category-category' => 'Kategori të mshefta',
'category-subcat-count' => '{{PLURAL:$2|Kjo kategori ka vetëm këtë nënkategori.|Kjo kategori ka {{PLURAL:$1|këtë nënkategori|$1 këto nënkategori}}, nga gjithsejt $2.}}',
'category-subcat-count-limited' => 'Kjo kategori ka {{PLURAL:$1|këtë nënkategori|$1 këto nënkategori}}.',
'category-article-count' => '{{PLURAL:$2|Kjo kategori ka vetëm këtë faqe.|Kjo kategori ka {{PLURAL:$1|këtë faqe|$1 faqe}} nga gjithsejt $2.}}',
@@ -141,6 +190,8 @@ $messages = array(
'category-file-count' => '{{PLURAL:$2|Kjo kategori ka vetëm këtë skedë.|{{PLURAL:$1|kjo skedë âsht|$1 skeda janë}} në këtë kategori, prej gjithsejt $2.}}',
'category-file-count-limited' => '{{PLURAL:$1|Kjo skedë âsht|$1 skeda janë}} në këtë kategori.',
'listingcontinuesabbrev' => 'vazh.',
+'index-category' => 'Faqe e indeksume',
+'noindex-category' => 'Faqe e paindeksume',
'mainpagetext' => "'''MediaWiki software u instalue me sukses.'''",
'mainpagedocfooter' => 'Për mâ shumë informata rreth përdorimit të softwareit wiki, ju lutem shikoni [http://meta.wikimedia.org/wiki/Help:Contents dokumentacionin].
@@ -152,10 +203,18 @@ $messages = array(
* [http://www.mediawiki.org/wiki/Help:FAQ Pyetjet e shpeshta rreth MediaWikit]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Njoftime rreth MediaWikit]',
-'about' => 'Rreth',
-'article' => 'Artikulli',
-'newwindow' => '(çelet në nji dritare të re)',
-'cancel' => 'Harroji',
+'about' => 'Rreth',
+'article' => 'Artikulli',
+'newwindow' => '(çelet në nji dritare të re)',
+'cancel' => 'Harroji',
+'moredotdotdot' => 'Mâ shumë...',
+'mypage' => 'Faqja jeme',
+'mytalk' => 'Diskutimet e mija',
+'anontalk' => 'Diskutimet për këtë IP',
+'navigation' => 'Navigimi',
+'and' => '&#32;dhe',
+
+# Cologne Blue skin
'qbfind' => 'Kërko',
'qbbrowse' => 'Shfleto',
'qbedit' => 'Redakto',
@@ -163,15 +222,35 @@ $messages = array(
'qbpageinfo' => 'Konteksti',
'qbmyoptions' => 'Faqet e mija',
'qbspecialpages' => 'Faqet speciale',
-'moredotdotdot' => 'Mâ shumë...',
-'mypage' => 'Faqja jeme',
-'mytalk' => 'Diskutimet e mija',
-'anontalk' => 'Diskutimet për këtë IP',
-'navigation' => 'Navigimi',
-'and' => '&#32;dhe',
-
-# Metadata in edit box
-'metadata_help' => 'Metadata:',
+'faq' => 'Pyetjet e shpeshta',
+'faqpage' => 'Project:Pyetjet e shpeshta',
+
+# Vector skin
+'vector-action-addsection' => 'Shto temë',
+'vector-action-delete' => 'Fshij',
+'vector-action-move' => 'Zhvendos',
+'vector-action-protect' => 'Mbroj',
+'vector-action-undelete' => 'Kthe fshimjen mbrapsht',
+'vector-action-unprotect' => 'Hiq mbrojtjen',
+'vector-namespace-category' => 'Kategoria',
+'vector-namespace-help' => 'Faqja e ndihmës',
+'vector-namespace-image' => 'Skeda',
+'vector-namespace-main' => 'Faqja',
+'vector-namespace-media' => 'Faqja e mediave',
+'vector-namespace-mediawiki' => 'Mesazhi',
+'vector-namespace-project' => 'Faqja e projektit',
+'vector-namespace-special' => 'Faqja speciale',
+'vector-namespace-talk' => 'Diskutimi',
+'vector-namespace-template' => 'Shablloni',
+'vector-namespace-user' => 'Faqja e përdoruesit',
+'vector-view-create' => 'Krijo',
+'vector-view-edit' => 'Redakto',
+'vector-view-history' => 'Shih historinë',
+'vector-view-view' => 'Lexo',
+'vector-view-viewsource' => 'Shih kodin',
+'actions' => 'Veprimet',
+'namespaces' => 'Hapësinat',
+'variants' => 'Variantet',
'errorpagetitle' => 'Gabim',
'returnto' => 'Kthehu te $1.',
@@ -221,18 +300,22 @@ $messages = array(
'otherlanguages' => 'Në gjuhë tjera',
'redirectedfrom' => '(Përcjellë nga $1)',
'redirectpagesub' => 'Faqe përcjellëse',
-'lastmodifiedat' => 'Kjo faqe âsht ndryshue për herë të fundit me $2, $1.', # $1 date, $2 time
+'lastmodifiedat' => 'Kjo faqe âsht ndryshue për herë të fundit me $2, $1.',
'viewcount' => 'Kjo faqe âsht pâ {{PLURAL:$1|nji|$1}} herë.',
'protectedpage' => 'Faqe e mbrojtun',
'jumpto' => 'Kce te:',
'jumptonavigation' => 'navigim',
'jumptosearch' => 'kërko',
+'view-pool-error' => 'Na vjen keq, serverat janë të stërngarkuem momentalisht.
+Tepër shumë përdorues po tentojnë me pâ këtë faqe.
+Ju lutem pritni pak para se me tentue me iu qasë faqes prap.
+
+$1',
# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
'aboutsite' => 'Rreth {{SITENAME}}',
'aboutpage' => 'Project:Rreth',
'copyright' => 'Përmbajtja âsht lëshue nën $1.',
-'copyrightpagename' => '{{SITENAME}} e drejta autoriale',
'copyrightpage' => '{{ns:project}}:Të drejtat autoriale',
'currentevents' => 'Ndodhitë aktuale',
'currentevents-url' => 'Project:Ndodhitë aktuale',
@@ -240,8 +323,6 @@ $messages = array(
'disclaimerpage' => 'Project:Shfajsimet e përgjithshme',
'edithelp' => 'Ndihmë për redaktim',
'edithelppage' => 'Help:Redaktimi',
-'faq' => 'Pyetjet e shpeshta',
-'faqpage' => 'Project:Pyetjet e shpeshta',
'helppage' => 'Help:Përmbajtja',
'mainpage' => 'Faqja Kryesore',
'mainpage-description' => 'Faqja Kryesore',
@@ -324,10 +405,6 @@ Kërkesa e fundit në databazë ishte:
"$1"
mbrenda funksionit "$2".
Databaza ktheu gabimin "$3: $4".',
-'noconnect' => 'Ju kërkojmë të falme! Defekt teknik, rifillojmë së shpejti.<br />
-$1',
-'nodb' => 'Nuk mujta me zgjidh regjistrin $1',
-'cachederror' => 'Kjo asht një kopje e faqes së kërkueme dhe munet me kánë e vjetër.',
'laggedslavemode' => "'''Kujdes:''' Kjo faqe mundet mos me përmbajtë ndryshime të reja.",
'readonly' => 'Databaza âsht e bllokueme',
'enterlockreason' => 'Futni një arsye për bllokimin, gjithashtu futni edhe kohën se kur pritet të çbllokohet',
@@ -344,6 +421,8 @@ Nëse nuk âsht kështu, mund ta keni gjetë nji gabim në software. Ju lutemi,
'readonly_lag' => 'Databaza âsht bllokue automatikisht përderisa serverat e mvarun të skinkronizohen me kryesorin.',
'internalerror' => 'Gabim i mbrendshëm',
'internalerror_info' => 'Gabimi i mbrendshëm: $1',
+'fileappenderrorread' => ' "$1" nuk mujti m\'u lexu gjatë bashkangjitjes.',
+'fileappenderror' => '"$1" nuk mujti me i\'u bashkangjitë "$2".',
'filecopyerror' => 'Nuk mujta me kopjue skedën "$1" te "$2".',
'filerenameerror' => 'Nuk mujta me ndërrue emnin e skedës "$1" në "$2".',
'filedeleteerror' => 'Nuk mujta me fshî skedën "$1".',
@@ -353,7 +432,8 @@ Nëse nuk âsht kështu, mund ta keni gjetë nji gabim në software. Ju lutemi,
'unexpected' => 'Vlerë e papritun: "$1"="$2".',
'formerror' => 'Gabim: nuk mujta me dërgue formularin',
'badarticleerror' => 'Ky veprim nuk mundet me u ekzekutue në këtë faqe.',
-'cannotdelete' => 'Nuk mujta me gris këtë faqe ose figurë të dhënë. (Munet qi asht e grisur nga dikush tjeter.)',
+'cannotdelete' => 'Nuk mujta me fshi faqen apo skedën e dhânë.
+Ndodh që âsht fshi prej dikujt tjetër.',
'badtitle' => 'Titull i keq',
'badtitletext' => 'Titulli i faqes që kërkuet ishte jovalid, bosh, apo ishte nji vegëz gabim e lidhun ndërgjuhesisht apo ndër-wiki.
Ndodh që ka shêja që nuk munden me u përdorë në titull.',
@@ -390,7 +470,6 @@ Arsyeja e dhânë âsht "\'\'$2\'\'".',
'virus-unknownscanner' => 'antivirus i panjoftun:',
# Login and logout pages
-'logouttitle' => 'Përdoruesi ka dál',
'logouttext' => "'''Jeni çlajmërue.'''
Mundeni me vazhdue me shfrytëzue {{SITENAME}} në mënyrë anonime, apo mundeni [[Special:UserLogin|me u kyçë]] si përdoruesi i njêjtë apo si nji tjetër.
@@ -409,6 +488,7 @@ Mos harroni me i ndryshue [[Special:Preferences|parapëlqimet për {{SITENAME}}]
'nav-login-createaccount' => 'Kyçu / çel llogari',
'loginprompt' => 'Shfletuesi duhet me pranue keksa (cookies) për me mujtë me u kyçë në {{SITENAME}}.',
'userlogin' => 'Kyçu / çel llogari',
+'userloginnocreate' => 'Kyçu',
'logout' => 'Çkyçu',
'userlogout' => 'Çkyçu',
'notloggedin' => 'Nuk je i kyçun',
@@ -421,28 +501,8 @@ Mos harroni me i ndryshue [[Special:Preferences|parapëlqimet për {{SITENAME}}]
'badretype' => 'Fjalëkalimet nuk janë të njêjta.',
'userexists' => 'Nofka keni zgjedhë âsht në përdorim.
Zgjedh nji emën tjetër.',
-'youremail' => 'Adresa e email-it*',
-'username' => 'Nofka e përdoruesit:',
-'uid' => 'Nr. i identifikimit:',
-'prefs-memberingroups' => 'Anëtar i {{PLURAL:$1|grupit|grupeve}}:',
-'yourrealname' => 'Emri juej i vërtetë*',
-'yourlanguage' => 'Ndërfaqja gjuhësore',
-'yournick' => 'Nofka :',
-'badsig' => 'Sintaksa e nënshkrimit asht e pavlefshme, kontrolloni HTML-n.',
-'badsiglength' => 'Emri i zgjedhun asht shumë i gjatë; duhet me pas ma pak se $1 shkronja',
-'yourgender' => 'Gjinia:',
-'gender-unknown' => 'Pacaktue',
-'gender-male' => 'Mashkull',
-'gender-female' => 'Femën',
-'prefs-help-gender' => 'Opcionale: përdoret për adresim korrekt në relacion me gjininë nga softwarei.
-Kjo informatë del publike.',
-'email' => 'Email',
-'prefs-help-realname' => 'Emni i vërtetë âsht opcional.
-Nëse zgjedhni me e dhânë, ky do të përdoret për me jua atribuue punën.',
'loginerror' => 'Gabim në kyçje',
-'prefs-help-email' => 'Emaili âsht opcional, por mundëson që fjalëkalimi i ri me mujtë me ju dërgue me email nëse e harroni.
-Mundeni me zgjedhe që të tjerët me ju kontaktue përmjet faqe së diskutimit pa e zbulue identitetin tuej të vërtetë.',
-'prefs-help-email-required' => 'Adresa e emailit âsht e domosdoshme.',
+'createaccounterror' => 'Nuk mund të hapni një llogari $1',
'nocookiesnew' => 'Llogaria e përdoruesit u krijue, por ende nuk je i kyçun.
{{SITENAME}} përdor keksa (cookies) për kyçje.
Keksat i ke jasht funksionit.
@@ -459,10 +519,13 @@ Kontrollo drejtshkrimin ose [[Special:UserLogin/signup|krijo llogari]].',
'nosuchusershort' => 'Nuk ka përdorues me emnin "<nowiki>$1</nowiki>".
Kontrollo drejtshkrimin.',
'nouserspecified' => 'Duhesh me dhânë nji nofkë.',
+'login-userblocked' => 'Ky përdorues është bllokuar. Identifikohu nuk lejohet',
'wrongpassword' => 'Fjalëkalimi i pasaktë.
Provo prap.',
'wrongpasswordempty' => 'Fjalëkalimi ishte i shprazët.
Provo prap.',
+'passwordtooshort' => 'Fjalëkalimi juej duhet me i pasë së paku {{PLURAL:$1|1 shêjë|$1 shêja}}.',
+'password-name-match' => 'Fjalëkalimi duhet me qenë i ndryshëm prej nofkës.',
'mailmypassword' => 'Dërgo fjalëkalimin me email',
'passwordremindertitle' => 'Fjalëkalim i ri i përkohshëm për {{SITENAME}}',
'passwordremindertext' => 'Dikush (me giasë ju vetë, nga adresa IP $1) ka lypë nji
@@ -475,6 +538,7 @@ Nëse dikush tjetër e ka bâ këtë kërkesë, ose ju âsht kujtue fjalëkalimi
dhe nuk dëshironi me ndërrue fjalëkalimin, mundeni me injorue këtë mesazh
dhe me vazhdue me përdorë fajlëkalimin e vjetër.',
'noemail' => 'Nuk ka adresë emaili për përdoruesin "$1".',
+'noemailcreate' => 'Ju duhet të sigurojë një adresë të saktë-mail',
'passwordsent' => 'Nji fjalëkalim i ri u dërgue në adresën e emailit të "$1".
Ju lutem kyçuni mbasi ta keni marrë atê.',
'blocked-mailpassword' => 'Adresa juej IP âsht bllokue për redaktim, dhe nuk lejohet me përdorë funksionin e mëkâmbjes së fjalëkalimit për me parandalue keqpërdorimin.',
@@ -499,9 +563,11 @@ Ju lutemi jepeni nji adresë të formatueme mirë ose leni atë fushë të shpra
Kyçuni tash dhe ndërroni fjalëkalimin.
Nëse kjo llogari âsht krijue gabimisht, mundeni me injorue këtë email.',
+'usernamehasherror' => 'Emri nuk mund të përmbajë karaktere hash',
'login-throttled' => 'Keni bâ shumë tentime frik në fjalëkalimin e kësaj llogarie.
Ju lutemi pritni pak për me provue prap.',
'loginlanguagelabel' => 'Gjuha: $1',
+'suspicious-userlogout' => 'Kërkesa juaj për të shkëputet u mohua sepse duket sikur është dërguar nga një shfletues të thyer ose caching proxy',
# Password reset dialog
'resetpass' => 'Ndrysho fjalëkalimin',
@@ -517,6 +583,7 @@ Për me krye kyçjen, specifikoni fjalëkalimin e ri këtu:',
'resetpass_forbidden' => 'Fjalëkalimet nuk mujnë me u ndryshue',
'resetpass-no-info' => 'Duheni me qenë të kyçun për me iu qasë kësaj faqeje direkt.',
'resetpass-submit-loggedin' => 'Ndrysho fjalëkalimin',
+'resetpass-submit-cancel' => 'Harroji',
'resetpass-wrong-oldpass' => 'Fjalëkalimi i përkohshëm apo ai aktual invalid.
Ndoshta tashmâ e keni ndryshue fjalëkalimin me sukses, apo keni kërkue nji fjalëkalim të përkohshëm.',
'resetpass-temp-password' => 'Fjalëkalimi i përkohshëm:',
@@ -626,7 +693,8 @@ Ju lutemi kontrolloni nëse doni me krijue/redaktue këtë faqe.',
'''Konqueror: '''klikoni ''Reload'' ose trusni ''F5'';
'''Opera:''' fshini cachein në ''Tools → Preferences'';
'''Internet Explorer:''' mbani ''Ctrl'' tue klikue në ''Refresh,'' ose trusni ''Ctrl-F5''.",
-'usercssjsyoucanpreview' => "'''Këshillë:''' Përdorni butonin 'Trego parapâmjen' për me testue CSS/JS para se me i regjistrue ndryshimet.",
+'usercssyoucanpreview' => "'''Këshillë:''' Përdorni butonin 'Trego parapâmjen' për me testue CSS para se me i regjistrue ndryshimet.",
+'userjsyoucanpreview' => "'''Këshillë:''' Përdorni butonin 'Trego parapâmjen' për me testue JS para se me i regjistrue ndryshimet.",
'usercsspreview' => "'''Vini re, jeni tue pâ veç parapâmjen e CSSit tuej.'''
'''Ende nuk e keni ruejtë!'''",
'userjspreview' => "'''Vini re, jeni tue testue/pâ veç parapâmjen e JavaScriptit tuej.'''
@@ -687,6 +755,9 @@ Administruesi që e ka mshelë e ka dhânë këtë shpjegim: $1",
'semiprotectedpagewarning' => "'''Shenim:''' Kjo faqe âsht e mshelun dhe mundet me u redaktue vetëm prej përdoruesve të regjistruem.",
'cascadeprotectedwarning' => "'''Veni re:''' Kjo faqe âsht e mshelun dhe vetëm përdoruesit me tagër administruesi munden me e redaktue, tue qenë se âsht e përfshime në mbrojtje mvarësie në {{PLURAL:$1|faqen e|faqet e}} mâposhtme:",
'titleprotectedwarning' => "'''Veni re: Kjo faqe âsht e mshelun dhe vetëm përdorues me [[Special:ListGroupRights|tagër të veçantë]] munden me e krijue.'''",
+'templatesused' => '{{PLURAL:$1|Stamp|Stampa}} janë përdorë në kët faqe:',
+'templatesusedpreview' => '{{PLURAL:$1|Stamp|Stampa}} janë përdorë në këtë parapâmje:',
+'templatesusedsection' => '{{PLURAL:$1|Stamp|Stampa}} e përdoruna në këtë sekcion:',
'template-protected' => '(e mbrojtme)',
'template-semiprotected' => '(gjysë-mbrojtun)',
'hiddencategories' => 'Kjo faqe bân pjesë në {{PLURAL:$1|1 kategori të msheftë|$1 kategori të mshefta}}:',
@@ -697,6 +768,11 @@ Mundeni me u kthy mbrapa edhe me redaktue faqen ekzistuese, apo [[Special:UserLo
'permissionserrors' => 'Gabim tagri',
'permissionserrorstext' => 'Nuk keni tagër me bâ atë veprim, për {{PLURAL:$1|arsyen|arsyet}} vijuese:',
'permissionserrorstext-withaction' => 'Nuk keni tagër në $2, për {{PLURAL:$1|arsyen|arsyet}} vijuese:',
+'recreate-moveddeleted-warn' => "'''Veni re: Jeni tue rikrijue nji faqe, e cila âsht fshi mâ herët.'''
+
+Mendohuni nëse âsht e udhës me vazhdue me këtë veprim.
+Regjistrin e fshimjes dhe zhvendosjes e keni në vijim:",
+'moveddeleted-notice' => 'Kjo faqe është grisur. Të dhënat e grisjes për këtë faqe gjenden më poshtë, për referencë.',
'edit-gone-missing' => 'Faqja nuk mund t freskohet.
Duket se është grisur.',
'edit-conflict' => 'Konflikt në redaktim.',
@@ -732,8 +808,9 @@ Arsyeja e dhënë nga $3 është ''$2''.",
'viewpagelogs' => 'Shih regjistrat për këtë faqe',
'nohistory' => 'Nuk ka histori redaktimesh për këtë faqe.',
'currentrev' => 'Versioni i tanishëm',
+'currentrev-asof' => 'Redaktimi aktual i datës $1',
'revisionasof' => 'Versioni i $1',
-'revision-info' => 'Versioni me $1 nga $2', # Additionally available: $3: revision id
+'revision-info' => 'Versioni me $1 nga $2',
'previousrevision' => '← Verzion ma i vjetër',
'nextrevision' => 'Redaktimi mâ i ri →',
'currentrevisionlink' => 'Verzioni aktual',
@@ -752,48 +829,58 @@ Legjenda: '''({{int:cur}})''' = dallimi me verzionin aktual,
'historyempty' => '(bosh)',
# Revision feed
-'history-feed-title' => 'Historiku i versioneve',
-'history-feed-description' => 'Historiku i versioneve për këtë faqe në wiki',
-'history-feed-empty' => 'Faqja që kërkuat nuk ekziston. Ajo mund të jetë grisur nga wiki ose mund të jetë zhvendosur nën një emër tjetër. Mund të provoni ta gjeni duke e [[Special:Search|kërkuar]].',
+'history-feed-title' => 'Historiku i versioneve',
+'history-feed-description' => 'Historiku i versioneve për këtë faqe në wiki',
+'history-feed-item-nocomment' => '$1 tek $2',
+'history-feed-empty' => 'Faqja që kërkuat nuk ekziston. Ajo mund të jetë grisur nga wiki ose mund të jetë zhvendosur nën një emër tjetër. Mund të provoni ta gjeni duke e [[Special:Search|kërkuar]].',
# Revision deletion
-'rev-deleted-comment' => '(kometi u largua)',
-'rev-deleted-user' => '(përdoruesi u largua)',
-'rev-deleted-event' => '(veprimi në regjistër është hequr)',
-'rev-delundel' => 'trego/mshef',
-'revisiondelete' => 'Fshij/kthe verzionet',
-'revdelete-nooldid-title' => 'Version i dëshiruar i pavfleshëm',
-'revdelete-nooldid-text' => 'Ose nuk keni përcaktuar një version(e) të dëshiruar për veprimin, ose versioni nuk ekziston, ose po mundoheni të fshihni versionin e tanishëm.',
-'revdelete-nologtype-title' => 'Nuk është dhënë asnjë lloj i të dhënave',
-'revdelete-nologtype-text' => 'Nuk keni caktuar llojin e të dhënave për të realizuar veprimin.',
-'revdelete-selected' => "'''{{PLURAL:$2|Versioni i zgjedhur i|Versionet e zgjedhura të}} [[:$1]]:'''",
-'logdelete-selected' => "'''{{PLURAL:$1|Veprimi i zgjedhur në regjistër|Veprimet e zgjedhura në regjistër}}:'''",
-'revdelete-legend' => 'Vendosni kufizimet për versionin:',
-'revdelete-hide-text' => 'Fshihe tekstin e versionit',
-'revdelete-hide-name' => 'Fshihe veprimin dhe shënjestrën',
-'revdelete-hide-comment' => 'fshih komentin e redaktimit',
-'revdelete-hide-user' => 'Fshihe emrin/IP-në të redaktuesit',
-'revdelete-hide-restricted' => 'Këto përkufizme vlejnë edhe për Admintratorët (jo vetëm për përdoruesit "normal")',
-'revdelete-suppress' => 'Ndalo të dhëna nga administrues si dhe të tjerë',
-'revdelete-hide-image' => 'Fshih përmbajtjen skedare',
-'revdelete-unsuppress' => 'Hiq kufizimet nga versionet e restauruara',
-'revdelete-log' => 'Arsyeja:',
-'revdelete-logentry' => 'Pamja e versionit u ndryshua për [[$1]]',
-'logdelete-logentry' => 'u ndryshua dukshmëria e ngjarjes së [[$1]]',
-'revdelete-success' => "'''Dukshmëria e versioneve u vendos me sukses.'''",
-'logdelete-success' => "'''Dukshmëria e regjistrave u vendos me sukses.'''",
-'revdel-restore' => 'ndrro dukshmëninë',
-'pagehist' => 'Historiku i faqes',
-'deletedhist' => 'Historiku i grisjeve',
-'revdelete-content' => 'përmbajtja',
-'revdelete-summary' => 'përmbledhja redaktimit',
-'revdelete-uname' => 'përdoruesi',
-'revdelete-restricted' => 'u vendosën kufizime për administruesit',
-'revdelete-unrestricted' => 'u hoqën kufizimet për administruesit',
-'revdelete-hid' => 'u fsheh $1',
-'revdelete-unhid' => 'u tregua $1',
-'revdelete-log-message' => '$1 për $2 {{PLURAL:$2|version|versione}}',
-'logdelete-log-message' => '$1 për $2 {{PLURAL:$2|ngjarje|ngjarje}}',
+'rev-deleted-comment' => '(kometi u largua)',
+'rev-deleted-user' => '(përdoruesi u largua)',
+'rev-deleted-event' => '(veprimi në regjistër është hequr)',
+'rev-deleted-text-permission' => 'Ky version i faqes është shlyer nga arkivi publik i faqes.
+Shiko tek [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} regjistri i grisjeve], ndoshta gjendet atje më shumë informacion rreth kësaj faqeje.',
+'rev-deleted-text-view' => 'Ky version i faqes është shlyer nga arkivi publik i faqes. Ju si Administrator mund ta shikoni akoma këtë.
+Shiko tek [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} regjistri i grisjeve], ndoshta gjenden atje më shumë informacione rreth kësaj.',
+'rev-delundel' => 'trego/mshef',
+'rev-showdeleted' => 'Trego',
+'revisiondelete' => 'Fshij/kthe verzionet',
+'revdelete-nooldid-title' => 'Version i dëshiruar i pavfleshëm',
+'revdelete-nooldid-text' => 'Ose nuk keni përcaktuar një version(e) të dëshiruar për veprimin, ose versioni nuk ekziston, ose po mundoheni të fshihni versionin e tanishëm.',
+'revdelete-nologtype-title' => 'Nuk është dhënë asnjë lloj i të dhënave',
+'revdelete-nologtype-text' => 'Nuk keni caktuar llojin e të dhënave për të realizuar veprimin.',
+'revdelete-no-file' => 'Skeda e dhënë nuk ekziston.',
+'revdelete-selected' => "'''{{PLURAL:$2|Versioni i zgjedhur i|Versionet e zgjedhura të}} [[:$1]]:'''",
+'logdelete-selected' => "'''{{PLURAL:$1|Veprimi i zgjedhur në regjistër|Veprimet e zgjedhura në regjistër}}:'''",
+'revdelete-text' => "'''Përmbajtja dhe pjesët e tjera nuk janë të dukshme për të gjithë, por figurojnë në historikun e versioneve.''' Administratorët munden përmbajtjen e larguar ta shikojnë dhe restaurojnë, përveç në rastet kur një gjë e tillë është ndaluar ekstra.",
+'revdelete-legend' => 'Vendosni kufizimet për versionin:',
+'revdelete-hide-text' => 'Fshihe tekstin e versionit',
+'revdelete-hide-image' => 'Fshih përmbajtjen skedare',
+'revdelete-hide-name' => 'Fshihe veprimin dhe shënjestrën',
+'revdelete-hide-comment' => 'fshih komentin e redaktimit',
+'revdelete-hide-user' => 'Fshihe emrin/IP-në të redaktuesit',
+'revdelete-hide-restricted' => 'Këto përkufizme vlejnë edhe për Admintratorët (jo vetëm për përdoruesit "normal")',
+'revdelete-suppress' => 'Ndalo të dhëna nga administrues si dhe të tjerë',
+'revdelete-unsuppress' => 'Hiq kufizimet nga versionet e restauruara',
+'revdelete-log' => 'Arsyeja:',
+'revdelete-submit' => 'Apliko te versionet e zgjedhura',
+'revdelete-logentry' => 'Pamja e versionit u ndryshua për [[$1]]',
+'logdelete-logentry' => 'u ndryshua dukshmëria e ngjarjes së [[$1]]',
+'revdelete-success' => "'''Dukshmëria e versioneve u vendos me sukses.'''",
+'logdelete-success' => "'''Dukshmëria e regjistrave u vendos me sukses.'''",
+'revdel-restore' => 'ndrro dukshmëninë',
+'pagehist' => 'Historiku i faqes',
+'deletedhist' => 'Historiku i grisjeve',
+'revdelete-content' => 'përmbajtja',
+'revdelete-summary' => 'përmbledhja redaktimit',
+'revdelete-uname' => 'përdoruesi',
+'revdelete-restricted' => 'u vendosën kufizime për administruesit',
+'revdelete-unrestricted' => 'u hoqën kufizimet për administruesit',
+'revdelete-hid' => 'u fsheh $1',
+'revdelete-unhid' => 'u tregua $1',
+'revdelete-log-message' => '$1 për $2 {{PLURAL:$2|version|versione}}',
+'logdelete-log-message' => '$1 për $2 {{PLURAL:$2|ngjarje|ngjarje}}',
+'revdelete-edit-reasonlist' => 'Arsye grisjeje për redaktimet',
# Suppression log
'suppressionlog' => 'Regjistri i ndalimeve',
@@ -843,23 +930,25 @@ Kini kujdes se përdorimi i lidhjeve të shfletimit do të ndryshojë përzgjedh
'searchresulttext' => 'Për mâ shumë informata rreth kërkimit në {{SITENAME}} shih [[{{MediaWiki:Helppage}}|{{int:help}}]].',
'searchsubtitle' => 'Keni kërkue \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|tâna faqet që nisin me "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|tâna faqet që lidhen me "$1"]])',
'searchsubtitleinvalid' => "Keni kërkue '''$1'''",
-'noexactmatch' => "'''Nuk ka faqe me titull \"\$1\".'''
-Mundeni [[:\$1|me krijue këtë faqe]].",
-'noexactmatch-nocreate' => "'''Nuk ka faqe me titull \"\$1\".'''",
'toomanymatches' => 'Ka tepër shumë përputhje, provoni nji kërkesë mâ të ngushtë',
'titlematches' => 'Tituj që përputhen',
'notitlematches' => 'Nuk ka përputhje në tituj',
'textmatches' => 'Përputhje në tekst',
'notextmatches' => 'Nuk ka përputhje tekstuale në asnji faqe',
+'prevn' => 'e përparme {{PLURAL:$1|$1}}',
+'nextn' => 'e ardhshme {{PLURAL:$1|$1}}',
'prevn-title' => '$1 {{PLURAL:$1|rezultat|rezultate}} të mâhershme',
'nextn-title' => '$1 {{PLURAL:$1|rezultat|rezultate}} të ardhshme',
'shown-title' => 'Trego $1 {{PLURAL:$1|rezultat|rezultate}} për faqe',
-'viewprevnext' => 'Shih ($1) ($2) ($3).',
+'viewprevnext' => 'Shih ($1 {{int:pipe-separator}} $2) ($3).',
'searchmenu-legend' => 'Opcionet e kërkimit',
'searchmenu-exists' => "'''Në këtë wiki âsht nji faqe me titullin \"[[:\$1]]\"'''",
'searchmenu-new' => "'''Krijo faqen \"[[:\$1]]\" në këtë wiki!'''",
'searchhelp-url' => 'Help:Përmbajtja',
'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Shfleto faqet me këtë prefiks]]',
+'searchprofile-articles' => 'Faqet me përmbajtje',
+'searchprofile-project' => 'Faqet e ndihmës dhe projekteve',
+'searchprofile-images' => 'Multimedia',
'searchprofile-everything' => 'Gjithçka',
'searchprofile-advanced' => 'Detajshëm',
'searchprofile-articles-tooltip' => 'Kërko në $1',
@@ -879,11 +968,12 @@ Mundeni [[:\$1|me krijue këtë faqe]].",
'search-mwsuggest-disabled' => "s'ka sygjerime",
'search-relatedarticle' => 'Të ngjajshme',
'mwsuggest-disable' => 'Deaktivizo sygjerimet me AJAX',
+'searcheverything-enable' => 'Kërko në tâna hapësinat',
'searchrelated' => 'të ngjajshme',
'searchall' => 'tâna',
'showingresults' => "Mâ poshtë {{PLURAL:$1|tregohet '''1''' rezultat|tregohen '''$1''' rezultate}} që nisin me #'''$2'''.",
'showingresultsnum' => "Mâ poshtë {{PLURAL:$3|tregohet '''1''' rezultat|tregohen '''$3''' rezultate}} që nisin me #'''$2'''.",
-'showingresultstotal' => "Mâ poshtë {{PLURAL:$4|tregohet rezultati '''$1''' prej '''$3'''|tregohen rezultatet '''$1 - $2''' prej '''$3'''}}",
+'showingresultsheader' => "{{PLURAL:$5|Rezultati '''$1''' prej '''$3'''|Rezultatet '''$1 - $2''' prej '''$3'''}} për '''$4'''",
'nonefound' => "'''Shenim''': Vetëm disa hapësina kërkohen me t'lême.
Provoni me ia parashtue kërkesës tuej ''tâna:'' që me lypë tânë përmbajtjen (përfshî edhe diskutimet, shabllonat, etj.), ose përdorni hapësinën e dëshirueme si parashtesë.",
'search-nonefound' => 'Nuk ka rezultate që përputhen me kërkesën.',
@@ -892,71 +982,117 @@ Provoni me ia parashtue kërkesës tuej ''tâna:'' që me lypë tânë përmbajt
'powersearch-ns' => 'Kërkimi në hapësina:',
'powersearch-redir' => 'Listo përcjelljet',
'powersearch-field' => 'Kërko',
+'powersearch-togglelabel' => 'Zgjedh:',
+'powersearch-toggleall' => 'Tâna',
+'powersearch-togglenone' => 'Asnji',
'search-external' => 'Kërkim jashtë',
'searchdisabled' => '{{SITENAME}} kërkimi âsht deaktivue.
Ndërkohë mundeni me lypë me Google.
Vini re se indeksat e tyne të përmbajtjes së {{SITENAME}} munden me qenë të vjetëruem.',
+# Quickbar
+'qbsettings' => 'Vegla të shpejta',
+'qbsettings-none' => 'Asnji',
+'qbsettings-fixedleft' => 'Lidhun majtas',
+'qbsettings-fixedright' => 'Lidhun djathtas',
+'qbsettings-floatingleft' => 'Pezull majtas',
+'qbsettings-floatingright' => 'Pezull djathtas',
+
# Preferences page
-'preferences' => 'Parapëlqimet',
-'mypreferences' => 'Parapëlqimet e mija',
-'prefs-edits' => 'Numri i redaktimeve:',
-'prefsnologin' => 'Nuk jeni kyçë',
-'qbsettings' => 'Vegla të shpejta',
-'qbsettings-none' => 'Asnji',
-'qbsettings-fixedleft' => 'Lidhun majtas',
-'qbsettings-fixedright' => 'Lidhun djathtas',
-'qbsettings-floatingleft' => 'Pezull majtas',
-'qbsettings-floatingright' => 'Pezull djathtas',
-'changepassword' => 'Ndërrimi i fjalëkalimit',
-'skin-preview' => 'Parapâmja',
-'datedefault' => "S'ka parapëlqim",
-'prefs-personal' => 'Profili i përdoruesit',
-'prefs-rc' => 'Ndryshimet e freskëta',
-'prefs-watchlist' => 'Lista e mbikëqyrjeve',
-'prefs-watchlist-days' => 'Numri i ditëve me i tregue në listën e mbikëqyrjeve:',
-'prefs-watchlist-edits' => 'Numri maksimal i ndryshimeve që tregohen në listën e zgjânueme të mbikëqyrjes:',
-'prefs-misc' => 'Të ndryshme',
-'prefs-resetpass' => 'Ndryshimi i fjalëkalimit',
-'saveprefs' => 'Regjistro',
-'resetprefs' => 'Fshij ndryshimet e paruejtuna',
-'restoreprefs' => 'Kthe tâna përcaktimet si në fillim',
-'prefs-edit-boxsize' => 'Madhësia e dritares redaktuese.',
-'rows' => 'Rreshta:',
-'columns' => 'Kolona:',
-'searchresultshead' => 'Kërkimi',
-'resultsperpage' => 'Gjetje për faqe:',
-'contextlines' => 'Rreshta për gjetje:',
-'contextchars' => 'Konteksti për rresht:',
-'stub-threshold' => 'Pragu për formatimin e <a href="#" class="stub">vegzave të cungueme</a> në (byte):',
-'recentchangesdays' => 'Numri i ditëve për me i tregue te ndryshimet e freskëta:',
-'savedprefs' => 'Parapëlqimet tueja janë ruejtë.',
-'timezonelegend' => 'Zona kohore:',
-'localtime' => 'Ora lokale:',
-'timezoneuseserverdefault' => 'Përdor të paracaktuemen e serverit',
-'timezoneuseoffset' => 'Tjetër (specifiko kcimin)',
-'timezoneoffset' => 'Kcimi¹:',
-'servertime' => 'Ora e serverit:',
-'guesstimezone' => 'Mbush prej shfletuesit:',
-'timezoneregion-africa' => 'Afrikë',
-'timezoneregion-america' => 'Amerikë',
-'timezoneregion-antarctica' => 'Antarktik',
-'timezoneregion-arctic' => 'Arktik',
-'timezoneregion-asia' => 'Azi',
-'timezoneregion-atlantic' => 'Oqeani Atlantik',
-'timezoneregion-australia' => 'Australi',
-'timezoneregion-europe' => 'Europë',
-'timezoneregion-indian' => 'Oqeani Indian',
-'timezoneregion-pacific' => 'Oqeani Paqësor',
-'allowemail' => 'Lejo emaila prej përdoruesve tjerë',
-'prefs-searchoptions' => 'Opcionet e kërkimit',
-'prefs-namespaces' => 'Hapësinat',
-'default' => 'e paracaktueme',
-'prefs-custom-css' => 'CSS i përpunuem',
-'prefs-custom-js' => 'JavaScripti i përpunuem',
+'preferences' => 'Parapëlqimet',
+'mypreferences' => 'Parapëlqimet e mija',
+'prefs-edits' => 'Numri i redaktimeve:',
+'prefsnologin' => 'Nuk jeni kyçë',
+'prefsnologintext' => 'Duheni me qenë <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} i kyçun]</span> për me i caktue parapëlqimet.',
+'changepassword' => 'Ndërrimi i fjalëkalimit',
+'prefs-skin' => 'Doka',
+'skin-preview' => 'Parapâmja',
+'prefs-math' => 'Formulë',
+'datedefault' => "S'ka parapëlqim",
+'prefs-datetime' => 'Data dhe ora',
+'prefs-personal' => 'Profili i përdoruesit',
+'prefs-rc' => 'Ndryshimet e freskëta',
+'prefs-watchlist' => 'Lista e mbikëqyrjeve',
+'prefs-watchlist-days' => 'Numri i ditëve me i tregue në listën e mbikëqyrjeve:',
+'prefs-watchlist-days-max' => '(maksimalisht 7 ditë)',
+'prefs-watchlist-edits' => 'Numri maksimal i ndryshimeve që tregohen në listën e zgjânueme të mbikëqyrjes:',
+'prefs-watchlist-edits-max' => '(numri maksimal: 1000)',
+'prefs-misc' => 'Të ndryshme',
+'prefs-resetpass' => 'Ndryshimi i fjalëkalimit',
+'prefs-email' => 'Opcionet për email',
+'prefs-rendering' => 'Pâmja',
+'saveprefs' => 'Regjistro',
+'resetprefs' => 'Fshij ndryshimet e paruejtuna',
+'restoreprefs' => 'Kthe tâna përcaktimet si në fillim',
+'prefs-editing' => 'Tue redaktue',
+'prefs-edit-boxsize' => 'Madhësia e dritares redaktuese.',
+'rows' => 'Rreshta:',
+'columns' => 'Kolona:',
+'searchresultshead' => 'Kërkimi',
+'resultsperpage' => 'Gjetje për faqe:',
+'contextlines' => 'Rreshta për gjetje:',
+'contextchars' => 'Konteksti për rresht:',
+'stub-threshold' => 'Pragu për formatimin e <a href="#" class="stub">vegzave të cungueme</a> në (byte):',
+'recentchangesdays' => 'Numri i ditëve për me i tregue te ndryshimet e freskëta:',
+'recentchangesdays-max' => '(maksimum $1 {{PLURAL:$1|ditë|ditë}})',
+'recentchangescount' => 'Numri i redaktimeve me u tregue:',
+'prefs-help-recentchangescount' => 'Kjo përfshin ndryshimet e freskëta, historikun e faqes dhe regjistrat.',
+'savedprefs' => 'Parapëlqimet tueja janë ruejtë.',
+'timezonelegend' => 'Zona kohore:',
+'localtime' => 'Ora lokale:',
+'timezoneuseserverdefault' => 'Përdor të paracaktuemen e serverit',
+'timezoneuseoffset' => 'Tjetër (specifiko kcimin)',
+'timezoneoffset' => 'Kcimi¹:',
+'servertime' => 'Ora e serverit:',
+'guesstimezone' => 'Mbush prej shfletuesit:',
+'timezoneregion-africa' => 'Afrikë',
+'timezoneregion-america' => 'Amerikë',
+'timezoneregion-antarctica' => 'Antarktik',
+'timezoneregion-arctic' => 'Arktik',
+'timezoneregion-asia' => 'Azi',
+'timezoneregion-atlantic' => 'Oqeani Atlantik',
+'timezoneregion-australia' => 'Australi',
+'timezoneregion-europe' => 'Europë',
+'timezoneregion-indian' => 'Oqeani Indian',
+'timezoneregion-pacific' => 'Oqeani Paqësor',
+'allowemail' => 'Lejo emaila prej përdoruesve tjerë',
+'prefs-searchoptions' => 'Opcionet e kërkimit',
+'prefs-namespaces' => 'Hapësinat',
+'defaultns' => 'Përndryshe kërko në këto hapësina:',
+'default' => 'e paracaktueme',
+'prefs-files' => 'Skedat',
+'prefs-custom-css' => 'CSS i përpunuem',
+'prefs-custom-js' => 'JavaScripti i përpunuem',
+'prefs-reset-intro' => 'Mundeni me përdorë këtë faqe për me i kthy parapëlqimet tueja në ato të paracaktuemet e faqes.
+Kjo nuk mundet me u zhbâ.',
+'prefs-emailconfirm-label' => 'Konfirmimi i emailit:',
+'youremail' => 'Adresa e email-it*',
+'username' => 'Nofka e përdoruesit:',
+'uid' => 'Nr. i identifikimit:',
+'prefs-memberingroups' => 'Anëtar i {{PLURAL:$1|grupit|grupeve}}:',
+'yourrealname' => 'Emri juej i vërtetë*',
+'yourlanguage' => 'Ndërfaqja gjuhësore',
+'yournick' => 'Nofka :',
+'badsig' => 'Sintaksa e nënshkrimit asht e pavlefshme, kontrolloni HTML-n.',
+'badsiglength' => 'Emri i zgjedhun asht shumë i gjatë; duhet me pas ma pak se $1 shkronja',
+'yourgender' => 'Gjinia:',
+'gender-unknown' => 'Pacaktue',
+'gender-male' => 'Mashkull',
+'gender-female' => 'Femën',
+'prefs-help-gender' => 'Opcionale: përdoret për adresim korrekt në relacion me gjininë nga softwarei.
+Kjo informatë del publike.',
+'email' => 'Email',
+'prefs-help-realname' => 'Emni i vërtetë âsht opcional.
+Nëse zgjedhni me e dhânë, ky do të përdoret për me jua atribuue punën.',
+'prefs-help-email' => 'Emaili âsht opcional, por mundëson që fjalëkalimi i ri me mujtë me ju dërgue me email nëse e harroni.
+Mundeni me zgjedhe që të tjerët me ju kontaktue përmjet faqe së diskutimit pa e zbulue identitetin tuej të vërtetë.',
+'prefs-help-email-required' => 'Adresa e emailit âsht e domosdoshme.',
+'prefs-info' => 'Informatat bazike',
+'prefs-i18n' => 'Internacionalizimi',
+'prefs-signature' => 'Firma',
# User rights
-'userrights' => 'Ndrysho privilegjet e përdoruesve', # Not used as normal message but as header for the special page itself
+'userrights' => 'Ndrysho privilegjet e përdoruesve',
'userrights-lookup-user' => 'Ndrysho grupet e përdoruesit',
'userrights-user-editname' => 'Fusni emrin e përdoruesit:',
'editusergroup' => 'Redakto grupet e përdoruesve',
@@ -1029,6 +1165,8 @@ Vini re se indeksat e tyne të përmbajtjes së {{SITENAME}} munden me qenë të
'right-editprotected' => 'Redakto faqet e mbrojtura (pa ndryshuar mbrojtjen)',
'right-editinterface' => 'Ndrysho parapamjen e përdoruesit',
'right-editusercssjs' => 'Redakto skedat CSS dhe JS të përdoruesve tjerë',
+'right-editusercss' => 'Redakto skedat CSS të përdoruesve tjerë',
+'right-edituserjs' => 'Redakto skedat JS të përdoruesve tjerë',
'right-noratelimit' => 'Mos u prek nga kufizimet e vlerësimit',
'right-import' => 'Importo faqe nga wiki tjera',
'right-unwatchedpages' => 'Shiko listën e faqeve të pa vëzhguara',
@@ -1077,6 +1215,7 @@ Vini re se indeksat e tyne të përmbajtjes së {{SITENAME}} munden me qenë të
'recentchanges-legend' => 'Opcionet e ndryshimeve të reja',
'recentchangestext' => 'Ndiqni ndryshime së fundmi tek kjo faqe.',
'recentchanges-feed-description' => 'Përcjelli ndryshimet mâ të reja të këtij wiki në këtë feed.',
+'recentchanges-label-newpage' => 'Ky redaktim krijoi një faqe të re',
'rcnote' => "Mâ poshtë {{PLURAL:$1|âsht '''1''' ndryshim|janë '''$1''' ndryshimet e fundit}} në {{PLURAL:$2|ditën|'''$2''' ditët}} e fundit, prej $5, $4.",
'rclistfrom' => 'Trego ndryshimet e reja tue fillue prej $1',
'rcshowhideminor' => '$1 redaktimet e vogla',
@@ -1098,6 +1237,8 @@ Vini re se indeksat e tyne të përmbajtjes së {{SITENAME}} munden me qenë të
# Recent changes linked
'recentchangeslinked' => 'Ndryshimet fqinje',
+'recentchangeslinked-feed' => 'Ndryshimet fqinje',
+'recentchangeslinked-toolbox' => 'Ndryshimet fqinje',
'recentchangeslinked-title' => 'Ndryshimet në lidhje me "$1"',
'recentchangeslinked-summary' => "Kjo âsht nji listë e ndryshimeve të fundit në faqe që lidhen në artikullin e dhânë (apo që janë në kategorinë e dhânë).
Faqet në [[Special:Watchlist|listën tuej të mbikëqyrjes]] janë '''të theksueme'''.",
@@ -1110,18 +1251,20 @@ Faqet në [[Special:Watchlist|listën tuej të mbikëqyrjes]] janë '''të theks
'uploadedimage' => 'ngarkue "[[$1]]"',
# File description page
+'file-anchor-link' => 'Figura',
'filehist' => 'Historiku i dosjes',
'filehist-help' => 'Kliko në datë/orë për me pa skedën si âsht dukë në atë kohë.',
'filehist-current' => 'aktualisht',
'filehist-datetime' => 'Data/Ora',
'filehist-thumb' => 'Pamja e vogël',
+'filehist-thumbtext' => 'Pâmja e vogël e verzionit të $1',
'filehist-user' => 'Përdoruesi',
'filehist-dimensions' => 'Dimenzionet',
'filehist-filesize' => 'Madhësia e figurës/skedës',
'filehist-comment' => 'Koment',
'imagelinks' => 'Vegzat e skedave',
'linkstoimage' => '{{PLURAL:$1|vegzat|$1 vegza}} në vijim lidhen me këtë skedë:',
-'sharedupload' => 'Kjo skedë âsht preh $1 dhe ka mundësi që përdoret prej projekteve tjera.', # $1 is the repo name, $2 is shareduploadwiki(-desc)
+'sharedupload' => 'Kjo skedë âsht preh $1 dhe ka mundësi që përdoret prej projekteve tjera.',
'uploadnewversion-linktext' => 'Ngarko verzion të ri të kësaj skede',
# File deletion
@@ -1227,7 +1370,6 @@ Shih $2 për regjistrin e fshimjeve të fundit.',
'protectexpiry' => 'Afáti',
'protect_expiry_invalid' => 'Data e skadimit asht e pasaktë.',
'protect_expiry_old' => 'Data e skadimit asht në kohën kalueme.',
-'protect-unchain' => 'Ndryshoje lejen e zhvendosjeve',
'protect-text' => "Këtu muneni me shiku dhe me ndryshu nivelin e mbrojtjes për faqen '''<nowiki>$1</nowiki>'''.",
'protect-locked-access' => "Llogaria juej nuk ka privilegjet e nevojitme për me ndryshu nivelin e mbrojtjes. Kufizimet e kësaj faqe janë '''$1''':",
'protect-cascadeon' => 'Kjo faqe aktualisht âsht e mbrojtun sepse përfshihet në {{PLURAL:$1|faqen që ka|faqet, të cilat kanë}} mbrojtje të përfshimjes.
@@ -1245,6 +1387,7 @@ Mundeni me ndryshue nivelin e mbrojtjes për këtë faqe, por kjo nuk ka me prek
# Undelete
'undeletelink' => 'shih/kthe',
+'undeleteviewlink' => 'shih',
'undeletedarticle' => 'u rikthye "[[$1]]"',
# Namespace form on various pages
@@ -1263,6 +1406,7 @@ Mundeni me ndryshue nivelin e mbrojtjes për këtë faqe, por kjo nuk ka me prek
'sp-contributions-newbies' => 'Trego sall kontributet e përdoruesve të rij',
'sp-contributions-blocklog' => 'regjistri i bllokimeve',
+'sp-contributions-talk' => 'Diskuto',
'sp-contributions-search' => 'Kërko te kontributet',
'sp-contributions-username' => 'Adresa IP ose përdoruesi:',
'sp-contributions-submit' => 'Kërko',
@@ -1285,7 +1429,7 @@ Mundeni me ndryshue nivelin e mbrojtjes për këtë faqe, por kjo nuk ka me prek
# Block/unblock
'blockip' => 'Blloko përdoruesin',
-'ipboptions' => '2 orë:2 hours,1 ditë:1 day,3 ditë:3 days,1 javë:1 week,2 javë:2 weeks,1 muej:1 month,3 muej:3 months,6 muej:6 months,1 vjet:1 year,pa kufi:infinite', # display1:time1,display2:time2,...
+'ipboptions' => '2 orë:2 hours,1 ditë:1 day,3 ditë:3 days,1 javë:1 week,2 javë:2 weeks,1 muej:1 month,3 muej:3 months,6 muej:6 months,1 vjet:1 year,pa kufi:infinite',
'ipblocklist' => 'Përdoruesit dhe adresat IP të bllokueme',
'blocklink' => 'bllokoje',
'unblocklink' => 'çblloko',
@@ -1319,7 +1463,7 @@ Në këto raste, duheni me i bashkue manualisht këto faqe nëse dëshironi.",
'move-watch' => 'Mbikqyre kët faqe',
'movepagebtn' => 'Zhvendose faqen',
'pagemovedsub' => 'Zhvendosja u kry',
-'movepage-moved' => '\'\'\'"$1" âsht zhvendosë te "$2"\'\'\'', # The two titles are passed in plain text as $3 and $4 to allow additional goodies in the message.
+'movepage-moved' => '\'\'\'"$1" âsht zhvendosë te "$2"\'\'\'',
'articleexists' => 'Nji faqe me këtë titull tashmâ ekziston, apo keni zgjedhë nji titull të pavlefshëm.
Ju lutemi zgjedhni nji titull tjetër.',
'talkexists' => "'''Vetë faqja u zhvendos me sukses, por faqja e diskutimit nuk mujti me u zhvendosë sepse tashmâ ekziston te titulli i ri.
@@ -1363,6 +1507,7 @@ Ju lutemi bashkoni manualisht.'''",
'tooltip-search-fulltext' => 'Kërko faqet me këtë tekst',
'tooltip-p-logo' => 'Shko te faqja kryesore',
'tooltip-n-mainpage' => 'Shko te faqja kryesore',
+'tooltip-n-mainpage-description' => 'Vizito faqen kryesore',
'tooltip-n-portal' => 'Rreth projektit, çka mundeni me bâ, ku gjinden gjânat.',
'tooltip-n-currentevents' => 'Informacion mâ i thukët rreth ndodhive aktuale',
'tooltip-n-recentchanges' => 'Lista e ndryshimeve të freskëta në wiki',
@@ -1410,6 +1555,7 @@ Lejon dhânien e arsyes në përmbledhje.',
'chick.css' => '/* CSSi i vednosun këtu ka me i prekë shfrytëzuesit e dukjes Chick */',
'simple.css' => '/* CSSi i vednosun këtu ka me i prekë shfrytëzuesit e dukjes Simple */',
'modern.css' => '/* CSSi i vednosun këtu ka me i prekë shfrytëzuesit e dukjes Modern */',
+'vector.css' => '/* CSSi i vednosun këtu ka me i prekë shfrytëzuesit e dukjes Vector */',
'print.css' => '/* CSSi i vednosun këtu ka me e prekë pamjen e shtypjes */',
'handheld.css' => '/* CSSi i vednosun këtu ka me i prekë shfletuesit mobil (të dorës) në dukje e konfigurueme në $wgHandheldStyle */',
@@ -1423,6 +1569,7 @@ Lejon dhânien e arsyes në përmbledhje.',
'chick.js' => '/* Çdo JavaScript këtu ka me u ngarkue për shfrytëzuesit që përdorin dukjen Chick */',
'simple.js' => '/* Çdo JavaScript këtu ka me u ngarkue për shfrytëzuesit që përdorin dukjen Simple */',
'modern.js' => '/* Çdo JavaScript këtu ka me u ngarkue për shfrytëzuesit që përdorin dukjen Modern */',
+'vector.js' => '/* Çdo JavaScript këtu ka me u ngarkue për shfrytëzuesit që përdorin dukjen Vector */',
# Metadata
'nodublincore' => 'Dublin Core RDF metadata nuk janë aktivizue në këtë server.',
@@ -1432,7 +1579,7 @@ Lejon dhânien e arsyes në përmbledhje.',
# Attribution
'anonymous' => '{{PLURAL:$1|Përdorues|Përdorues}} anonim të {{SITENAME}}',
'siteuser' => 'Përdoruesi $1 i {{SITENAME}}',
-'lastmodifiedatby' => 'Kjo faqe âsht redaktue së fundi me $2, $1 prej $3.', # $1 date, $2 time, $3 user
+'lastmodifiedatby' => 'Kjo faqe âsht redaktue së fundi me $2, $1 prej $3.',
'othercontribs' => 'Bazue në punën e $1.',
'others' => 'tjerët',
'siteusers' => '{{SITENAME}} {{PLURAL:$2|përdorues|përdorues}} $1',
@@ -1482,7 +1629,7 @@ Tjerat kanë me mbetë të mshefuna.
* exposuretime
* fnumber
* isospeedratings
-* focallength', # Do not translate list items
+* focallength',
# External editor support
'edit-externally' => 'Ndryshoni kët figurë/skedë me një mjet të jashtëm',
diff --git a/languages/messages/MessagesAls.php b/languages/messages/MessagesAls.php
index 9aa4427f..604f49fc 100644
--- a/languages/messages/MessagesAls.php
+++ b/languages/messages/MessagesAls.php
@@ -1,6 +1,9 @@
<?php
/** Alemannisch
*
+ * See MessagesQqq.php for message documentation incl. usage of parameters
+ * To improve a translation please visit http://translatewiki.net
+ *
* @ingroup Language
* @file
* @comment Deprecated code. Falls back to 'gsw'.
diff --git a/languages/messages/MessagesAm.php b/languages/messages/MessagesAm.php
index 104b892b..9c12fd3e 100644
--- a/languages/messages/MessagesAm.php
+++ b/languages/messages/MessagesAm.php
@@ -26,14 +26,19 @@ $namespaceNames = array(
NS_FILE_TALK => 'ስዕል_ውይይት',
NS_MEDIAWIKI => 'መልዕክት',
NS_MEDIAWIKI_TALK => 'መልዕክት_ውይይት',
- NS_TEMPLATE => 'መልጠፊያ',
- NS_TEMPLATE_TALK => 'መልጠፊያ_ውይይት',
+ NS_TEMPLATE => 'መለጠፊያ',
+ NS_TEMPLATE_TALK => 'መለጠፊያ_ውይይት',
NS_HELP => 'እርዳታ',
NS_HELP_TALK => 'እርዳታ_ውይይት',
NS_CATEGORY => 'መደብ',
NS_CATEGORY_TALK => 'መደብ_ውይይት',
);
+$namespaceAliases = array(
+ 'መልጠፊያ' => NS_TEMPLATE,
+ 'መልጠፊያ_ውይይት' => NS_TEMPLATE_TALK,
+);
+
$specialPageAliases = array(
'Shortpages' => array( 'አጫጭር_ገጾች' ),
'Longpages' => array( 'ረጃጅም_ገጾች' ),
@@ -71,6 +76,7 @@ $messages = array(
'tog-enotifminoredits' => 'ለአነስተኛ የገጽ እርማቶችም ኤመልዕክት ይላክልኝ',
'tog-enotifrevealaddr' => 'ኤመልዕክት አድራሻዬን በማሳወቂያ መልዕክቶች ውስጥ አሳይ',
'tog-shownumberswatching' => 'የሚከታተሉ ተጠቃሚዎችን ቁጥር አሳይ',
+'tog-oldsig' => ' የቀድሞው ፊርማ ቅደመ እይታ',
'tog-fancysig' => 'ጥሬ ፊርማ (ያለራስገዝ ማያያዣ)',
'tog-externaleditor' => 'በቀዳሚነት ውጪያዊ አራሚን ተጠቀም',
'tog-externaldiff' => 'በቀዳሚነት የውጭ ልዩነት-ማሳያን ተጠቀም',
@@ -150,7 +156,7 @@ $messages = array(
'category-media-header' => 'በመደቡ «$1» የተገኙ ፋይሎች፦',
'category-empty' => 'ይህ መደብ አሁን ባዶ ነው።',
'hidden-categories' => '{{PLURAL:$1|የተደበቀ መደብ|የተደበቁ መደቦች}}',
-'hidden-category-category' => 'የተደበቁ መደቦች', # Name of the category where hidden categories will be listed
+'hidden-category-category' => 'የተደበቁ መደቦች',
'category-subcat-count' => '{{PLURAL:$2|በዚሁ መደብ ውስጥ አንድ ንዑስ-መደብ አለ|በዚሁ መደብ ውስጥ {{PLURAL:$1|የሚከተለው ንዕስ-መደብ አለ|የሚከተሉት $1 ንዑስ-መደቦች አሉ}} (በጠቅላላም ከነስውር መደቦች $2 አሉ)}}፦',
'category-subcat-count-limited' => 'በዚሁ መደብ ውስጥ {{PLURAL:$1|የሚከተለው ንዑስ መደብ አለ| የሚከተሉት $1 ንዑስ መደቦች አሉ}}፦',
'category-article-count' => '{{PLURAL:$2|ይኸው መደብ የሚከተለውን መጣጥፍ ብቻ አለው።|በዚሁ መደብ ውስጥ (ከ$2 በጠቅላላ) {{PLURAL:$1|የሚከተለው መጣጥፍ አለ።|የሚከተሉት $1 መጣጥፎች አሉ።}}}}',
@@ -168,10 +174,18 @@ $messages = array(
* [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
-'about' => 'ስለ',
-'article' => 'መጣጥፍ',
-'newwindow' => '(ባዲስ መስኮት ውስጥ ይከፈታል።)',
-'cancel' => 'ሰርዝ',
+'about' => 'ስለ',
+'article' => 'መጣጥፍ',
+'newwindow' => '(ባዲስ መስኮት ውስጥ ይከፈታል።)',
+'cancel' => 'ሰርዝ',
+'moredotdotdot' => 'ተጨማሪ...',
+'mypage' => 'የኔ ገጽ',
+'mytalk' => 'የኔ ውይይት',
+'anontalk' => 'ውይይት ለዚሁ ቁ. አድራሻ',
+'navigation' => 'መቃኘት',
+'and' => '&#32;እና',
+
+# Cologne Blue skin
'qbfind' => 'አግኝ',
'qbbrowse' => 'ቃኝ',
'qbedit' => 'አርም',
@@ -179,15 +193,20 @@ $messages = array(
'qbpageinfo' => 'አግባብ',
'qbmyoptions' => 'የኔ ገጾች',
'qbspecialpages' => 'ልዩ ገጾች',
-'moredotdotdot' => 'ተጨማሪ...',
-'mypage' => 'የኔ ገጽ',
-'mytalk' => 'የኔ ውይይት',
-'anontalk' => 'ውይይት ለዚሁ ቁ. አድራሻ',
-'navigation' => 'መቃኘት',
-'and' => '&#32;እና',
-
-# Metadata in edit box
-'metadata_help' => 'ተጨማሪ መረጃ:',
+'faq' => 'ብጊየጥ (ብዙ ጊዜ የሚጠየቁ ጥያቀዎች)',
+'faqpage' => 'Project:ብጊየጥ',
+
+# Vector skin
+'vector-action-addsection' => 'ርዕስ ጨምር',
+'vector-action-delete' => 'አጥፋ',
+'vector-namespace-category' => 'መደብ',
+'vector-namespace-image' => 'ፋይል',
+'vector-namespace-talk' => 'ውይይት',
+'vector-namespace-user' => 'የተጠቃሚው ገጽ',
+'vector-view-create' => 'አዲስ ፍጠር',
+'vector-view-edit' => 'አርም',
+'vector-view-history' => ' ታሪኩን አሳይ',
+'vector-view-view' => ' የተነበበ',
'errorpagetitle' => 'ስህተት',
'returnto' => '(ወደ $1 ለመመለስ)',
@@ -237,18 +256,21 @@ $messages = array(
'otherlanguages' => 'በሌሎች ቋንቋዎች',
'redirectedfrom' => '(ከ$1 የተዛወረ)',
'redirectpagesub' => 'መምሪያ መንገድ',
-'lastmodifiedat' => 'ይህ ገጽ መጨረሻ የተቀየረው እ.ኣ.አ በ$2፣ $1 ዓ.ም. ነበር።', # $1 date, $2 time
+'lastmodifiedat' => 'ይህ ገጽ መጨረሻ የተቀየረው እ.ኣ.አ በ$2፣ $1 ዓ.ም. ነበር።',
'viewcount' => 'ይህ ገጽ {{PLURAL:$1|አንዴ|$1 ጊዜ}} ታይቷል።',
'protectedpage' => 'የተቆለፈ ገጽ',
'jumpto' => 'ዘልለው ለመሔድ፦',
'jumptonavigation' => 'የማውጫ ቁልፎች',
'jumptosearch' => 'ፍለጋ',
+'view-pool-error' => 'ይቅቅርታ፣ በአሁኑ ወቅት ብዙ ተጠቃሚዎች ገፁን ለማየት እየሞከሩ ስለሆነ ሰርቨሩ ላይ መጨናነቅ ተፈጥሯል
+ስለዚህ እባክዎን ትንሽ ቆይተው በድጋሚ ይዎክሩ።
+
+$1',
# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
'aboutsite' => 'ስለ {{SITENAME}}',
'aboutpage' => 'Project:ስለ',
'copyright' => 'ይዘቱ በ$1 ሥር ይገኛል።',
-'copyrightpagename' => '{{SITENAME}} የቅጂ መብት',
'copyrightpage' => '{{ns:project}}:የማብዛት መብት ደንብ',
'currentevents' => 'ወቅታዊ ጉዳዮች',
'currentevents-url' => 'Project:ወቅታዊ ጉዳዮች',
@@ -256,8 +278,6 @@ $messages = array(
'disclaimerpage' => 'Project:አጠቃላይ የሕግ ነጥቦች',
'edithelp' => 'የማረም መመሪያ',
'edithelppage' => 'Help:የማዘጋጀት እርዳታ',
-'faq' => 'ብጊየጥ (ብዙ ጊዜ የሚጠየቁ ጥያቀዎች)',
-'faqpage' => 'Project:ብጊየጥ',
'helppage' => 'Help:ይዞታ',
'mainpage' => 'ዋናው ገጽ',
'mainpage-description' => 'ዋና ገጽ',
@@ -326,10 +346,6 @@ $messages = array(
'databaseerror' => 'የመረጃ-ቤት ስህተት',
'dberrortext' => 'የመረጃ-ቤት ጥያቄ ስዋሰው ስህተት ሆኗል። ይህ ምናልባት በሶፍትዌሩ ወስጥ ያለ ተውሳክ ሊጠቆም ይችላል። መጨረሻ የተሞከረው መረጃ-ቤት ጥያቄ <blockquote><tt>$1</tt></blockquote> ከተግባሩ «<tt>$2</tt>» ውስጥ ነበረ። MySQL ስህተት «<tt>$3: $4</tt>» መለሰ።',
'dberrortextcl' => 'የመረጃ-ቤት ጥያቄ ስዋሰው ስህተት ሆኗል። መጨረሻ የተሞከረው መረጃ-ቤት ጥያቄ <blockquote><tt>$1</tt></blockquote> ከተግባሩ «<tt>$2</tt>» ውስጥ ነበረ። MySQL ስህተት «<tt>$3: $4</tt>» መለሰ።',
-'noconnect' => 'ይቅርታ! ይህ ዊኪ አሁን የተግባር ችግር ስላጋጠመው የመረጃ-ቤቱን ሰርቨር ሊያገናኝ አይችልም። <br />
-$1',
-'nodb' => 'መረጃ-ቤት $1 ለመምረጥ አልተቻለም',
-'cachederror' => 'የሚከተለው ለተጠየቀው ገጽ የቆጠበው ቅጂ ሆኖ ምናልባት የታደሠ አይሆንም።',
'laggedslavemode' => 'ማስጠንቀቂያ፦ ምናልባት የቅርብ ለውጦች በገጹ ላይ አይታዩም።',
'readonly' => 'መረጃ-ቤት ተቆልፏል',
'enterlockreason' => 'የመቆለፉን ምክንያትና የሚያልቅበትን ሰዓት (በግምት) ይጻፉ።',
@@ -379,7 +395,6 @@ $2",
'virus-unknownscanner' => 'ያልታወቀ antivirus:',
# Login and logout pages
-'logouttitle' => 'የአባል መውጫ',
'logouttext' => "'''አሁን ወጥተዋል።'''
አሁንም በቁጥር መታወቂያዎ ማዘጋጀት ይቻላል። ወይም ደግሞ እንደገና በብዕር ስምዎ መግባት ይችላሉ።
@@ -387,7 +402,6 @@ $2",
'welcomecreation' => '== ሰላምታ፣ $1! ==
የብዕር ስምዎ ተፈጥሯል። ምርጫዎችዎን ለማስተካከል ይችላሉ።',
-'loginpagetitle' => 'የአባል መግቢያ',
'yourname' => 'Username / የብዕር ስም:',
'yourpassword' => 'Password / መግቢያ ቃል',
'yourpasswordagain' => 'መግቢያ ቃልዎን ዳግመኛ ይስጡ',
@@ -409,24 +423,7 @@ $2",
'createaccountmail' => 'በኢ-ሜል',
'badretype' => 'የጻፉት መግቢያ ቃሎች አይስማሙም።',
'userexists' => 'ይህ ብዕር ስም አሁን ይኖራል። እባክዎ፣ ሌላ ብዕር ስም ይምረጡ።',
-'youremail' => 'ኢ-ሜል *',
-'username' => 'የብዕር ስም:',
-'uid' => 'የገባበት ቁ.: #',
-'prefs-memberingroups' => 'ተጠቃሚው {{PLURAL:$1|ያለበት ስብስባ|ያለባቸው ስብስባዎች}}፦',
-'yourrealname' => 'ዕውነተኛ ስም፦',
-'yourlanguage' => 'ቋንቋ',
-'yournick' => 'ቁልምጫ ስም (ለፊርማ)',
-'badsig' => 'ትክክለኛ ያልሆነ ጥሬ ፊርማ፤ HTML ተመልከት።',
-'badsiglength' => 'ያ ቁልምጫ ስም ከመጠን በላይ ይረዝማል፤ ከ$1 ፊደል በታች መሆን አለበት።',
-'yourgender' => 'ሥርዓተ ጾታ',
-'gender-unknown' => ' አታምር',
-'gender-male' => 'ወንድ',
-'gender-female' => ' ሴት',
-'email' => 'ኢ-ሜል',
-'prefs-help-realname' => 'ዕውነተኛ ስምዎን መግለጽ አስፈላጊነት አይደለም። ለመግለጽ ከመረጡ ለሥራዎ ደራሲነቱን ለማስታወቅ ይጠቅማል።',
'loginerror' => 'የመግባት ስኅተት',
-'prefs-help-email' => 'ኢሜል አድራሻን ማቅረብዎ አስፈላጊ አይደለም። ቢያቅርቡት ሌሎች አባላት አድራሻውን ሳያውቁ በፕሮግራሙ አማካኝነት ሊገናኙዎት ተቻለ።',
-'prefs-help-email-required' => 'የኢ-ሜል አድራሻ ያስፈልጋል።',
'nocookiesnew' => 'ብዕር ስም ተፈጠረ፣ እርስዎ ግን ገና አልገቡም። በ{{SITENAME}} ተጠቃሚዎች ለመግባት የቃኚ-ማስታወሻ (cookie) ይጠቀማል። በርስዎ ኮምፒውተር ግን የቃኚ-ማስታወሻ እንዳይሠራ ተደርጓል። እባክዎ እንዲሠራ ያድርጉና በአዲስ ብዕር ስምና መግቢያ ቃልዎ ይግቡ።።',
'nocookieslogin' => 'በ{{SITENAME}} ተጠቃሚዎች ለመግባት የቃኚ-ማስታወሻ (cookie) ይጠቀማል። በርስዎ ኮምፒውተር ግን የቃኚ-ማስታወሻ እንዳይሠራ ተደርጓል። እባክዎ እንዲሠራ ያድርጉና እንደገና ይሞክሩ።',
'noname' => 'የተወሰነው ብዕር ስም ትክክለኛ አይደለም።',
@@ -475,7 +472,6 @@ $2",
'retypenew' => 'አዲስ መግቢያ ቃል ዳግመኛ',
'resetpass_submit' => 'መግቢያ ቃል ለመቀየርና ለመግባት',
'resetpass_success' => 'የመግቢያ ቃልዎ መቀየሩ ተከናወነ! አሁን መግባት ይደረግልዎታል......',
-'resetpass_bad_temporary' => 'ትክክለኛ ያልሆነ ጊዜያዊ መግቢያ ቃል። ምናልባት ከዚህ በፊት መግቢያ ቃልዎን በመከናወን ቀየሩ፤ ወይም አዲስ ጊዜያዊ መግቢያ ቃል ጠይቀዋል።',
'resetpass_forbidden' => 'በ{{SITENAME}} የመግቢያ ቃል መቀየር አይቻልም።',
'resetpass-no-info' => 'ይህንን ገጽ በቀጥታ ለማግኘት አስቀድሞ መግባት ያስፈልጋል።',
'resetpass-submit-loggedin' => 'ቃልዎ ይቀየር',
@@ -547,7 +543,6 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
'blockededitsource' => "በ'''$1''' ላይ '''የእርስዎ ለውጦች''' ጽሕፈት ከዚህ ታች ይታያሉ፦",
'whitelistedittitle' => 'ለማዘጋጀት መግባት አስቀድሞ ያስፈልጋል',
'whitelistedittext' => 'ገጾችን ለማዘጋጀት $1 አስቀድሞ ያስፈልግዎታል።',
-'confirmedittitle' => 'ለማዘጋጀት የኢ-ሜል ማረጋገጫ ያስፈልጋል።',
'confirmedittext' => 'ገጽ ማዘጋጀት ሳይችሉ፣ አስቀድመው የኢ-ሜል አድራሻዎን ማረጋገጥ አለብዎት። እባክዎ፣ በ[[Special:Preferences|ምርጫዎችዎ]] በኩል ኢ-ሜል አድራሻዎን ያረጋግጡ።',
'nosuchsectiontitle' => 'የማይኖር ክፍል',
'nosuchsectiontext' => 'የማይኖር ክፍል ለማዘጋጀት ሞክረዋል።',
@@ -563,7 +558,8 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
'anontalkpagetext' => "----''ይኸው ገጽ ገና ያልገባ ወይም ብዕር ስም የሌለው ተጠቃሚ ውይይት ገጽ ነው። መታወቂያው በ[[ቁጥር አድራሻ]] እንዲሆን ያስፈልጋል። አንዳንዴ ግን አንድ የቁጥር አድራሻ በሁለት ወይም በብዙ ተጠቃሚዎች የጋራ ሊሆን ይችላል። ስለዚህ ለርስዎ የማይገባ ውይይት እንዳይደርስልዎ፣ [[Special:UserLogin|«መግቢያ»]] በመጫን የብዕር ስም ለማውጣት ይችላሉ።''",
'noarticletext' => 'በአሁኑ ወቅት በዚህ ገጽ ላይ ጽሑፍ የለም፤ ነገር ግን በሌሎች ገጾች ላይ [[Special:Search/{{PAGENAME}}|ይህን አርዕስት መፈለግ]]፣ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ከርዕሱ ጋር የተዛመዱ መዝገቦችን መፈልግ]፣ ወይም [{{fullurl:{{FULLPAGENAME}}|action=edit}} አዲስ ገፅ ሊያዘጋጁ] ይችላሉ።',
'userpage-userdoesnotexist' => 'የብዕር ስም «$1» አልተመዘገበም። እባክዎ ይህን ገጽ ለመፍጠር/ ለማስተካከል የፈለጉ እንደ ሆነ ያረጋግጡ።',
-'usercssjsyoucanpreview' => "'''ምክር፦''' ሳይቆጠብ አዲስ CSS/JSዎን ለመሞከር 'ቅድመ እይታ' የሚለውን ይጫኑ።",
+'usercssyoucanpreview' => "'''ምክር፦''' ሳይቆጠብ አዲስ CSSዎን ለመሞከር 'ቅድመ እይታ' የሚለውን ይጫኑ።",
+'userjsyoucanpreview' => "'''ምክር፦''' ሳይቆጠብ አዲስ JSዎን ለመሞከር 'ቅድመ እይታ' የሚለውን ይጫኑ።",
'usercsspreview' => "'''ማስታወሻ፦ CSS-ዎን ለሙከራ ብቻ እያዩ ነው፤ ገና አልተቆጠበም!'''",
'userjspreview' => "'''ማስታወሻ፦ JavaScriptዎን ለሙከራ ብቻ እያዩ ነው፤ ገና አልተቆጠበም!'''",
'userinvalidcssjstitle' => "'''ማስጠንቀቂያ፦''' «$1» የሚባል መልክ የለም። ልዩ .css እና .js ገጾች በትንንሽ እንግሊዝኛ ፊደል መጀመር እንዳለባቸው ያስታውሱ። ለምሳሌ፦ {{ns:user}}:Foo/monobook.css ልክ ነው እንጂ {{ns:user}}:Foo/Monobook.css አይደለም።",
@@ -598,9 +594,9 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
'semiprotectedpagewarning' => "'''ማስታወቂያ፦''' ይኸው ገጽ ከቋሚ አዛጋጆች በተቀር በማንም እንዳይለወጥ ተቆልፏል።",
'cascadeprotectedwarning' => "'''ማስጠንቀቂያ፦''' ይህ ገጽ በመጋቢ ብቻ እንዲታረም ተቆልፏል። ምክንያቱም {{PLURAL:$1|በሚከተለው በውስጡ የሚያቆልፍ ገጽ|በሚከተሉ በውስጡ ይሚያቆልፉ ገጾች}} ውስጥ ይገኛል።",
'titleprotectedwarning' => "'''ማስጠንቀቂያ፦ ይህ ገጽ አንዳንድ ተጠቃሚ ብቻ ሊፈጠር እንዲችል ተቆልፏል።'''",
-'templatesused' => 'በዚሁ ገጽ ላይ የሚገኙት መለጠፊያዎች እነዚህ ናቸው፦',
-'templatesusedpreview' => 'በዚሁ ቅድመ-እይታ የሚገኙት መልጠፊያዎች እነዚህ ናቸው፦',
-'templatesusedsection' => 'በዚሁ ክፍል የተጠቀሙት መልጠፊያዎች፦',
+'templatesused' => '{{PLURAL:$1|ምሳሌዎች|ምሳሌዎች}} used on this page:',
+'templatesusedpreview' => 'ለዚህ ገፅ የሚሆኑ {{PLURAL:$1|ምሳሌ|ምሳሌዎች}} :',
+'templatesusedsection' => 'በዚሁ ክፍል የተጠቀሙት መለጠፊያዎች፦',
'template-protected' => '(የተቆለፈ)',
'template-semiprotected' => '(በከፊል የተቆለፈ)',
'hiddencategories' => 'ይህ ገጽ በ{{PLURAL:$1|1 የተደበቀ መደብ|$1 የተደበቁ መድቦች}} ውስጥ ይገኛል።',
@@ -610,14 +606,13 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
'permissionserrors' => 'የፈቃድ ስሕተቶች',
'permissionserrorstext' => 'ያ አድራጎት አይቻልም - {{PLURAL:$1|ምክንያቱም|ምክንያቶቹም}}፦',
'permissionserrorstext-withaction' => '$2 አልተፈቀዱም፤ {{PLURAL:$1|ምክንያቱም|ምክንያቱም}}:',
-'recreate-deleted-warn' => ":<strong><big>'''ማስጠንቀቂያ፦ ይኸው አርእስት ከዚህ በፊት የጠፋ ገጽ ነው!'''</big></strong>
+'recreate-moveddeleted-warn' => ":<strong>'''ማስጠንቀቂያ፦ ይኸው አርእስት ከዚህ በፊት የጠፋ ገጽ ነው!'''</strong>
*እባክዎ፥ ገጹ እንደገና እንዲፈጠር የሚገባ መሆኑን ያረጋግጡ።
*የገጹ መጥፋት ዝርዝር ከዚህ ታች ይታያል።",
-'deleted-notice' => 'ይኸው ገጽ ከዚህ በፊት የጠፋ ነው።
+'moveddeleted-notice' => 'ይኸው ገጽ ከዚህ በፊት የጠፋ ነው።
የገጹ መጥፋት ዝርዝር ከዚህ ታች ይታያል።',
-'deletelog-fulllog' => 'ሙሉ መዝገብ ለማየት',
'edit-hook-aborted' => 'ለውጡ በሜንጦ ተቋረጠ።
ምንም ምክንያት አልሰጠም።',
'edit-gone-missing' => 'ገጹን ማሳደስ አልተቻለም። እንደ ጠፋ ይመስላል።',
@@ -644,7 +639,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
'currentrev' => 'የአሁኑ እትም',
'currentrev-asof' => 'በ$1 የታተመው ያሁኑኑ እትም',
'revisionasof' => 'እትም በ$1',
-'revision-info' => 'የ$1 ዕትም (ከ$2 ተዘጋጅቶ)', # Additionally available: $3: revision id
+'revision-info' => 'የ$1 ዕትም (ከ$2 ተዘጋጅቶ)',
'previousrevision' => '← የፊተኛው እትም',
'nextrevision' => 'የሚከተለው እትም →',
'currentrevisionlink' => '«የአሁኑን እትም ለመመልከት»',
@@ -655,7 +650,6 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
'page_last' => 'ኋለኞች',
'histlegend' => "ከ2 እትሞች መካከል ልዩነቶቹን ለመናበብ፦ በ2 ክብ ነገሮች ውስጥ ምልክት አድርገው «የተመረጡትን እትሞች ለማነፃፀር» የሚለውን ተጭነው የዛኔ በቀጥታ ይሄዳሉ።<br /> መግለጫ፦ (ከአሁን) - ከአሁኑ እትም ያለው ልዩነት፤ (ካለፈው) - ቀጥሎ ከቀደመው እትም ያለው ልዩነት፤<br /> «'''ጥ'''» ማለት ጥቃቅን ለውጥ ነው።",
'history-fieldset-title' => 'የቀደሙት ዕትሞች ፍለጋ',
-'deletedrev' => '[የተደለዘ]',
'histfirst' => 'ቀድመኞች',
'histlast' => 'ኋለኞች',
'historysize' => '($1 byte)',
@@ -664,7 +658,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
# Revision feed
'history-feed-title' => 'የዕትሞች ታሪክ',
'history-feed-description' => 'በዊኪ ላይ የዕትሞች ታሪክ ለዚሁ ገጽ',
-'history-feed-item-nocomment' => '$1 በ$2', # user at time
+'history-feed-item-nocomment' => '$1 በ$2',
'history-feed-empty' => 'የተጠየቀው ገጽ አይኖርም። ምናልባት ከዊኪው ጠፍቷል፣ ወይም ወደ አዲስ ስም ተዛወረ። ለተመሳሳይ አዲስ ገጽ [[Special:Search|ፍለጋ]] ይሞክሩ።',
# Revision deletion
@@ -677,11 +671,11 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
'revdelete-selected' => "'''ከ [[:$1]] {{PLURAL:$2|የተመረጡ ዝርያዎች|የተመረጡ ዝርያዎች}}:'''",
'logdelete-selected' => "'''{{PLURAL:$1|የተመረጠ መዝገብ ድርጊት|የተመረጡ መዝገብ ድርጊቶች}}፦'''",
'revdelete-hide-text' => 'የእትሙ ጽሕፈት ይደበቅ',
+'revdelete-hide-image' => 'የፋይሉ ይዞታ ይደበቅ',
'revdelete-hide-name' => 'ድርጊትና ግቡ ይደበቅ',
'revdelete-hide-comment' => 'ማጠቃለያ ይደበቅ',
'revdelete-hide-user' => 'የአዘጋጁ ብዕር ስም ወይም ቁ. አድርሻ ይደበቅ',
'revdelete-suppress' => 'መረጃ ከመጋቢዎችና ከሌሎች ይደበቅ።',
-'revdelete-hide-image' => 'የፋይሉ ይዞታ ይደበቅ',
'revdelete-log' => 'ምክንያቱ፦',
'revdelete-submit' => 'በተመረጠው ዕትም ይደረግ',
'revdel-restore' => 'እይታን ለማስተካከል',
@@ -726,28 +720,8 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
'difference' => '(በ2ቱ እትሞቹ ዘንድ ያለው ልዩነት)',
'lineno' => 'መስመር፡ $1፦',
'compareselectedversions' => 'የተመረጡትን እትሞች ለማነፃፀር',
-'wikicodecomparison' => 'Wikitext ማነፃፀሪያ',
'editundo' => 'ለውጡ ይገለበጥ',
'diff-multi' => '(ከነዚህ 2 እትሞች መካከል {{PLURAL:$1|አንድ ለውጥ ነበር|$1 ለውጦች ነበሩ}}።)',
-'diff-movedto' => 'ወደ $1 ተዛወረ',
-'diff-added' => '$1 ጨመረ',
-'diff-changedto' => 'ወደ $1 ተቀየረ',
-'diff-movedoutof' => 'ከ$1 ተዛወረ',
-'diff-removed' => '$1 አነሣ',
-'diff-changedfrom' => 'ከ$1 ተቀየረ',
-'diff-with' => '&#32;ከነ $1 $2',
-'diff-with-final' => '&#32;እና $1 $2',
-'diff-width' => 'ስፋት',
-'diff-height' => 'ቁመት',
-'diff-blockquote' => "'''ጥቅስ'''",
-'diff-table' => "'''ሰንጠረዥ'''",
-'diff-tr' => "'''ተርታ'''",
-'diff-hr' => "'''አድማሳዊ መስመር'''",
-'diff-dd' => "'''ትርጒም'''",
-'diff-a' => "'''መያያዣ'''",
-'diff-b' => "'''ጉልህ ፊደላት'''",
-'diff-big' => "'''ትልቅ'''",
-'diff-del' => "'''ጠፋ'''",
# Search results
'searchresults' => 'የፍለጋ ውጤቶች',
@@ -755,22 +729,19 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
'searchresulttext' => 'በተጨማሪ ስለ ፍለጋዎች ለመረዳት፣ [[{{MediaWiki:Helppage}}]] ያንብቡ።',
'searchsubtitle' => 'እየፈለግህ/ሽ ያለሀው/ሽው \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|all pages starting with "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|all ከሱጋር የተያያዙ በሙላ "$1"]])',
'searchsubtitleinvalid' => "ለ'''$1''' ፈለጉ",
-'noexactmatch' => "በ«$1» አርዕስት የሚሰየም መጣጥፍ '''አልተገኘም'''፤ እርሶ ግን [[:$1|ሊፈጥሩት ይችላሉ]]... ።",
-'noexactmatch-nocreate' => "'''«$1» የሚባል ገጽ የለም።'''",
'toomanymatches' => 'ከመጠን በላይ ያሉ ስምምነቶች ተመለሱ፤ እባክዎ ሌላ ጥያቄ ይሞክሩ።',
'titlematches' => 'የሚስማሙ አርዕስቶች',
'notitlematches' => 'የሚስማሙ አርዕስቶች የሉም',
'textmatches' => 'ጽሕፈት የሚስማማባቸው ገጾች',
'notextmatches' => 'ጽሕፈት የሚስማማባቸው ገጾች የሉም',
-'prevn' => 'ፊተኛ $1',
-'nextn' => 'ቀጥሎ $1',
-'viewprevnext' => 'በቁጥር ለማየት፡ ($1) ($2) ($3).',
+'prevn' => 'ፊተኛ {{PLURAL:$1|$1}}',
+'nextn' => 'ቀጥሎ {{PLURAL:$1|$1}}',
+'viewprevnext' => 'በቁጥር ለማየት፡ ($1 {{int:pipe-separator}} $2) ($3).',
'searchmenu-legend' => 'የፍለጋ ምርጫዎች',
'searchmenu-exists' => "'''\"[[:\$1]]\" የሚባል መጣጥፍ በዚሁ ዊኪ ላይ አለ።'''",
'searchmenu-new' => "'''\"[[:\$1]]\" የሚባል መጣጥፍ ይፈጠር?'''",
'searchhelp-url' => 'Help:ይዞታ',
'searchprofile-articles' => 'ይዞታ ያላቸው መጣጥፎች',
-'searchprofile-articles-and-proj' => 'የይዞታና የመርሃገብሩ ገጾች',
'searchprofile-project' => 'የመርሃግብሩ ገጾች',
'searchprofile-images' => 'ፋይሎች',
'searchprofile-everything' => 'ሁሉም',
@@ -779,7 +750,6 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
'searchprofile-images-tooltip' => 'ለፋይሎች ለመፈለግ',
'searchprofile-everything-tooltip' => 'ይዞታውን ሁሉ (ከነውይይት ገጾች) ለመፈለግ',
'searchprofile-advanced-tooltip' => 'በልዩ ክፍለ-ዊኪዎች ለመፈለግ',
-'prefs-search-nscustom' => 'ልዩ ክፍለዊኪዎች ለመፈለግ፦',
'search-result-size' => '$1 ({{PLURAL:$2|1 ቃል|$2 ቃላት}})',
'search-result-score' => 'ተገቢነት፦ $1%',
'search-redirect' => '(መምሪያ መንገድ $1)',
@@ -795,7 +765,6 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
'searchall' => 'ሁሉ',
'showingresults' => 'ከ ቁ.#<b>$2</b> ጀምሮ እስከ <b>$1</b> ውጤቶች ድረስ ከዚህ በታች ይታያሉ።',
'showingresultsnum' => "ከ#'''$2''' ጀምሮ {{PLURAL:$3|'''1''' ውጤት|'''$3''' ውጤቶች}} ከዚህ ታች ማየት ይቻላል።",
-'showingresultstotal' => "ከዚህ ታች {{PLURAL:$4|ውጤት '''$1''' (ከ '''$3''') ይታያል።|ውጤቶች '''$1 - $2''' ከ '''$3''' ይታያሉ።}}",
'nonefound' => "\"ማስገንዘቢያ\" የተወሰኑ ፍለጋዎች ብቻ በዋናው ስምምነት መሰረት ተፈልገው ይገኛሉ::
ከምትፈልገው ነገር በፊት ''all:''ን በማስገባት ፍለጋህን ደግመህ ሞክር ይህም ሁሉንም የፍለጋ ቦታዎች እንድታዳርስ ይረዳሃል።",
'search-nonefound' => 'ለጥያቄው ምንም የሚስማማ ውጤት አልተገኘም።',
@@ -804,34 +773,30 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
'powersearch-ns' => 'በነዚሁ ክፍለ-ዊኪዎች ይፈልግ:',
'powersearch-redir' => 'መምሪያ መንገዶቹም ይዘርዝሩ',
'powersearch-field' => 'ለዚሁ ጽሕፈት ይፈልግ፦',
+'powersearch-toggleall' => ' ሁሉም',
+'powersearch-togglenone' => ' ምንም',
'search-external' => 'አፍአዊ ፍለጋ',
'searchdisabled' => '{{SITENAME}} ፍለጋ አሁን እንዳይሠራ ተደርጓል። ለጊዜው ግን በGoogle ላይ መፈልግ ይችላሉ። የ{{SITENAME}} ይዞታ ማውጫ በዚያ እንዳልታደሰ ማቻሉ ያስታውሱ።',
+# Quickbar
+'qbsettings-none' => ' ምንም',
+'qbsettings-fixedleft' => 'በግራ የተለጠፈ',
+'qbsettings-fixedright' => 'በቀኝ የተለጠፈ',
+'qbsettings-floatingleft' => 'በግራ ተንሳፋፊ',
+'qbsettings-floatingright' => 'በቀኝ ተንሳፋፊ',
+
# Preferences page
'preferences' => 'ምርጫዎች፤',
'mypreferences' => 'ምርጫዎች፤',
'prefs-edits' => 'የለውጦች ቁጥር:',
'prefsnologin' => 'ገና አልገቡም',
-'prefsnologintext' => 'ምርጫዎችዎን ለማስተካከል አስቀድሞ <span class="plainlinks">[{{fullurl:Special:UserLogin|returnto=$1}} መግባት]</span> ያስፈልግዎታል።',
-'prefsreset' => 'ምርጫዎች ከመቆጠቢያ ታድሰዋል።',
-'qbsettings-none' => ' ምንም',
-'qbsettings-fixedleft' => 'በግራ የተለጠፈ',
-'qbsettings-fixedright' => 'በቀኝ የተለጠፈ',
-'qbsettings-floatingleft' => 'በግራ ተንሳፋፊ',
-'qbsettings-floatingright' => 'በቀኝ ተንሳፋፊ',
+'prefsnologintext' => 'ምርጫዎችዎን ለማስተካከል አስቀድሞ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} መግባት]</span> ያስፈልግዎታል።',
'changepassword' => 'መግቢያ ቃልዎን ለመቀየር',
-'skin' => 'የድህረ-ገጽ መልክ',
+'prefs-skin' => 'የድህረ-ገጽ መልክ',
'skin-preview' => 'ቅድመ-ዕይታ',
-'math' => 'የሂሳብ መልክ',
-'dateformat' => 'ያውሮፓ አቆጣጠር ዘመን ሥርዓት',
+'prefs-math' => 'የሂሳብ መልክ',
'datedefault' => 'ግድ የለኝም',
-'datetime' => 'ዘመንና ሰዓት',
-'math_failure' => 'ዘርዛሪው ተሳነው',
-'math_unknown_error' => 'የማይታወቅ ስኅተት',
-'math_unknown_function' => 'የማይታወቅ ተግባር',
-'math_lexing_error' => 'የlexing ስህተት',
-'math_syntax_error' => 'የሰዋሰው ስህተት',
-'math_bad_output' => 'ወደ math ውጤት ዶሴ መጻፍ ወይም መፍጠር አይቻልም',
+'prefs-datetime' => 'ዘመንና ሰዓት',
'prefs-personal' => 'ያባል ዶሴ',
'prefs-rc' => 'የቅርቡ ለውጦች ዝርዝር',
'prefs-watchlist' => 'የሚከታተሉ ገጾች',
@@ -841,9 +806,10 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
'prefs-watchlist-edits-max' => '(ከ1,000 ለውጥ በላይ አይሆንም)',
'prefs-misc' => 'ልዩ ልዩ ምርጫዎች',
'prefs-resetpass' => 'መግቢያ ቃል ለመቀየር',
+'prefs-rendering' => ' አቀራረብ',
'saveprefs' => 'ይቆጠብ',
'resetprefs' => 'እንደ በፊቱ ይታደስ',
-'textboxsize' => 'የማዘጋጀት ምርጫዎች',
+'prefs-editing' => 'የማዘጋጀት ምርጫዎች',
'prefs-edit-boxsize' => 'ይህ የማዘጋጀት ሳጥን ስፋት ለመወሰን ነው።',
'rows' => 'በማዘጋጀቱ ሰንጠረዥ ስንት ተርታዎች?',
'columns' => 'ስንት ዓምዶችስ?',
@@ -856,9 +822,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
'recentchangescount' => 'በዝርዝርዎ ላይ ስንት ለውጥ ይታይ? (እስከ 500)',
'savedprefs' => 'ምርጫዎችህ ተቆጥበዋል።',
'timezonelegend' => 'የሰዓት ክልል',
-'timezonetext' => '¹ከ Server time (UTC) ያለው ልዩነት (በሰዓቶች ቁጥር) (እንደ ኢትዮጵያ ጊዜ ለማድረግ እንደገና ስድስት ሰዓት ይጨምሩ።)',
'localtime' => 'የክልሉ ሰዓት (Local time)',
-'timezoneselect' => 'የሰዓት ክልል፦',
'timezoneuseoffset' => 'ሌላ (ኦፍ ሴት ለመወሰን)',
'timezoneoffset' => 'ኦፍ ሰት¹',
'servertime' => 'የሰርቨሩ ሰዓት',
@@ -878,10 +842,31 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
'prefs-namespaces' => 'ክፍለ-ዊኪዎች',
'defaultns' => 'በመጀመርያው ፍለጋዎ በነዚህ ክፍለ-ዊኪዎች ብቻ ይደረግ:',
'default' => 'ቀዳሚ',
-'files' => 'የስዕሎች መጠን',
+'prefs-files' => 'የስዕሎች መጠን',
+'youremail' => 'ኢ-ሜል *',
+'username' => 'የብዕር ስም:',
+'uid' => 'የገባበት ቁ.: #',
+'prefs-memberingroups' => 'ተጠቃሚው {{PLURAL:$1|ያለበት ስብስባ|ያለባቸው ስብስባዎች}}፦',
+'yourrealname' => 'ዕውነተኛ ስም፦',
+'yourlanguage' => 'ቋንቋ',
+'yournick' => 'ቁልምጫ ስም (ለፊርማ)',
+'badsig' => 'ትክክለኛ ያልሆነ ጥሬ ፊርማ፤ HTML ተመልከት።',
+'badsiglength' => 'ያ ቁልምጫ ስም ከመጠን በላይ ይረዝማል፤ ከ$1 ፊደል በታች መሆን አለበት።',
+'yourgender' => 'ሥርዓተ ጾታ',
+'gender-unknown' => ' አታምር',
+'gender-male' => 'ወንድ',
+'gender-female' => ' ሴት',
+'email' => 'ኢ-ሜል',
+'prefs-help-realname' => 'ዕውነተኛ ስምዎን መግለጽ አስፈላጊነት አይደለም። ለመግለጽ ከመረጡ ለሥራዎ ደራሲነቱን ለማስታወቅ ይጠቅማል።',
+'prefs-help-email' => 'ኢሜል አድራሻን ማቅረብዎ አስፈላጊ አይደለም። ቢያቅርቡት ሌሎች አባላት አድራሻውን ሳያውቁ በፕሮግራሙ አማካኝነት ሊገናኙዎት ተቻለ።',
+'prefs-help-email-required' => 'የኢ-ሜል አድራሻ ያስፈልጋል።',
+'prefs-info' => ' መሰረታዊ መረጃ',
+'prefs-signature' => 'ፊርማ',
+'prefs-dateformat' => ' የቀን ቅርፀት',
+'prefs-display' => 'የማሳያ አማራጮች',
# User rights
-'userrights' => 'የአባል መብቶች ለማስተዳደር', # Not used as normal message but as header for the special page itself
+'userrights' => 'የአባል መብቶች ለማስተዳደር',
'userrights-lookup-user' => 'የ1 አባል ማዕረግ ለማስተዳደር',
'userrights-user-editname' => 'ለዚሁ ብዕር ስም፦',
'editusergroup' => 'የአባሉ ማዕረግ ለማስተካከል',
@@ -988,6 +973,10 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
'recentchanges-legend' => 'የቅርብ ለውጥ አማራጮች፦',
'recentchangestext' => 'በዚሁ ገጽ ላይ በቅርብ ጊዜ የወጡ አዳዲስ ለውጦች ለመከታተል ይችላሉ።',
'recentchanges-feed-description' => 'በዚህ ዊኪ ላይ በቅርብ ግዜ የተለወጠውን በዚሁ feed መከታተል ይችላሉ',
+'recentchanges-label-legend' => 'መግለጫ፦ $1።',
+'recentchanges-legend-newpage' => '$1 - አዲስ ገጽ',
+'recentchanges-legend-minor' => '$1 - ጥቃቅን ለውጥ',
+'recentchanges-legend-bot' => '$1 - የቦት (ሎሌ) ለውጥ',
'rcnote' => "ከ$5 $4 እ.ኤ.አ. {{PLURAL:$2|ባለፈው 1 ቀን|ባለፉት '''$2''' ቀኖች}} {{PLURAL:$1|የተደረገው '''1''' ለውጥ እታች ይገኛል|የተደረጉት '''$1''' መጨረሻ ለውጦች እታች ይገኛሉ}}።",
'rcnotefrom' => "ከ'''$2''' ጀምሮ የተቀየሩት ገጾች (እስከ '''$1''' ድረስ) ክዚህ በታች ይታያሉ።",
'rclistfrom' => '(ከ $1 ጀምሮ አዲስ ለውጦቹን ለማየት)',
@@ -1013,6 +1002,8 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
# Recent changes linked
'recentchangeslinked' => 'የተዛመዱ ለውጦች',
+'recentchangeslinked-feed' => 'የተዛመዱ ለውጦች',
+'recentchangeslinked-toolbox' => 'የተዛመዱ ለውጦች',
'recentchangeslinked-title' => 'በ«$1» በተዛመዱ ገጾች ቅርብ ለውጦች',
'recentchangeslinked-noresult' => 'በተመለከተው ጊዜ ውስጥ ከዚህ በተያየዙት ገጾች ላይ ምንም ለውጥ አልነበረም።',
'recentchangeslinked-summary' => "ከዚሁ ገጽ የተያየዙት ሌሎች ጽሑፎች ቅርብ ለውጦች ከታች ይዘረዝራሉ።
@@ -1024,7 +1015,6 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
# Upload
'upload' => 'ፋይል / ሥዕል ለመላክ',
'uploadbtn' => 'ፋይሉ ይላክ',
-'reupload' => 'እንደገና ለመላክ',
'reuploaddesc' => 'ለመሰረዝና ወደ መላኪያ ማመልከቻ ለመመለስ',
'uploadnologin' => 'ገና አልገቡም',
'uploadnologintext' => 'ፋይል ለመላክ አስቀድሞ [[Special:UserLogin|መግባት]] ያስፈልግዎታል።',
@@ -1065,7 +1055,6 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
* የሚላክ ፋይል ስም፦ '''<tt>[[:$1]]</tt>'''
* የሚኖር (የቆየው) ፋይል ስም፦ '''<tt>[[:$2]]</tt>'''
እባክዎ ሌላ ስም ይምረጡ።",
-'fileexists-thumb' => "<center>'''የሚኖር ፋይል'''</center>",
'fileexists-thumbnail-yes' => "ፋይሉ የተቀነሰ መጠን ያለበት ስዕል ''(ናሙና)'' እንደ ሆነ ይመስላል። [[$1|thumb]]
እባክዎ ፋይሉን '''<tt>[[:$1]]</tt>''' ይመለከቱ።
ያው ፋይል ለዚሁ ፋይል አንድ አይነት በኦሪጂናሉ መጠን ቢሆን ኖሮ፣ ተጨማሪ ናሙና መላክ አያስፈልግም።",
@@ -1081,7 +1070,6 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
'overwroteimage' => 'የ«[[$1]]» አዲስ ዕትም ላከ',
'uploaddisabled' => 'ፋይል መላክ አይቻልም',
'uploaddisabledtext' => 'ፋይል መላክ በዚህ ዊኪ አይቻልም።',
-'uploadcorrupt' => 'ይህ ፋይል ብልሹ ነው፤ ወይም ትክክለኛ ያልሆነ ቅጥያ አለው። እባክዎ ፋይሉን ተመልክተው እንደገና ይላኩት።',
'uploadvirus' => 'ፋይሉ ቫይረስ አለበት! ዝርዝር፦ $1',
'sourcefilename' => 'የቆየው የፋይሉ ስም፦',
'destfilename' => 'የፋይሉ አዲስ ስም፦',
@@ -1109,6 +1097,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
ምናልባትም በሌላ ጊዜ ትራፊኩ ይቀነሳል።',
'license' => 'የፈቃድ አይነት፦',
+'license-header' => 'የፈቃድ አይነት፦',
'nolicense' => 'ምንም አልተመረጠም',
'license-nopreview' => '(ቅድመ-ዕይታ አይገኝም)',
'upload_source_url' => ' (ትክክለኛ፣ በግልጽ የሚገኝ URL)',
@@ -1125,6 +1114,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
'listfiles_description' => 'ማጠቃለያ',
# File description page
+'file-anchor-link' => 'ፋይል',
'filehist' => 'የፋይሉ ታሪክ',
'filehist-help' => 'የቀድሞው ዕትም ካለ ቀን/ሰዓቱን በመጫን መመልከት ይቻላል።',
'filehist-deleteall' => 'ሁሉን ለማጥፋት',
@@ -1145,12 +1135,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
'morelinkstoimage' => 'ለዚህ ፋይል [[Special:WhatLinksHere/$1|ተጨማሪ መያያዣዎችን]] ለማየት።',
'redirectstofile' => 'ለዚህ ፋይል {{PLURAL:$1|የሚከተለው ፋይል መምሪያ መንገድ አለ|የሚከተሉት $1 ፋይሎች መምሪያ መንገዶች አሉ}}፦',
'duplicatesoffile' => '{{PLURAL:$1|የሚከተለው ፋይል የዚህ ፋይል ቅጂ ነው|የሚከተሉት $1 ፋይሎች የዚሁ ፋይል ቅጂዎች ናቸው}}፦',
-'sharedupload' => 'ይህ ፋይል ከጋራ ምንጭ ($1) የተቀሰመ ነው። በማንኛውም ዊኪ ላይ ሊጠቅም ይቻላል።', # $1 is the repo name, $2 is shareduploadwiki(-desc)
-'shareduploadwiki' => 'በተጨማሪ ለመረዳት $1 ይዩ።',
-'shareduploadwiki-desc' => 'በዚያ በ$1 የሚታየው መግለጫ እንዲህ ይላል፦',
-'shareduploadwiki-linktext' => 'ፋይል መግለጫ ገጹ',
-'noimage' => 'በዚህ ስም የሚታወቅ ፋይል የለም፤ እርስዎ ግን $1 ይችላሉ።',
-'noimage-linktext' => 'ሊልኩት',
+'sharedupload' => 'ይህ ፋይል ከጋራ ምንጭ ($1) የተቀሰመ ነው። በማንኛውም ዊኪ ላይ ሊጠቅም ይቻላል።',
'uploadnewversion-linktext' => 'ለዚሁ ፋይል አዲስ ዕትም ለመላክ',
# File reversion
@@ -1231,8 +1216,8 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
'brokenredirects' => 'ሰባራ መምሪያ መንገዶች',
'brokenredirectstext' => 'እነዚህ መምሪያ መንገዶች ወደማይኖር ጽሑፍ ይመራሉ።',
-'brokenredirects-edit' => '(ለማስተካከል)',
-'brokenredirects-delete' => '(ለማጥፋት)',
+'brokenredirects-edit' => 'ለማስተካከል',
+'brokenredirects-delete' => 'ለማጥፋት',
'withoutinterwiki' => 'በሌሎች ቋንቋዎች ያልተያያዙ',
'withoutinterwiki-summary' => 'እነዚህ ጽሑፎች «በሌሎች ቋንቋዎች» ሥር ወደሆኑት ሌሎች ትርጉሞች ገና አልተያያዙም።',
@@ -1443,7 +1428,7 @@ $NEWPAGE
ከክብር ጋር፣ የ{{SITENAME}} ኢሜል-ማስታወቂያ መርሃግብር።
--
-የሚከታተሉት ገጾች ዝርዝር ለመቀየር፣ {{fullurl:{{ns:special}}:Watchlist/edit}} ይጎበኙ።
+የሚከታተሉት ገጾች ዝርዝር ለመቀየር፣ {{fullurl:{{#special:Watchlist}}/edit}} ይጎበኙ።
በተጨማሪ ለመረዳት፦
{{fullurl:{{MediaWiki:Helppage}}}}',
@@ -1488,8 +1473,8 @@ $NEWPAGE
'alreadyrolled' => 'የ[[:$1]] መጨረሻ ለውጥ በ[[User:$2|$2]] ([[User talk:$2|ውይይት]]) መገልበት አይቻልም፤ ሌላ ሰው አሁን ገጹን መልሶታል።
መጨረሻው ለውጥ በ[[User:$3|$3]] ([[User talk:$3|ውይይት]]) ነበረ።',
-'editcomment' => "ማጠቃለያው፦ «''$1''» ነበረ።", # only shown if there is an edit comment
-'revertpage' => 'የ$2ን ለውጦች ወደ $1 እትም መለሰ።', # Additionally available: $3: revid of the revision reverted to, $4: timestamp of the revision reverted to, $5: revid of the revision reverted from, $6: timestamp of the revision reverted from
+'editcomment' => "ማጠቃለያው፦ «''$1''» ነበረ።",
+'revertpage' => 'የ$2ን ለውጦች ወደ $1 እትም መለሰ።',
'rollback-success' => 'የ$1 ለውጦች ተገለበጡ፣ ወደ $2 ዕትም ተመልሷል።',
# Protect
@@ -1506,7 +1491,6 @@ $NEWPAGE
'protectexpiry' => 'የሚያልቅበት ግዜ፦',
'protect_expiry_invalid' => "የተሰጠው 'የሚያልቅበት ጊዜ' ልክ አይደለም።",
'protect_expiry_old' => "የተሰጠው 'የሚያልቅበት ጊዜ' ባለፈው ግዜ ነበር።",
-'protect-unchain' => 'ገጹን የማዛወር ፈቃዶች ለመፍታት',
'protect-text' => "እዚህ ለገጹ «'''<nowiki>$1</nowiki>'''» የመቆለፍ ደረጃ መመልከት ወይም መቀይር ይችላሉ።",
'protect-locked-blocked' => "ማገጃ እያለብዎት የመቆለፍ ደረጃ ለመቀየር አይችሉም። ለገጹ '''$1''' የአሁኑኑ ደረጃ እንዲህ ነው፦",
'protect-locked-dblock' => "መረጃ-ቤቱ እራሱ አሁን ስለሚቆለፍ፣ የገጽ መቆለፍ ደረጃ ሊቀየር አይችልም። ለገጹ '''$1''' የአሁኑኑ ደረጃ እንዲህ ነው፦",
@@ -1527,7 +1511,7 @@ $NEWPAGE
'protect-otherreason' => 'ሌላ/ተጨማሪ ምክንያት፦',
'protect-otherreason-op' => 'ሌላ/ተጨማሪ ምክንያት',
'protect-edit-reasonlist' => "'ተራ የመቆለፍ ምክንያቶች' ለማዘጋጀት",
-'protect-expiry-options' => '2 ሰዓቶች:2 hours,1 ቀን:1 day,1 ሳምንት:1 week,2 ሳምንት:2 weeks,1 ወር:1 month,3 ወር:3 months,6 ወር:6 months,1 አመት:1 year,ዘላለም:infinite', # display1:time1,display2:time2,...
+'protect-expiry-options' => '2 ሰዓቶች:2 hours,1 ቀን:1 day,1 ሳምንት:1 week,2 ሳምንት:2 weeks,1 ወር:1 month,3 ወር:3 months,6 ወር:6 months,1 አመት:1 year,ዘላለም:infinite',
'restriction-type' => 'ፈቃድ፦',
'restriction-level' => 'የመቆለፍ ደረጃ፦',
'minimum-size' => 'ቢያንስ',
@@ -1589,7 +1573,7 @@ $1',
'contributions-title' => 'የ$1 አስተዋጽኦች',
'mycontris' => 'የኔ አስተዋጽኦች፤',
'contribsub2' => 'ለ $1 ($2)',
-'nocontribs' => 'ምንም አልተገኘም።', # Optional parameter: $1 is the user name
+'nocontribs' => 'ምንም አልተገኘም።',
'uctop' => '(ላይኛ)',
'month' => 'እስከዚህ ወር ድረስ፦',
'year' => 'እስከዚህ አመት (እ.ኤ.አ.) ድረስ፡-',
@@ -1598,6 +1582,8 @@ $1',
'sp-contributions-newbies-sub' => '(ለአዳዲስ ተጠቃሚዎች)',
'sp-contributions-newbies-title' => 'የአዳዲስ ተጠቃሚዎች አስተዋጽኦች',
'sp-contributions-blocklog' => 'የማገጃ መዝገብ',
+'sp-contributions-talk' => 'ውይይት',
+'sp-contributions-userrights' => 'የአባል መብቶች ለማስተዳደር',
'sp-contributions-search' => 'የሰውን አስተዋጽኦች ለመፈለግ፦',
'sp-contributions-username' => 'ብዕር ስም ወይም የቁ. አድራሻ፦',
'sp-contributions-submit' => 'ፍለጋ',
@@ -1643,7 +1629,7 @@ $1',
'ipbenableautoblock' => 'በተጠቃሚው መጨረሻ ቁ.# እና ካሁን ወዲያ በሚጠቀመው አድራሻ ላይ ማገጃ ይጣል።',
'ipbsubmit' => 'ማገጃ ለመጣል',
'ipbother' => 'ሌላ የተወሰነ ግዜ፦',
-'ipboptions' => '2 ሰዓቶች:2 hours,1 ቀን:1 day,3 ቀን:3 days,1 ሳምንት:1 week,2 ሳምንት:2 weeks,1 ወር:1 month,3 ወር:3 months,6 ወር:6 months,1 አመት:1 year,ዘላለም:infinite', # display1:time1,display2:time2,...
+'ipboptions' => '2 ሰዓቶች:2 hours,1 ቀን:1 day,3 ቀን:3 days,1 ሳምንት:1 week,2 ሳምንት:2 weeks,1 ወር:1 month,3 ወር:3 months,6 ወር:6 months,1 አመት:1 year,ዘላለም:infinite',
'ipbotheroption' => 'ሌላ',
'ipbotherreason' => 'ሌላ/ተጨማሪ ምክንያት፦',
'badipaddress' => 'የማይሆን የቁ. አድራሻ',
@@ -1667,7 +1653,7 @@ $1',
'ipblocklist-submit' => 'ይፈለግ',
'blocklistline' => '$1 (እ.ኤ.አ.)፦ $2 በ$3 ላይ ማገጃ ጣለ ($4)',
'infiniteblock' => 'መቸም ይማያልቅ',
-'expiringblock' => 'በ$1 እ.ኤ.አ. ያልቃል',
+'expiringblock' => 'በ$1 $2 እ.ኤ.አ. ያልቃል',
'anononlyblock' => 'ያልገቡት የቁ.# ብቻ',
'noautoblockblock' => 'የቀጥታ ማገጃ እንዳይሠራ ተደረገ',
'createaccountblock' => 'ስም ከማውጣት ተከለከለ',
@@ -1680,7 +1666,6 @@ $1',
'change-blocklink' => 'እገዳውን ቀይር',
'contribslink' => 'አስተዋጽኦች',
'blocklogpage' => 'የማገጃ መዝገብ',
-'blocklog-fulllog' => 'ሙሉ የማገጃ መዝገብ',
'blocklogentry' => 'እስከ $2 ድረስ [[$1]] አገዳ $3',
'blocklogtext' => 'ይህ መዝገብ ተጠቃሚዎች መቸም ሲታገዱ ወይም ማገጃ ሲነሣ የሚዘረዝር ነው። ለአሁኑ የታገዱት ሰዎች [[Special:IPBlockList|በአሁኑ ማገጃዎች ዝርዝር]] ይታያሉ።',
'unblocklogentry' => 'የ$1 ማገጃ አነሣ',
@@ -1745,7 +1730,7 @@ $1 አሁን ገና ታግዷል። ዝርዝሩን ማስተካከል ፈለጉ
'move-watch' => 'ይህ ገጽ በተከታተሉት ገጾች ይጨመር',
'movepagebtn' => 'ገጹ ይዛወር',
'pagemovedsub' => 'መዛወሩ ተከናወነ',
-'movepage-moved' => "'''«$1» ወደ «$2» ተዛውሯል'''", # The two titles are passed in plain text as $3 and $4 to allow additional goodies in the message.
+'movepage-moved' => "'''«$1» ወደ «$2» ተዛውሯል'''",
'articleexists' => 'በዚያ አርዕሥት ሌላ ገጽ አሁን አለ። አለበለዚያ የመረጡት ስም ልክ አይደለም - ሌላ አርእስት ይምረጡ።',
'cantmove-titleprotected' => 'አዲሱ አርዕስት ከመፈጠር ስለተጠበቀ፣ ገጽ ወደዚያው ሥፍራ ለማዛወር አይችሉም።',
'talkexists' => "'''ገጹ ወደ አዲሱ አርዕስት ተዛወረ፤ እንጂ በአዲሱ አርዕስት የቆየ ውይይት ገጽ አስቀድሞ ስለ ኖረ የዚህ ውይይት ገጽ ሊዛወር አልተቻለም። እባክዎ፣ በእጅ ያጋጥሙአቸው።'''",
@@ -1795,8 +1780,6 @@ $1 አሁን ገና ታግዷል። ዝርዝሩን ማስተካከል ፈለጉ
'allmessagestext' => 'በ«MediaWiki» ክፍለ-ዊኪ ያሉት የድረገጽ መልክ መልእክቶች ሙሉ ዝርዝር ይህ ነው።
Please visit [http://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [http://translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' ስለ ተዘጋ '''{{ns:special}}:Allmessages''' ሊጠቀም አይችልም።",
-'allmessagesfilter' => 'የመልዕክት ስም ማጣሪያ፦',
-'allmessagesmodified' => 'የተቀየሩ ብቻ ይታዩ',
# Thumbnails
'thumbnail-more' => 'አጎላ',
@@ -1856,6 +1839,7 @@ Please visit [http://www.mediawiki.org/wiki/Localisation MediaWiki Localisation]
'tooltip-search-fulltext' => 'ይህ ጽሕፈት የሚገኝባቸውን ገጾች ለመፈልግ',
'tooltip-p-logo' => 'ዋና ገጽ',
'tooltip-n-mainpage' => 'ወደ ዋናው ገጽ ለመሔድ',
+'tooltip-n-mainpage-description' => 'ዋናውን ገጽ ተመልከት',
'tooltip-n-portal' => 'ስለ መርሃገብሩ አጠቃቀም አለመረዳት',
'tooltip-n-currentevents' => 'ስለ ወቅታዊ ጉዳዮች / ዜና መረጃ ለማግኘት',
'tooltip-n-recentchanges' => 'በዚሁ ዊኪ ላይ በቅርቡ የተደረጉ ለውጦች',
@@ -1899,7 +1883,7 @@ Please visit [http://www.mediawiki.org/wiki/Localisation MediaWiki Localisation]
# Attribution
'anonymous' => 'የ{{SITENAME}} ቁ. አድራሻ ተጠቃሚ(ዎች)',
'siteuser' => '{{SITENAME}} ተጠቃሚ $1',
-'lastmodifiedatby' => 'ይህ ገጽ መጨረሻ የተቀየረው $2፣ $1 በ$3 ነበር።', # $1 date, $2 time, $3 user
+'lastmodifiedatby' => 'ይህ ገጽ መጨረሻ የተቀየረው $2፣ $1 በ$3 ነበር።',
'others' => 'ሌሎች',
'siteusers' => '{{SITENAME}} ተጠቃሚ(ዎች) $1',
@@ -1923,6 +1907,14 @@ Please visit [http://www.mediawiki.org/wiki/Localisation MediaWiki Localisation]
'mw_math_modern' => 'ለዘመናዊ ብራውዘር የተሻለ',
'mw_math_mathml' => 'MathML ከተቻለ (የሙከራ)',
+# Math errors
+'math_failure' => 'ዘርዛሪው ተሳነው',
+'math_unknown_error' => 'የማይታወቅ ስኅተት',
+'math_unknown_function' => 'የማይታወቅ ተግባር',
+'math_lexing_error' => 'የlexing ስህተት',
+'math_syntax_error' => 'የሰዋሰው ስህተት',
+'math_bad_output' => 'ወደ math ውጤት ዶሴ መጻፍ ወይም መፍጠር አይቻልም',
+
# Patrolling
'markaspatrolleddiff' => 'የተሳለፈ ሆኖ ማመልከት',
'markaspatrolledtext' => 'ይህን ገጽ የተመለከተ ሆኖ ለማሳለፍ',
@@ -1990,7 +1982,7 @@ $1',
* exposuretime
* fnumber
* isospeedratings
-* focallength", # Do not translate list items
+* focallength",
# EXIF tags
'exif-imagewidth' => 'ስፋት',
@@ -2093,10 +2085,10 @@ $1',
'exif-unknowndate' => 'ያልታወቀ ቀን',
-'exif-orientation-1' => 'መደበኛ', # 0th row: top; 0th column: left
-'exif-orientation-2' => 'በአድማሱ ላይ ተገለበጠ', # 0th row: top; 0th column: right
-'exif-orientation-3' => '180° የዞረ', # 0th row: bottom; 0th column: right
-'exif-orientation-4' => 'በዋልታው ላይ ተገለበጠ', # 0th row: bottom; 0th column: left
+'exif-orientation-1' => 'መደበኛ',
+'exif-orientation-2' => 'በአድማሱ ላይ ተገለበጠ',
+'exif-orientation-3' => '180° የዞረ',
+'exif-orientation-4' => 'በዋልታው ላይ ተገለበጠ',
'exif-componentsconfiguration-0' => 'አይኖርም',
@@ -2184,7 +2176,7 @@ $1',
'exif-gpsmeasuremode-2' => '2 አቅጣቻ ያለው መለኪያ',
'exif-gpsmeasuremode-3' => '3 አቅጣቻ ያለው መለኪያ',
-# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+# Pseudotags used for GPSSpeedRef
'exif-gpsspeed-k' => 'ኪሎሜትር በየሰዓቱ',
'exif-gpsspeed-m' => 'ማይል (mile) በየሰዓቱ',
'exif-gpsspeed-n' => 'Knot (የመርከብ ፍጥነት መለኪያ)',
@@ -2311,7 +2303,7 @@ $3
'unknown_extension_tag' => 'ያልታወቀ የቅጥያ ምልክት «$1»',
# Special:Version
-'version' => 'ዝርያ', # Not used as normal message but as header for the special page itself
+'version' => 'ዝርያ',
'version-extensions' => 'የተሳኩ ቅጥያዎች',
'version-specialpages' => 'ልዩ ገጾች',
'version-parserhooks' => 'የዘርዛሪ ሜንጦዎች',
@@ -2324,7 +2316,7 @@ $3
'version-skin-extension-functions' => 'የመልክ ቅጥያ ተግባሮች',
'version-hook-name' => 'የሜንጦ ስም',
'version-hook-subscribedby' => 'የተጨመረበት',
-'version-version' => 'ዝርያ',
+'version-version' => '(ዝርያ $1)',
'version-license' => 'ፈቃድ',
'version-software' => 'የተሳካ ሶፍትዌር',
'version-software-product' => 'ሶፍትዌር',
diff --git a/languages/messages/MessagesAn.php b/languages/messages/MessagesAn.php
index 02adbd15..41f9c788 100644
--- a/languages/messages/MessagesAn.php
+++ b/languages/messages/MessagesAn.php
@@ -39,14 +39,13 @@ $namespaceNames = array(
$magicWords = array(
'namespace' => array( '1', 'ESPAZIODENOMBRES', 'NAMESPACE' ),
'namespacee' => array( '1', 'ESPAZIODENOMBRESE', 'NAMESPACEE' ),
- 'img_right' => array( '1', 'dreita', 'right' ),
- 'img_left' => array( '1', 'cucha', 'zurda', 'left' ),
+ 'img_right' => array( '1', 'dreita', 'derecha', 'dcha', 'der', 'right' ),
+ 'img_left' => array( '1', 'cucha', 'zurda', 'izquierda', 'izda', 'izq', 'left' ),
'ns' => array( '0', 'EN:', 'EDN:', 'NS:' ),
- 'displaytitle' => array( '1', 'TÍTOL', 'DISPLAYTITLE' ),
- 'currentversion' => array( '1', 'BERSIÓNAUTUAL', 'BERSIONAUTUAL', 'CURRENTVERSION' ),
+ 'displaytitle' => array( '1', 'TÍTOL', 'MOSTRARTÍTULO', 'MOSTRARTITULO', 'DISPLAYTITLE' ),
+ 'currentversion' => array( '1', 'BERSIÓNAUTUAL', 'BERSIONAUTUAL', 'REVISIÓNACTUAL', 'CURRENTVERSION' ),
'language' => array( '0', '#LENGUACHE:', '#LUENGA:', '#IDIOMA:', '#LANGUAGE:' ),
'special' => array( '0', 'espezial', 'special' ),
- 'defaultsort' => array( '1', 'ORDENAR:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
);
$specialPageAliases = array(
@@ -148,6 +147,7 @@ $messages = array(
'tog-enotifminoredits' => 'Ninviar-me un correu tamién quan bi haiga edicions menors de pachinas',
'tog-enotifrevealaddr' => 'Fer veyer a mía adreza de correu-e en os correus de notificación',
'tog-shownumberswatching' => "Amostrar o numero d'usuarios que cosiran un articlo",
+'tog-oldsig' => "Vista previa d'a sinyadura:",
'tog-fancysig' => 'Tratar as sinyaduras como wikitexto (sin de vinclo automatico)',
'tog-externaleditor' => "Fer servir l'editor externo por defecto (nomás ta espiertos, cal confegurar o suyo ordenador).",
'tog-externaldiff' => 'Fer servir o visualizador de cambeos externo por defecto (nomás ta espiertos, cal confegurar o suyo ordenador)',
@@ -170,6 +170,13 @@ $messages = array(
'underline-never' => 'Nunca',
'underline-default' => "Confeguración por defecto d'o navegador",
+# Font style option in Special:Preferences
+'editfont-style' => "Tipo de letra de l'aria d'edición:",
+'editfont-default' => "O predeterminau d'o navegador",
+'editfont-monospace' => 'Tipo de letra monoespaciada',
+'editfont-sansserif' => 'Tipo de letra sans-serif',
+'editfont-serif' => 'Tipo de letra Serif',
+
# Dates
'sunday' => 'domingo',
'monday' => 'luns',
@@ -229,7 +236,7 @@ $messages = array(
'category-media-header' => 'Contenius multimedia en a categoría "$1"',
'category-empty' => "''Ista categoría no tiene por agora garra articlo ni conteniu multimedia''",
'hidden-categories' => '{{PLURAL:$1|Categoría amagata|Categorías amagatas}}',
-'hidden-category-category' => 'Categorías amagatas', # Name of the category where hidden categories will be listed
+'hidden-category-category' => 'Categorías amagatas',
'category-subcat-count' => "{{PLURAL:$2|Ista categoría contiene nomás a siguient subcategoría.|Ista categoría incluye {{PLURAL:$1|a siguient subcategoría|as siguients $1 subcategorías}}, d'un total de $2.}}",
'category-subcat-count-limited' => 'Ista categoría contiene {{PLURAL:$1|a siguient subcategoría|as siguients $1 subcategorías}}.',
'category-article-count' => "{{PLURAL:$2|Ista categoría nomás incluye a pachina siguient.|{{PLURAL:$1|A pachina siguient fa parte|As pachinas siguients fan parte}} d'esta categoría, d'un total de $2.}}",
@@ -237,6 +244,8 @@ $messages = array(
'category-file-count' => "{{PLURAL:$2|Ista categoría nomás contiene o fichero siguient.|{{PLURAL:$1|O fichero siguient fa parte|Os $1 fichers siguients fan parte}} d'ista categoría, d'un total de $2.}}",
'category-file-count-limited' => "{{PLURAL:$1|O fichero siguient fa parte|Os $1 fichers siguients fan parte}} d'ista categoría.",
'listingcontinuesabbrev' => 'cont.',
+'index-category' => 'Pachinas indexadas',
+'noindex-category' => 'Pachinas sin indexar',
'mainpagetext' => "'''O programa MediaWiki s'ha instalato correctament.'''",
'mainpagedocfooter' => "Consulta a [http://meta.wikimedia.org/wiki/Help:Contents Guía d'usuario] ta mirar información sobre cómo usar o software wiki.
@@ -247,10 +256,18 @@ $messages = array(
* [http://www.mediawiki.org/wiki/Manual:FAQ Preguntas cutianas sobre MediaWiki (FAQ)]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correu sobre ta anuncios de MediaWiki]",
-'about' => 'Información sobre',
-'article' => 'Articlo',
-'newwindow' => "(s'ubre en una nueva finestra)",
-'cancel' => 'Cancelar',
+'about' => 'Información sobre',
+'article' => 'Articlo',
+'newwindow' => "(s'ubre en una nueva finestra)",
+'cancel' => 'Cancelar',
+'moredotdotdot' => 'Más...',
+'mypage' => 'A mía pachina',
+'mytalk' => 'Pachina de descusión',
+'anontalk' => "Pachina de descusión d'ista IP",
+'navigation' => 'Navego',
+'and' => '&#32;y',
+
+# Cologne Blue skin
'qbfind' => 'Mirar',
'qbbrowse' => 'Navegar',
'qbedit' => 'Editar',
@@ -258,15 +275,35 @@ $messages = array(
'qbpageinfo' => 'Contexto',
'qbmyoptions' => 'Pachinas propias',
'qbspecialpages' => 'Pachinas especials',
-'moredotdotdot' => 'Más...',
-'mypage' => 'A mía pachina',
-'mytalk' => 'Pachina de descusión',
-'anontalk' => "Pachina de descusión d'ista IP",
-'navigation' => 'Navego',
-'and' => '&#32;y',
-
-# Metadata in edit box
-'metadata_help' => 'Metadatos:',
+'faq' => 'Preguntas freqüents (FAQ)',
+'faqpage' => 'Project:Preguntas freqüents',
+
+# Vector skin
+'vector-action-addsection' => 'Adhibir nueva sección',
+'vector-action-delete' => 'Borrar',
+'vector-action-move' => 'Tresladar',
+'vector-action-protect' => 'Protecher',
+'vector-action-undelete' => 'Restaurar',
+'vector-action-unprotect' => 'Desprotecher',
+'vector-namespace-category' => 'Categoría',
+'vector-namespace-help' => "Pachina d'aduya",
+'vector-namespace-image' => 'Fichero',
+'vector-namespace-main' => 'Pachina',
+'vector-namespace-media' => 'Pachina multimedia',
+'vector-namespace-mediawiki' => 'Mensache',
+'vector-namespace-project' => "Pachina d'o prochecto",
+'vector-namespace-special' => 'Pachina especial',
+'vector-namespace-talk' => 'Discusión',
+'vector-namespace-template' => 'Plantilla',
+'vector-namespace-user' => "Pachina d'usuario",
+'vector-view-create' => 'Creyar',
+'vector-view-edit' => 'Editar',
+'vector-view-history' => "Amostrar l'historial",
+'vector-view-view' => 'Leyer',
+'vector-view-viewsource' => 'Veyer o codigo fuent',
+'actions' => 'Accions',
+'namespaces' => 'Espacios de nombres',
+'variants' => 'Variants',
'errorpagetitle' => 'Error',
'returnto' => 'Tornar ta $1.',
@@ -316,18 +353,22 @@ $messages = array(
'otherlanguages' => 'En atras luengas',
'redirectedfrom' => '(Reendrezato dende $1)',
'redirectpagesub' => 'Pachina reendrezata',
-'lastmodifiedat' => "Zaguera edición d'ista pachina o $1 a las $2.", # $1 date, $2 time
+'lastmodifiedat' => "Zaguera edición d'ista pachina o $1 a las $2.",
'viewcount' => 'Ista pachina ha tenito {{PLURAL:$1|una vesita|$1 vesitas}}.',
'protectedpage' => 'Pachina protechita',
'jumpto' => 'Ir ta:',
'jumptonavigation' => 'navego',
'jumptosearch' => 'busca',
+'view-pool-error' => "Desincuse, os servidors son agora sobrecargaus.
+Masiaus usuarios son mirando d'acceder ta ista pachina.
+Aguarde una mica antes de tornar a acceder ta ista pachina.
+
+$1",
# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
'aboutsite' => 'Información sobre {{SITENAME}}',
'aboutpage' => 'Project:Sobre',
'copyright' => 'O conteniu ye disponible baixo a licencia $1.',
-'copyrightpagename' => "Dreitos d'autor de {{SITENAME}}",
'copyrightpage' => "{{ns:project}}:Dreitos d'autor",
'currentevents' => 'Actualidat',
'currentevents-url' => 'Project:Actualidat',
@@ -335,8 +376,6 @@ $messages = array(
'disclaimerpage' => 'Project:Alvertencias chenerals',
'edithelp' => 'Aduya ta editar pachinas',
'edithelppage' => "Help:Cómo s'edita una pachina",
-'faq' => 'Preguntas freqüents (FAQ)',
-'faqpage' => 'Project:Preguntas freqüents',
'helppage' => 'Help:Aduya',
'mainpage' => 'Portalada',
'mainpage-description' => 'Portalada',
@@ -416,10 +455,6 @@ A zaguera consulta estió:
"$1"
dende adintro d\'a función "$2".
A base de datos retornó a error "$3: $4"',
-'noconnect' => "Agora mesmo, a wiki ye tenendo bellas dificultaz tecnicas, y no se puede contautar con o serbidor d'a base de datos. <br />
-$1",
-'nodb' => 'No se podió trigar a base de datos $1',
-'cachederror' => "Ista ye una copia en caché d'a pachina demandata, y puestar que no siga esbiellata.",
'laggedslavemode' => "Pare cuenta: podrían faltar as zagueras edicions d'ista pachina.",
'readonly' => 'Base de datos bloqueyata',
'enterlockreason' => "Esplique a causa d'o bloqueyo, incluyendo una estimación de quán se producirá o desbloqueyo",
@@ -437,6 +472,8 @@ Por favor, comunique-lo a un [[Special:ListUsers/sysop|almenistrador]] indicando
'readonly_lag' => 'A base de datos ye bloqueyata temporalment entre que os servidors se sincronizan.',
'internalerror' => 'Error interna',
'internalerror_info' => 'Error interna: $1',
+'fileappenderrorread' => 'No s\'ha puesto leyer "$1" durant a inserción.',
+'fileappenderror' => 'No s\'ha puesto adhibir "$1" a "$2".',
'filecopyerror' => 'No s\'ha puesto copiar o fichero "$1" ta "$2".',
'filerenameerror' => 'No s\'ha puesto cambiar o nombre d\'o fichero "$1" a "$2".',
'filedeleteerror' => 'No s\'ha puesto borrar o fichero "$1".',
@@ -446,7 +483,7 @@ Por favor, comunique-lo a un [[Special:ListUsers/sysop|almenistrador]] indicando
'unexpected' => 'Valura no prevista: "$1"="$2".',
'formerror' => 'Error: no se podió ninviar o formulario',
'badarticleerror' => 'Ista acción no se puede no se puede reyalizar en ista pachina.',
-'cannotdelete' => "No se podió borrar a pachina u l'archibo espezificato. (Puestar que belatro usuario l'aiga borrato dinantes)",
+'cannotdelete' => 'No s\'ha puesto borrar pachina u fichero "$1". Talment belatro usuario l\'ha borrato dinantes.',
'badtitle' => 'Títol incorrecto',
'badtitletext' => "O títol d'a pachina demandata ye buedo, incorrecto, u tiene un vinclo interwiki mal feito. Puede contener uno u más caracters que no se pueden fer servir en títols.",
'perfcached' => 'Os datos que siguen son en caché, y podrían no estar esviellatos:',
@@ -477,14 +514,12 @@ A razón data ye ''$2''.",
'virus-unknownscanner' => 'antivirus esconoixito:',
# Login and logout pages
-'logouttitle' => "Fin d'a sesión",
'logouttext' => "'''Ha rematato a sesión.'''
Puede continar navegando por {{SITENAME}} anonimament, u puede [[Special:UserLogin|encetar]] una nueva sesión con o mesmo nombre d'usuario u bell atro diferent. Pare cuenta que, entre que se limpia a caché d'o navegador, puet estar que bellas pachinas s'amuestren como si encara continase en a sesión anterior.",
'welcomecreation' => "== ¡Bienveniu(da), $1! ==
S'ha creyato a suya cuenta.
No xublide de presonalizar [[Special:Preferences|as suyas preferencias en {{SITENAME}}]].",
-'loginpagetitle' => 'Enzetar a sesión',
'yourname' => "Nombre d'usuario:",
'yourpassword' => 'Contrasenya:',
'yourpasswordagain' => 'Torne a escribir a contrasenya:',
@@ -495,6 +530,7 @@ No xublide de presonalizar [[Special:Preferences|as suyas preferencias en {{SITE
'nav-login-createaccount' => 'Encetar una sesión / creyar cuenta',
'loginprompt' => "Ta rechistrar-se en {{SITENAME}} ha d'activar as cookies en o navegador.",
'userlogin' => 'Encetar una sesión / creyar cuenta',
+'userloginnocreate' => 'Encetar una sesión',
'logout' => "Salir d'a sesión",
'userlogout' => 'Salir',
'notloggedin' => 'No ha dentrato en o sistema',
@@ -507,27 +543,8 @@ No xublide de presonalizar [[Special:Preferences|as suyas preferencias en {{SITE
'badretype' => 'As contrasenyas que ha escrito no son iguals.',
'userexists' => "Ixe nombre d'usuario ya ye en uso.
Por favor, meta-ne uno diferent.",
-'youremail' => 'Adreza de correu electronico:',
-'username' => "Nombre d'usuario:",
-'uid' => "ID d'usuario:",
-'prefs-memberingroups' => "Miembro {{PLURAL:$1|d'a colla|d'as collas}}:",
-'yourrealname' => 'Nombre reyal:',
-'yourlanguage' => 'Luenga:',
-'yourvariant' => 'Modalidat linguistica:',
-'yournick' => 'Siñadura:',
-'badsig' => 'A suya sinyadura no ye conforme; comprebe as etiquetas HTML.',
-'badsiglength' => 'A sinyadura ye masiau larga.
-Habría de tener menos de $1 {{PLURAL:$1|carácter|carácters}}.',
-'yourgender' => 'Sexo:',
-'gender-unknown' => 'No especificato',
-'gender-male' => 'Hombre',
-'gender-female' => 'Muller',
-'prefs-help-gender' => 'Opcional: Emplegada ta corrección de chenero por o software. Ista información será publica.',
-'email' => 'Adreza de correu-e',
-'prefs-help-realname' => "* Nombre reyal (opcional): si esliche escribir-lo, se ferá servir ta l'atribución d'a suya faina.",
'loginerror' => 'Error en encetar a sesión',
-'prefs-help-email' => "L'adreza de correu-e ye opcional, pero ye precisa ta que le ninviemos una nueva contrasenya si nunc la xublidase. Tamién puede fer que atros usuarios puedan contactar con vusté dende a suya pachina d'usuario u de descusión d'usuario sin haber de revelar a suya identidat.",
-'prefs-help-email-required' => 'Cal una adreza de correu-e.',
+'createaccounterror' => "No s'ha puesto creyar a cuenta: $1",
'nocookiesnew' => "A cuenta d'usuario s'ha creyata, pero encara no ye indentificato. {{SITENAME}} fa servir <em>cookies</em> ta identificar a os usuario rechistratos, pero pareix que las tiene desactivatas. Por favor, active-las e identifique-se con o suyo nombre d'usuario y contrasenya.",
'nocookieslogin' => "{{SITENAME}} fa servir <em>cookies</em> ta la identificación d'usuarios. Tiene as <em>cookies</em> desactivatas en o suyo navegador. Por favor, active-las y prebe d'identificar-se de nuevas.",
'noname' => "No ha escrito un nombre d'usuario correcto.",
@@ -538,9 +555,11 @@ Os nombres d\'usuario son sensibles a las mayusclas.
Comprebe si ha escrito bien o nombre u [[Special:UserLogin/signup|creye una nueva cuenta d\'usuario]].',
'nosuchusershort' => 'No bi ha garra usuario con o nombre "<nowiki>$1</nowiki>". Comprebe si o nombre ye bien escrito.',
'nouserspecified' => "Ha d'escribir un nombre d'usuario.",
+'login-userblocked' => "Iste usuario ye bloqueyau. No se permite l'inicio de sesión.",
'wrongpassword' => 'A contrasenya indicata no ye correcta. Prebe unatra vegada.',
'wrongpasswordempty' => 'No ha escrito garra contrasenya. Prebe unatra vegada.',
-'passwordtooshort' => "A suya palabra de paso no ye conforme u ye masiau curta. Ha de tener como menimo {{PLURAL:$1|1 caráuter|$1 caráuters}} y no puede estar o suyo nombre d'usuario.",
+'passwordtooshort' => 'As contrasenyas han de tener a lo menos {{PLURAL:$1|1 carácter|$1 carácters}}.',
+'password-name-match' => "A contrasenya ha d'estar diferent d'o suyo nombre d'usuario.",
'mailmypassword' => 'Ninviar una nueva contrasenya por correu electronico',
'passwordremindertitle' => 'Nueva contrasenya temporal de {{SITENAME}}',
'passwordremindertext' => 'Bell un (probablement vusté mesmo, dende l\'adreza IP $1) demandó una nueva contrasenya ta la suya cuenta en {{SITENAME}} ($4). S\'ha creyato una nueva contrasenya temporal ta l\'usuario "$2", que ye "$3".
@@ -549,6 +568,7 @@ A suya contrasenya temporal circumducirá en {{PLURAL:$5|un día|$5 días}}
Si estió bell atro qui fació ista demanda, u ya se\'n ha alcordau d\'a contrasenya y ya no deseya cambiar-la, puet ignorar iste mensache y continar fendo servir l\'antiga contrasenya.',
'noemail' => 'No bi ha garra adreza de correu electronico rechistrada ta "$1".',
+'noemailcreate' => "Has d'indicar una adreza de correu electronico valida",
'passwordsent' => 'Una nueva contrasenya plega de ninviar-se ta o correu electronico de "$1".
Por favor, identifique-se un atra vez malas que la reculla.',
'blocked-mailpassword' => "A suya adreza IP ye bloqueyata y, ta privar abusos, no se li premite emplegar d'a función de recuperación de contrasenyas.",
@@ -568,8 +588,10 @@ Por ixo, no se pueden creyar más cuentas por agora dende ixa adreza IP.",
'createaccount-text' => 'Belún ha creyato una cuenta con o nombre "$2" en {{SITENAME}} ($4), con a contrasenya "$3" y indicando a suya adreza de correu. Habría de dentrar-ie agora y cambiar a suya contrasenya.
Si a cuenta s\'ha creyato por error, simplament ignore iste mensache.',
+'usernamehasherror' => "O nombre d'usuario no puet contener simbolos hash",
'login-throttled' => 'Ha feito masiaus intentos ta encetar una sesión. Por favor, aspere antes de prebar de fer-lo unatra vegada.',
'loginlanguagelabel' => 'Idioma: $1',
+'suspicious-userlogout' => "S'ha denegau a suya demanda de zarrar a sesión ya que pareix que la ninvió un navegador defectuoso u bell proxy amagau.",
# Password reset dialog
'resetpass' => 'Cambiar a contrasenya',
@@ -581,17 +603,13 @@ Si a cuenta s\'ha creyato por error, simplament ignore iste mensache.',
'retypenew' => 'Torne a escribir a nueva contrasenya:',
'resetpass_submit' => 'Cambiar a contrasenya e identificar-se',
'resetpass_success' => 'A suya contrasenya ya ye cambiata. Agora ya puede dentrar-ie...',
-'resetpass_bad_temporary' => "A palabra de paso temporal no ye conforme. Puede estar que ya aiga cambiato a suya palabra de paso u que aiga demandato o nimbío d'un atra.",
'resetpass_forbidden' => 'No se pueden cambiar as contrasenyas.',
'resetpass-no-info' => 'Debe identificar-se como usuario ta poder acceder dreitament ta ista pachina.',
'resetpass-submit-loggedin' => 'Cambiar a contrasenya',
+'resetpass-submit-cancel' => 'Cancelar',
'resetpass-wrong-oldpass' => 'A contrasenya actual u temporal no ye conforme.
Talment ya ha cambiato a suya contrasenya u ha demandato una nueva contrasenya temporal.',
'resetpass-temp-password' => 'Contrasenya temporal:',
-'resetpass-log' => 'Rechistro de restablimiento de palabras de paso',
-'resetpass-logtext' => "En o cobaixo s'amuestra o rechistro d'os usuarios que un almenistrador lis ha restablito as suyas palabras de paso.",
-'resetpass-logentry' => "S'ha cambiato a palabra de paso de $1",
-'resetpass-comment' => 'Razón ta restablir a palabra de paso:',
# Edit page toolbar
'bold_sample' => 'texto en negreta',
@@ -663,7 +681,6 @@ A suya adreza IP actual ye \$3, y o identificador de bloqueyo ye #\$5. Por favor
'blockededitsource' => "Contino s'amuestra o texto d'as suyas '''edicions''' a '''$1''':",
'whitelistedittitle' => 'Cal encetar una sesión ta poder editar.',
'whitelistedittext' => 'Ha de $1 ta poder editar pachinas.',
-'confirmedittitle' => 'Cal que confirme a suya adreza de correu-e ta poder editar',
'confirmedittext' => "Ha de confirmar a suya adreza de correu-e antis de poder editar pachinas. Por favor, estableixca y confirme una adreza de correu-e a traviés d'as suyas [[Special:Preferences|preferencias d'usuario]].",
'nosuchsectiontitle' => 'No se puede trobar ixa sección',
'nosuchsectiontext' => "Ha mirau d'editar una sección que no existe.
@@ -683,14 +700,21 @@ Si ye plegau por error, punche o botón \"enta zaga\" d'o suyo navegador.",
Barios usuarios pueden compartir una mesma adreza IP.
Si vusté ye un usuario anonimo y creye que l'han escrito comentarios no relevants, [[Special:UserLogin/signup|creye una cuenta]] u [[Special:UserLogin/signup|identifique-se]] ta privar confusions futuras con atros usuarios anonimos.''",
'noarticletext' => 'Por agora no bi ha garra texto en ista pachina. Puet [[Special:Search/{{PAGENAME}}|mirar o títol d\'ista pachina]] en atras pachinas, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mirar os rechistros relacionatos] u [{{fullurl:{{FULLPAGENAME}}|action=edit}} escribir ista pachina].',
+'noarticletext-nopermission' => 'Por l\'inte no i hai garra texto en ista pachina.
+Puet [[Special:Search/{{PAGENAME}}|mirar iste títol]] en atras páginas,
+u bien <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mirar en os rechistros relacionatos]</span>.',
'userpage-userdoesnotexist' => 'A cuenta d\'usuario "$1" no ye rechistrada. Piense si quiere creyar u editar ista pachina.',
+'userpage-userdoesnotexist-view' => 'A cuenta d\'usuario "$1" no ye rechistrada.',
+'blocked-notice-logextract' => "Ista cuenta d'usuario ye actualment bloqueyata.
+A zaguera dentrada d'o rechistro de bloqueyos s'amuestra contino:",
'clearyourcache' => "'''Pare cuenta: Si quiere veyer os cambeos dimpués d'alzar o fichero, puede estar que tienga que refrescar a caché d'o suyo navegador ta veyer os cambeos.'''
*'''Mozilla / Firefox / Safari:''' prete a tecla de ''Mayusclas'' mientras puncha ''Reload,'' u prete '''Ctrl-F5''' u '''Ctrl-R''' (''Command-R'' en un Macintosh);
*'''Konqueror: ''' punche ''Reload'' u prete ''F5;''
*'''Opera:''' limpiar a caché en ''Tools → Preferences;''
*'''Internet Explorer:''' prete ''Ctrl'' mientres puncha ''Refresh,'' u prete ''Ctrl-F5.''",
-'usercssjsyoucanpreview' => "'''Consello:''' Faga serbir o botón «Amostrar prebisualizazión» ta prebar o nuebo css/js antes de grabar-lo.",
+'usercssyoucanpreview' => "'''Consello:''' Faiga servir o botón «{{int:showpreview}}» ta fer una prebatina con o nuevo CSS antes de no grabar-lo.",
+'userjsyoucanpreview' => "'''Consello:''' Faiga servir o botón «{{int:showpreview}}» ta fer una prebatina con o nuevo css/js antes de no grabar-lo.",
'usercsspreview' => "'''Remere que isto no ye que una previsualización d'o suyo CSS d'usuario.'''
'''Encara no s'ha alzato!'''",
'userjspreview' => "'''Remere que sólo ye previsualizando o suyo javascript d'usuario y encara no ye grabato!'''",
@@ -730,13 +754,14 @@ Considere, por favor, a posibilidat de troxar ista pachina en trestallos más ch
'readonlywarning' => "'''Pare cuenta: A base de datos ye bloqueyata por custions de mantenimiento. Por ixo, en iste inte ye imposible d'alzar as suyas edicions. Puede copiar y apegar o texto en un fichero y alzar-lo ta dimpués.'''
A esplicación ufierta por l'almenistrador que bloqueyó a base de datos ye ista: $1",
-'protectedpagewarning' => "'''PARE CUENTA: Ista pachina ha estato protechita ta que sólo os usuarios con premisos d'almenistrador puedan editar-la.'''",
-'semiprotectedpagewarning' => "'''Nota:''' Ista pachina ha estato protechita ta que nomás usuarios rechistratos puedan editar-la.",
+'protectedpagewarning' => "'''Pare cuenta: Ista pachina s'ha protechito ta que nomás os usuarios con premisos d'almenistrador puedan editar-la.'''",
+'semiprotectedpagewarning' => "'''Pare cuenta:''' Ista pachina s'ha protechito ta que nomás os usuarios rechistratos puedan editar-la.",
'cascadeprotectedwarning' => "'''Pare cuenta:''' Ista pachina ye protechita ta que nomás os almenistrador puedan editar-la, porque ye incluyita en {{PLURAL:$1|a siguient pachina, protechita|as siguients pachinas, protechitas}} con a opción de ''cascada'' :",
-'titleprotectedwarning' => "'''PARE CUENTA: Ista pachina s'ha bloqueyato, y s'aprezisan [[Special:ListGroupRights|dreitos espezificos]] ta creyar-la.'''",
-'templatesused' => 'Plantillas emplegatas en ista pachina:',
-'templatesusedpreview' => 'Plantillas emplegatas en ista ambiesta prebia:',
-'templatesusedsection' => 'Plantillas usatas en ista sezión:',
+'titleprotectedwarning' => "'''PARE CUENTA: Ista pachina s'ha bloqueyato de traza que s'aprecisan [[Special:ListGroupRights|dreitos especificos]] ta creyar-la.'''
+Como información adicional s'amuestra contino a zaguera dentrada en o rechistro.",
+'templatesused' => '{{PLURAL:$1|Plantilla|Planillas}} emplegatas en ista pachina:',
+'templatesusedpreview' => '{{PLURAL:$1|Plantilla|Plantillas}} emplegadas en ista anvista previa:',
+'templatesusedsection' => '{{PLURAL:$1|Plantilla|Plantillas}} emplegatas en ista sección:',
'template-protected' => '(protechita)',
'template-semiprotected' => '(semiprotechita)',
'hiddencategories' => 'Ista pachina fa parte de {{PLURAL:$1|1 categoría amagata|$1 categorías amagatas}}:',
@@ -744,16 +769,18 @@ A esplicación ufierta por l'almenistrador que bloqueyó a base de datos ye ista
'nocreatetitle' => "S'ha restrinchito a creyación de pachinas",
'nocreatetext' => '{{SITENAME}} ha restrinchito a creyación de nuevas pachinas. Puede tornar entazaga y editar una pachina ya existent, [[Special:UserLogin|identificarse u creyar una cuenta]].',
'nocreate-loggedin' => 'No tiene premiso ta creyar nuevas pachinas.',
+'sectioneditnotsupported-title' => 'A edición por seccions no ye suportada',
+'sectioneditnotsupported-text' => 'A edición por seccions no ye suportada en ista pachina',
'permissionserrors' => 'Errors de premisos',
'permissionserrorstext' => 'No tiene premisos ta fer-lo, por {{PLURAL:$1|ista razón|istas razons}}:',
'permissionserrorstext-withaction' => 'No tiene premisos ta $2, por {{PLURAL:$1|ista razón|istas razons}}:',
-'recreate-deleted-warn' => "'''Pare cuenta: ye creyando una pachina que ya ha estato borrata denantes.'''
+'recreate-moveddeleted-warn' => "Pare cuenta: ye creyando de nuevas una pachina que ya ha s'heba borrada denantes.'''
-Abría de considerar si ye reyalment nezesario continar editando ista pachina.
-Puede consultar o rechistro de borraus que s'amuestra a continuazión:",
-'deleted-notice' => "Ista pachina ye borrata.
-Contino s'amuestra o rechistro de borrau como referenzia.",
-'deletelog-fulllog' => 'Beyer o rechistro completo',
+Considere si ye preciso continar editando ista pachina.
+Contino s'amuestra o rechistro de borraus y treslaus ta ista pachina:",
+'moveddeleted-notice' => "Ista pachina s'ha borrato.
+Contino s'amuestra o rechistro de borraus y treslaus como referencia.",
+'log-fulllog' => 'Veyer o rechistro completo',
'edit-hook-aborted' => 'Edición albortada por o grifio (hook).
No dio garra esplicación.',
'edit-gone-missing' => "No s'ha puesto esviellar a pachina.
@@ -775,6 +802,7 @@ Bellas plantillas no se bi incluyen.",
'post-expand-template-argument-category' => 'Pachinas con argumentos de plantilla omesos',
'parser-template-loop-warning' => "S'ha detectato un bucle de plantillas: [[$1]]",
'parser-template-recursion-depth-warning' => "S'ha brincato o limite de recursión de plantillas ($1)",
+'language-converter-depth-warning' => "S'ha blincau o limite de profundidat d'o conversor d'idiomas ($1)",
# "Undo" feature
'undo-success' => 'A edición se puet desfer.
@@ -793,9 +821,9 @@ A razón indicada por $3 ye ''$2''",
'viewpagelogs' => "Veyer os rechistros d'ista pachina",
'nohistory' => "Ista pachina no tiene un historial d'edicions.",
'currentrev' => 'Versión actual',
-'currentrev-asof' => "zaguera bersión d'o $1",
-'revisionasof' => "Bersión d'o $1",
-'revision-info' => "Bersión d'o $1 feita por $2", # Additionally available: $3: revision id
+'currentrev-asof' => "Zaguera versión d'o $1",
+'revisionasof' => "Versión d'o $1",
+'revision-info' => "Versión d'o $1 feita por $2",
'previousrevision' => '← Versión anterior',
'nextrevision' => 'Versión siguient →',
'currentrevisionlink' => 'Versión actual',
@@ -807,7 +835,7 @@ A razón indicada por $3 ye ''$2''",
'histlegend' => "Selección de diferencias: sinyale as versions a comparar y prete \"enter\" u o botón d'o cobaixo.<br />
Leyenda: '''({{int:cur}})''' = esferencias con a versión actual, '''({{int:last}})''' = esferencias con a versión anterior, '''{{int:minoreditletter}}''' = edición menor",
'history-fieldset-title' => 'Mirar en o historial',
-'deletedrev' => '[borrato]',
+'history-show-deleted' => 'Nomás os borratos',
'histfirst' => 'Primeras contrebucions',
'histlast' => 'Zagueras',
'historysize' => '({{PLURAL:$1|1 byte|$1 bytes}})',
@@ -816,69 +844,114 @@ Leyenda: '''({{int:cur}})''' = esferencias con a versión actual, '''({{int:last
# Revision feed
'history-feed-title' => 'Historial de versions',
'history-feed-description' => "Historial de versions d'ista pachina en o wiki",
-'history-feed-item-nocomment' => '$1 en $2', # user at time
+'history-feed-item-nocomment' => '$1 en $2',
'history-feed-empty' => "A pachina demandata no existe.
Puede que belún l'haiga borrata d'o wiki u renombrata.
Prebe de [[Special:Search|mirar en o wiki]] atras pachinas relevants.",
# Revision deletion
-'rev-deleted-comment' => "(s'ha sacato iste comentario)",
-'rev-deleted-user' => "(s'ha sacato iste nombre d'usuario)",
-'rev-deleted-event' => "(acción borrata d'o rechistro)",
-'rev-deleted-text-permission' => "Ista bersión d'a pachina s'ha '''borrato'''.
-Puede trobar más detalles en o [{{fullurl:Special:Log/delete|page={{FULLPAGENAMEE}}}} rechistro de borratos].",
-'rev-deleted-text-view' => "Ista bersión d'a pachina s'ha '''borrato'''.
-La puet beyer porque ye almenistrador/a; puede trobar más detalles en o [{{fullurl:Special:Log/delete|page={{FULLPAGENAMEE}}}} rechistro de borratos].",
-'rev-deleted-no-diff' => "No puede veyer ista comparanza de pachinas porque una d'as versions s'ha '''borrato'''. Puet trobar más detalles en o [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rechistro de borraus].",
-'rev-deleted-unhide-diff' => "Una d'as versions d'ista comparanza s'ha '''borrato'''.
+'rev-deleted-comment' => "(s'ha sacato iste comentario)",
+'rev-deleted-user' => "(s'ha sacato iste nombre d'usuario)",
+'rev-deleted-event' => "(acción borrata d'o rechistro)",
+'rev-deleted-user-contribs' => "[nombre d'usuario u adreza IP elminada - edición amagada d'as contribucions]",
+'rev-deleted-text-permission' => "Ista versión d'a pachina s'ha '''borrato'''.
+Talment pueda trobe más detalles en o [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rechistro de borraus].",
+'rev-deleted-text-unhide' => "Ista versión d'a pachina ha estau '''borrada'''.
+Puede trobar más detalles en o [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rechistro de borraus].
+Como administrador encara puet [$1 veyer ista versión ] si lo deseya.",
+'rev-suppressed-text-unhide' => "Ista versión d'a pachina ha estau '''borrada'''.
Puet trobar más detalles en o [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rechistro de borraus].
+Como administrador encara puet [$1 veyer ista versión ] si lo deseya.",
+'rev-deleted-text-view' => "Ista versión d'a pachina s'ha '''borrato'''.
+Como admenistrador, la puet veyer; talment trobe más detalles en o [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rechistro de borraus].",
+'rev-suppressed-text-view' => "Ista versión d'a pachina s'ha '''borrato'''.
+Como administrador, la puet veyer; puet trobar más detalles en o [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rechistro de borraus].",
+'rev-deleted-no-diff' => "No puede veyer ista comparanza de pachinas porque una d'as versions s'ha '''borrato'''.
+Puet trobar más detalles en o [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rechistro de borraus].",
+'rev-suppressed-no-diff' => "Nop puet veyer ista diferencia porque una d'as versions ha estau '''borrata'''.",
+'rev-deleted-unhide-diff' => "Una d'as versions d'ista comparanza s'ha '''borrato'''.
+Puet trobar más detalles en o [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rechistro de borraus].
Como administrador podrá seguir [$1 veyendo ista comparanza] si lo deseya.",
-'rev-delundel' => 'amostrar/amagar',
-'revisiondelete' => 'Borrar/restaurar versions',
-'revdelete-nooldid-title' => 'A versión de destino no ye conforme',
-'revdelete-nooldid-text' => "No ha indicato sobre qué versión u versions de destino s'ha d'aplicar ista función, a versión especificata no existe u ye mirando d'amagar a versión actual.",
-'revdelete-nologtype-title' => "No s'ha indicau garra mena de rechistro",
-'revdelete-nologtype-text' => 'No ha indicato sobre qué tipo de rechistro quiere fer ista acción.',
-'revdelete-toomanytargets-title' => 'Masiaus obchetibos',
-'revdelete-toomanytargets-text' => "Ha endicato masiadas menas d'obchetibos sobre os que fer ista azión.",
-'revdelete-nologid-title' => 'Dentrada de rechistro invalida',
-'revdelete-nologid-text' => 'No ha indicau sobre qué evento rechistrau quiere fer servir ista función u bien no existe a dentrada de rechistro que ha indicau.',
-'revdelete-selected' => "'''{{PLURAL:$2|Versión trigata|Versions trigatas}} de [[:$1]]:'''",
-'logdelete-selected' => "'''{{PLURAL:$1|Escaicimiento d'o rechistro trigato|Escaicimientos d'o rechistro trigatos}}:'''",
-'revdelete-text' => "'''As bersions borratas encara aparixerán en o istorial y o rechistro d'a pachina, pero os suyos contenius no serán azesibles ta o publico.'''
-
-Atros almenistradors de {{SITENAME}} encara podrán azeder t'o contineiu amagato y podrán esfer o borrau á trabiés d'a mesma interfaz, fueras de si os operadors establen restrizions adizionals.",
-'revdelete-suppress-text' => "Os borraus de versions '''nomás''' s'habrían de fer en os siguients casos:
+'rev-suppressed-unhide-diff' => "Una d'as versions d'ista comparanza s'ha '''borrato'''.
+Puet trobar más detalles en o [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rechistro de borraus].
+Como administrador encara puet seguir [$1 veyendo ista comparanza] si lo deseya.",
+'rev-deleted-diff-view' => "Una d'as versions d'ista comparanza s'ha '''borrato'''.
+Como administrador puede veyer o conteniu; puet trobar más detalles en o [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rechistro de borraus].",
+'rev-suppressed-diff-view' => "Una d'as versions d'ista comparanza s'ha '''borrato'''.
+Como administrador encara puet veyer o conteniu; puet trobar más detalles en o [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rechistro de borraus].",
+'rev-delundel' => 'amostrar/amagar',
+'rev-showdeleted' => 'amostrar',
+'revisiondelete' => 'Borrar/restaurar versions',
+'revdelete-nooldid-title' => 'A versión de destino no ye conforme',
+'revdelete-nooldid-text' => "No ha indicato sobre qué versión u versions de destino s'ha d'aplicar ista función, a versión especificata no existe u ye mirando d'amagar a versión actual.",
+'revdelete-nologtype-title' => "No s'ha indicau garra mena de rechistro",
+'revdelete-nologtype-text' => 'No ha indicato sobre qué tipo de rechistro quiere fer ista acción.',
+'revdelete-nologid-title' => 'Dentrada de rechistro invalida',
+'revdelete-nologid-text' => 'No ha indicau sobre qué evento rechistrau quiere fer servir ista función u bien no existe a dentrada de rechistro que ha indicau.',
+'revdelete-no-file' => 'O fichero especificato no existe.',
+'revdelete-show-file-confirm' => 'Seguro que quiere veyer una versión borrata d\'o fichero "<nowiki>$1</nowiki>" d\'o $2 a las $3?',
+'revdelete-show-file-submit' => 'Sí',
+'revdelete-selected' => "'''{{PLURAL:$2|Versión trigata|Versions trigatas}} de [[:$1]]:'''",
+'logdelete-selected' => "'''{{PLURAL:$1|Escaicimiento d'o rechistro trigato|Escaicimientos d'o rechistro trigatos}}:'''",
+'revdelete-text' => "'''As versions y esdevenimientos borratos encara apareixerán en o historial d'a pachina y en os rechistros, pero bellas partes d'o suyo conteniu serán inaccesibles ta o publico.'''
+Atros admenistradors de {{SITENAME}} encara podrán acceder t'o conteniu amagato y podrán desfer o borrau a traviés d'ista mesma interfaz, fueras de si s'estableixen restriccions adicionals.",
+'revdelete-confirm' => "Por favor confirme que ye mirando de fer ísto, que entiende as conseqüencias, y que lo ye fendo d'alcuerdo con [[{{MediaWiki:Policy-url}}|as politicas]].",
+'revdelete-suppress-text' => "Os borraus de versions '''nomás''' s'habrían de fer en os siguients casos:
* Información potencialment difamatoria o libelo grieu.
* Información personal inapropiada
*: ''domicilios y números de telefono, numeros d'afiliación a la seguridat social, etc.''",
-'revdelete-legend' => 'Establir as restriccions de visibilidat:',
-'revdelete-hide-text' => "Amagar o texto d'a versión",
-'revdelete-hide-name' => 'Amagar acción y obchectivo',
-'revdelete-hide-comment' => "Amagar comentario d'edición",
-'revdelete-hide-user' => "Amagar o nombre/l'adreza IP d'o editor",
-'revdelete-hide-restricted' => "Suprimir os datos d'os almenistradors igual como os d'a resta",
-'revdelete-suppress' => "Sacar os datos d'os almenistradors igual como os d'a resta d'usuarios",
-'revdelete-hide-image' => "Amagar o conteniu d'o fichero",
-'revdelete-unsuppress' => "Sacar restriccions d'as versions restauradas",
-'revdelete-log' => 'Razón:',
-'revdelete-submit' => 'Aplicar á la bersión trigata',
-'revdelete-logentry' => "S'ha cambiato a visibilidat d'a versión de [[$1]]",
-'logdelete-logentry' => "S'ha cambiato a visibilidat d'escaicimientos de [[$1]]",
-'revdelete-success' => "'''S'ha cambiato correctament a visibilidat d'as versions.'''",
-'logdelete-success' => "'''S'ha cambiato correctament a visibilidat d'os escaicimientos.'''",
-'revdel-restore' => 'Cambiar a visibilidat',
-'pagehist' => 'Historial',
-'deletedhist' => 'Historial de borrau',
-'revdelete-content' => 'conteniu',
-'revdelete-summary' => 'editar resumen',
-'revdelete-uname' => "nombre d'usuario",
-'revdelete-restricted' => "S'han aplicato as restriccions ta almenistradors",
-'revdelete-unrestricted' => "S'han borrato as restriccions ta almenistradors",
-'revdelete-hid' => 'amagar $1',
-'revdelete-unhid' => 'amostrar $1',
-'revdelete-log-message' => '$1 ta $2 {{PLURAL:$2|versión|versions}}',
-'logdelete-log-message' => '$1 ta $2 {{PLURAL:$2|esdevenimiento|esdevenimientos}}',
+'revdelete-legend' => 'Establir as restriccions de visibilidat:',
+'revdelete-hide-text' => "Amagar o texto d'a versión",
+'revdelete-hide-image' => "Amagar o conteniu d'o fichero",
+'revdelete-hide-name' => 'Amagar acción y obchectivo',
+'revdelete-hide-comment' => "Amagar comentario d'edición",
+'revdelete-hide-user' => "Amagar o nombre/l'adreza IP d'o editor",
+'revdelete-hide-restricted' => "Suprimir os datos d'os almenistradors igual como os d'a resta",
+'revdelete-radio-same' => '(no cambiar)',
+'revdelete-radio-set' => 'Sí',
+'revdelete-radio-unset' => 'No',
+'revdelete-suppress' => "Sacar os datos d'os almenistradors igual como os d'a resta d'usuarios",
+'revdelete-unsuppress' => "Sacar restriccions d'as versions restauradas",
+'revdelete-log' => 'Razón:',
+'revdelete-submit' => 'Aplicar a {{PLURAL:$1|la versión trigata|las versions trigatas}}',
+'revdelete-logentry' => "S'ha cambiato a visibilidat d'a versión de [[$1]]",
+'logdelete-logentry' => "S'ha cambiato a visibilidat d'escaicimientos de [[$1]]",
+'revdelete-success' => "'''S'ha cambiato correctament a visibilidat d'as versions.'''",
+'revdelete-failure' => "'''La visibilidat d'a versión no s'ha puesto esviellar:'''
+$1",
+'logdelete-success' => "'''S'ha cambiato correctament a visibilidat d'os escaicimientos.'''",
+'logdelete-failure' => "'''A visibilidat d'o rechistro no s'ha puesto achustar:'''
+$1",
+'revdel-restore' => 'Cambiar a visibilidat',
+'pagehist' => 'Historial',
+'deletedhist' => 'Historial de borrau',
+'revdelete-content' => 'conteniu',
+'revdelete-summary' => 'editar resumen',
+'revdelete-uname' => "nombre d'usuario",
+'revdelete-restricted' => "S'han aplicato as restriccions ta almenistradors",
+'revdelete-unrestricted' => "S'han borrato as restriccions ta almenistradors",
+'revdelete-hid' => 'amagar $1',
+'revdelete-unhid' => 'amostrar $1',
+'revdelete-log-message' => '$1 ta $2 {{PLURAL:$2|versión|versions}}',
+'logdelete-log-message' => '$1 ta $2 {{PLURAL:$2|esdevenimiento|esdevenimientos}}',
+'revdelete-hide-current' => "Error en amagar l'obchecto de calendata $2 y $1: ista ye a versión actual.
+No se puet amagar.",
+'revdelete-show-no-access' => 'Error amostrando l\'obchecto de calendata $2, $1: iste obchecto s\'ha marcau como "restrinchiu".
+ No tien acceso a tot.',
+'revdelete-modify-no-access' => 'Error en modificar l\'obchecto de calendata $2, $1: este obchecto s\'ha marcau como "restrinchiu".
+No tien acceso a ell.',
+'revdelete-modify-missing' => "Error en modificar l'obchecto ID $1: no se troba en base de datos!",
+'revdelete-no-change' => "'''Pare cuenta:''' a versión d'o $1 a las $2 ya tien as restriccions de visibilidat solicitadas.",
+'revdelete-concurrent-change' => "Error en modificar l'elemento d'o $1 a las $2: pareix que o suyo estau ha estau cambiau por belatro usuario quan vusté miraba de modificar-lo. Por favor, verifique os rechistros.",
+'revdelete-only-restricted' => "Error en amagar l'elemento d'o $1 a las $2: no puet eliminar elementos d'a vista d'os administradors sin trigar alavez una d'as atras opcions de visibilidat.",
+'revdelete-reason-dropdown' => '*Razons comuns de borraus
+** Violación de Copyright
+** Información personal inapropiada
+** Difamación u calumnias grieus',
+'revdelete-otherreason' => 'Atras/más razons:',
+'revdelete-reasonotherlist' => 'Atra razón',
+'revdelete-edit-reasonlist' => "Editar as razons d'o borrau",
+'revdelete-offender' => "Autor d'a edición:",
# Suppression log
'suppressionlog' => 'Rechistro de supresions',
@@ -914,67 +987,13 @@ Asegure-se que iste cambio no trencará a continidat de l'historial d'a pachina.
'mergelogpagetext' => "Contino s'amuestra una lista d'as pachinas más recients que os suyos historials s'han fusionato con o d'atra pachina.",
# Diffs
-'history-title' => 'Historial de versions de "$1"',
-'difference' => '(Esferencias entre versions)',
-'lineno' => 'Linia $1:',
-'compareselectedversions' => 'Confrontar as versions trigatas',
-'visualcomparison' => 'Comparanza bisual',
-'wikicodecomparison' => 'Comparanza de testo wiki',
-'editundo' => 'desfer',
-'diff-multi' => "(S'ha amagato {{PLURAL:$1|una edición entremeya|$1 edicions entremeyas}}.)",
-'diff-movedto' => 'tresladato ta $1',
-'diff-styleadded' => 'estilo $1 adibito',
-'diff-added' => 'adibito $1',
-'diff-changedto' => 'cambiato á $1',
-'diff-movedoutof' => 'sacato de $1',
-'diff-styleremoved' => 'estilo $1 sacato',
-'diff-removed' => 'sacato $1',
-'diff-changedfrom' => 'cambiato dende $1',
-'diff-src' => 'codigo fuent',
-'diff-withdestination' => 'con destín $1',
-'diff-with' => '&#32;con $1 $2',
-'diff-with-final' => '&#32;y $1 $2',
-'diff-width' => 'amplaria',
-'diff-height' => 'altaria',
-'diff-p' => "un '''parrafo'''",
-'diff-blockquote' => "una '''zita'''",
-'diff-h1' => "una '''cabezera (ran 1)'''",
-'diff-h2' => "una '''cabezera (ran 2)'''",
-'diff-h3' => "una '''cabezera (ran 3)'''",
-'diff-h4' => "una '''cabezera (ran 4)'''",
-'diff-h5' => "una '''cabezera (ran 5)'''",
-'diff-pre' => "un '''bloque preformateyato'''",
-'diff-div' => "una '''dibisión'''",
-'diff-ul' => "una '''lista desordenata'''",
-'diff-ol' => "una '''lista ordenata'''",
-'diff-li' => "un '''elemento de lista'''",
-'diff-table' => "una '''tabla'''",
-'diff-tbody' => "un '''conteniu de tabla'''",
-'diff-tr' => "una '''ringlera'''",
-'diff-td' => "una '''zelda'''",
-'diff-th' => "una '''cabezera'''",
-'diff-br' => "un '''brinco de ringlera'''",
-'diff-hr' => "una '''linia orizontal'''",
-'diff-code' => "un '''bloque de codigo d'ordenador'''",
-'diff-dl' => "una '''lista de definizions'''",
-'diff-dt' => "un '''termín de definizión'''",
-'diff-dd' => "una '''definizión'''",
-'diff-input' => "una '''dentrada'''",
-'diff-form' => "un '''formulario'''",
-'diff-img' => "una '''imachen'''",
-'diff-span' => "un '''''span'''''",
-'diff-a' => "un '''binclo'''",
-'diff-i' => "'''cursibas'''",
-'diff-b' => "'''negreta'''",
-'diff-strong' => "'''fuerte'''",
-'diff-em' => "'''enfasis'''",
-'diff-font' => "'''tipo de letra'''",
-'diff-big' => "'''gran'''",
-'diff-del' => "'''borrato'''",
-'diff-tt' => "'''amplaria fixa'''",
-'diff-sub' => "'''subendize'''",
-'diff-sup' => "'''superendize'''",
-'diff-strike' => "'''barriato'''",
+'history-title' => 'Historial de versions de "$1"',
+'difference' => '(Esferencias entre versions)',
+'lineno' => 'Linia $1:',
+'compareselectedversions' => 'Confrontar as versions trigatas',
+'showhideselectedversions' => 'Amostrar/amagar as versions trigadas',
+'editundo' => 'desfer',
+'diff-multi' => "(S'ha amagato {{PLURAL:$1|una edición entremeya|$1 edicions entremeyas}}.)",
# Search results
'searchresults' => "Resultau d'a busca",
@@ -982,28 +1001,25 @@ Asegure-se que iste cambio no trencará a continidat de l'historial d'a pachina.
'searchresulttext' => "Ta más información sobre cómo mirar pachinas en {{SITENAME}}, consulte l'[[{{MediaWiki:Helppage}}|{{int:help}}]].",
'searchsubtitle' => 'Ha mirato \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|todas as pachinas que prencipian con "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|todas as pachinas con vinclos enta "$1"]])',
'searchsubtitleinvalid' => 'Ha mirato "$1"',
-'noexactmatch' => "'''No esiste garra pachina tetulata \"\$1\".''' Puede aduyar [[:\$1|creyando-la]].",
-'noexactmatch-nocreate' => "'''No bi ha garra pachina tetulata \"\$1\".'''",
'toomanymatches' => "S'ha retornato masiadas coincidencias, por favor, torne a prebar con una consulta diferent",
'titlematches' => 'Consonancias de títols de pachina',
'notitlematches' => "No bi ha garra consonancia en os títols d'as pachinas",
'textmatches' => "Consonancias en o texto d'as pachinas",
'notextmatches' => "No bi ha garra consonancia en os textos d'as pachinas",
-'prevn' => 'anteriors $1',
-'nextn' => 'siguiens $1',
+'prevn' => '{{PLURAL:$1|$1}} anteriors',
+'nextn' => '{{PLURAL:$1|$1}} siguients',
'prevn-title' => '$1 {{PLURAL:$1|resultau anterior|resultaus anteriors}}',
'nextn-title' => 'Siguients $1 {{PLURAL:$1|resultau|resultaus}}',
'shown-title' => 'Amostrar $1 {{PLURAL:$1|resultau|resultaus}} por pachina',
-'viewprevnext' => 'Veyer ($1) ($2) ($3)',
+'viewprevnext' => 'Veyer ($1 {{int:pipe-separator}} $2) ($3)',
'searchmenu-legend' => 'Opcions de busca',
'searchmenu-exists' => "'''Bi ha una pachina clamada \"[[\$1]]\" en ista wiki'''",
'searchmenu-new' => "'''Creyar a pachina \"[[:\$1]]\" en ista wiki!'''",
'searchhelp-url' => 'Help:Aduya',
'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Veyer pachinas con iste prefixo]]',
-'searchprofile-articles' => 'Articlos',
-'searchprofile-articles-and-proj' => "Articlos y pachinas d'o procheuto",
-'searchprofile-project' => "Pachinas d'o procheuto",
-'searchprofile-images' => 'Archibos',
+'searchprofile-articles' => 'Pachinas de conteniu',
+'searchprofile-project' => "Pachinas d'aduya y d'o prochecto",
+'searchprofile-images' => 'Multimedia',
'searchprofile-everything' => 'Tot',
'searchprofile-advanced' => 'Avanzato',
'searchprofile-articles-tooltip' => 'Mirar en $1',
@@ -1011,8 +1027,6 @@ Asegure-se que iste cambio no trencará a continidat de l'historial d'a pachina.
'searchprofile-images-tooltip' => 'Mirar fichers',
'searchprofile-everything-tooltip' => 'Mirar en totz os contenius (tamién en as pachinas de descusión)',
'searchprofile-advanced-tooltip' => 'Mirar en os siguients espacios de nombres',
-'prefs-search-nsdefault' => 'Mirar fendo serbir os parametros por defeuto:',
-'prefs-search-nscustom' => 'Mirar en os siguients espazios de nombres:',
'search-result-size' => '$1 ({{PLURAL:$2|1 parola|$2 parolas}})',
'search-result-score' => 'Relevancia: $1%',
'search-redirect' => '(endrecera dende $1)',
@@ -1025,11 +1039,12 @@ Asegure-se que iste cambio no trencará a continidat de l'historial d'a pachina.
'search-mwsuggest-disabled' => 'garra socherencia',
'search-relatedarticle' => 'Relacionato',
'mwsuggest-disable' => "Desactivar as socherencias d'AJAX",
+'searcheverything-enable' => 'Mirar en totz os espacios de nombres',
'searchrelated' => 'relacionato',
'searchall' => 'totz',
'showingresults' => "Contino se bi {{PLURAL:$1|amuestra '''1''' resultau|amuestran '''$1''' resultaus}} prencipiando por o numero '''$2'''.",
'showingresultsnum' => "Contino se bi {{PLURAL:$3|amuestra '''1''' resultau|amuestran os '''$3''' resultaus}} prencipiando por o numero '''$2'''.",
-'showingresultstotal' => "Contino {{PLURAL:$4|s'amuestra o resultau '''$1''' de '''$3'''|s'amuestran os resultaus '''$1 - $2''' de '''$3'''}}",
+'showingresultsheader' => "{{PLURAL:$5|Resultau '''$1''' de '''$3'''|Resultaus '''$1-$2''' de '''$3'''}} ta '''$4'''",
'nonefound' => "'''Pare cuenta''': Por defecto nomás se mira en bells espacios de nombres. Si quiere mirar en totz os contenius (incluyendo-ie pachinas de descusión, plantillas, etc), mire d'emplegar o prefixo ''all:'' u clave como prefixo o espacio de nombres deseyau.",
'search-nonefound' => "No s'ha trobato garra resultau que cumpla os criterios.",
'powersearch' => 'Busca avanzata',
@@ -1037,112 +1052,149 @@ Asegure-se que iste cambio no trencará a continidat de l'historial d'a pachina.
'powersearch-ns' => 'Mirar en os espacios de nombres:',
'powersearch-redir' => 'Listar reendreceras',
'powersearch-field' => 'Mirar',
+'powersearch-togglelabel' => 'Marcar:',
+'powersearch-toggleall' => 'Totz',
+'powersearch-togglenone' => 'Garra',
'search-external' => 'Busca externa',
'searchdisabled' => 'A busca en {{SITENAME}} ye temporalment desactivata. Entremistanto, puede mirar en {{SITENAME}} fendo servir buscadors externos, pero pare cuenta que os suyos endices de {{SITENAME}} puede no estar esviellatos.',
+# Quickbar
+'qbsettings' => 'Preferencias de "Quickbar"',
+'qbsettings-none' => 'Garra',
+'qbsettings-fixedleft' => 'Fixa a la zurda',
+'qbsettings-fixedright' => 'Fixa a la dreita',
+'qbsettings-floatingleft' => 'Flotant a la zurda',
+'qbsettings-floatingright' => 'Flotant a la dreita',
+
# Preferences page
-'preferences' => 'Preferencias',
-'mypreferences' => 'Preferencias',
-'prefs-edits' => "Numero d'edicions:",
-'prefsnologin' => 'No ye identificato',
-'prefsnologintext' => 'Ha d\'aber <span class="plainlinks">[{{fullurl:Special:UserLogin|returnto=$1}} enzetato una sesión] </span> ta cambiar as preferenzias d\'usuario.',
-'prefsreset' => "S'ha tornato as preferenzias t'as suyas baluras almadazenatas.",
-'qbsettings' => 'Preferencias de "Quickbar"',
-'qbsettings-none' => 'Garra',
-'qbsettings-fixedleft' => 'Fixa a la zurda',
-'qbsettings-fixedright' => 'Fixa a la dreita',
-'qbsettings-floatingleft' => 'Flotant a la zurda',
-'qbsettings-floatingright' => 'Flotant a la dreita',
-'changepassword' => 'Cambiar a contrasenya',
-'skin' => 'Aparenzia',
-'skin-preview' => 'Fer una prebatina',
-'math' => 'Esprisions matematicas',
-'dateformat' => 'Formato de calendata',
-'datedefault' => 'Sin de preferencias',
-'datetime' => 'Calendata y ora',
-'math_failure' => 'Error en o codigo',
-'math_unknown_error' => 'error esconoxita',
-'math_unknown_function' => 'función esconoxita',
-'math_lexing_error' => 'error de lexico',
-'math_syntax_error' => 'error de sintaxi',
-'math_image_error' => 'A conversión enta PNG ha tenito errors;
-comprebe si latex, dvips, gs y convert son bien instalatos.',
-'math_bad_tmpdir' => "No s'ha puesto escribir u creyar o directorio temporal d'esprisions matematicas",
-'math_bad_output' => "No s'ha puesto escribir u creyar o directorio de salida d'esprisions matematicas",
-'math_notexvc' => "No s'ha trobato o fichero executable ''texvc''. Por favor, leiga <em>math/README</em> ta confegurar-lo correctament.",
-'prefs-personal' => 'Datos presonals',
-'prefs-rc' => 'Zaguers cambeos',
-'prefs-watchlist' => 'Lista de seguimiento',
-'prefs-watchlist-days' => "Numero de días que s'amostrarán en a lista de seguimiento:",
-'prefs-watchlist-days-max' => '(masimo 7 diyas)',
-'prefs-watchlist-edits' => "Numero d'edicions que s'amostrarán en a lista ixamplata:",
-'prefs-watchlist-edits-max' => '(numero masimo: 1000)',
-'prefs-misc' => 'Atras preferencias',
-'prefs-resetpass' => 'Cambear a contrasenya',
-'saveprefs' => 'Alzar preferencias',
-'resetprefs' => "Tornar t'as preferencias por defecto",
-'restoreprefs' => 'Restaure todas as confeguracions por defecto',
-'textboxsize' => 'Edizión',
-'prefs-edit-boxsize' => "Grandaria d'a finestra d'edición.",
-'rows' => 'Ringleras:',
-'columns' => 'Columnas:',
-'searchresultshead' => 'Mirar',
-'resultsperpage' => "Resultaus que s'amostrarán por pachina:",
-'contextlines' => "Linias de contexto que s'amostrarán por resultau",
-'contextchars' => 'Carácters de contexto por linia',
-'stub-threshold' => 'Branquil superior ta o formateyo de <a href="#" class="stub">vinclos ta borradors</a> (en bytes):',
-'recentchangesdays' => "Días que s'amostrarán en ''zaguers cambeos'':",
-'recentchangesdays-max' => '(masimo $1 {{PLURAL:$1|día|días}})',
-'recentchangescount' => "Numero d'edizions que s'amostrarán, por defeuto, en as pachinas de zaguers cambeos, istorials y rechistros:",
-'savedprefs' => "S'han alzato as suyas preferencias.",
-'timezonelegend' => 'Fuso horario:',
-'timezonetext' => "¹Escriba a esferenzia (en oras) entre a suya ora local y a d'o serbidor (UTC).",
-'localtime' => 'Hora local:',
-'timezoneselect' => 'Zona oraria:',
-'timezoneuseserverdefault' => "Usar a zona d'o servidor",
-'timezoneuseoffset' => 'Atra (especifica a esferencia)',
-'timezoneoffset' => 'Esferencia¹:',
-'servertime' => 'A hora en o servidor ye:',
-'guesstimezone' => "Emplir-lo con a hora d'o navegador",
-'timezoneregion-africa' => 'Africa',
-'timezoneregion-america' => 'America',
-'timezoneregion-antarctica' => 'Antarctica',
-'timezoneregion-arctic' => 'Arctico',
-'timezoneregion-asia' => 'Asia',
-'timezoneregion-atlantic' => 'Ociano Atlantico',
-'timezoneregion-australia' => 'Australia',
-'timezoneregion-europe' => 'Europa',
-'timezoneregion-indian' => 'Ociano Indico',
-'timezoneregion-pacific' => 'Ociano Pacifico',
-'allowemail' => "Activar a recepción de correu d'atros usuarios",
-'prefs-searchoptions' => 'Opcions de busca',
-'prefs-namespaces' => 'Espacios de nombres',
-'defaultns' => 'Mirar por defeuto en istos espazios de nombres:',
-'default' => 'por defecto',
-'files' => 'Archibos',
-'prefs-custom-css' => 'CSS presonalizato',
-'prefs-custom-js' => 'JS presonalizato',
+'preferences' => 'Preferencias',
+'mypreferences' => 'Preferencias',
+'prefs-edits' => "Numero d'edicions:",
+'prefsnologin' => 'No ye identificato',
+'prefsnologintext' => 'Ha d\'haber <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} encetato una sesión] </span> ta cambiar as preferencias d\'usuario.',
+'changepassword' => 'Cambiar a contrasenya',
+'prefs-skin' => 'Aparencia',
+'skin-preview' => 'Fer una prebatina',
+'prefs-math' => 'Esprisions matematicas',
+'datedefault' => 'Sin de preferencias',
+'prefs-datetime' => 'Calendata y hora',
+'prefs-personal' => 'Datos presonals',
+'prefs-rc' => 'Zaguers cambeos',
+'prefs-watchlist' => 'Lista de seguimiento',
+'prefs-watchlist-days' => "Numero de días que s'amostrarán en a lista de seguimiento:",
+'prefs-watchlist-days-max' => '(masimo 7 diyas)',
+'prefs-watchlist-edits' => "Numero d'edicions que s'amostrarán en a lista ixamplata:",
+'prefs-watchlist-edits-max' => '(numero masimo: 1000)',
+'prefs-watchlist-token' => 'Ficha de lista de seguimiento:',
+'prefs-misc' => 'Atras preferencias',
+'prefs-resetpass' => 'Cambear a contrasenya',
+'prefs-email' => 'Opcions de correu electronico',
+'prefs-rendering' => 'Apariencia',
+'saveprefs' => 'Alzar preferencias',
+'resetprefs' => "Tornar t'as preferencias por defecto",
+'restoreprefs' => 'Restaure todas as confeguracions por defecto',
+'prefs-editing' => 'Edición',
+'prefs-edit-boxsize' => "Grandaria d'a finestra d'edición.",
+'rows' => 'Ringleras:',
+'columns' => 'Columnas:',
+'searchresultshead' => 'Mirar',
+'resultsperpage' => "Resultaus que s'amostrarán por pachina:",
+'contextlines' => "Linias de contexto que s'amostrarán por resultau",
+'contextchars' => 'Carácters de contexto por linia',
+'stub-threshold' => 'Branquil superior ta o formateyo de <a href="#" class="stub">vinclos ta borradors</a> (en bytes):',
+'recentchangesdays' => "Días que s'amostrarán en ''zaguers cambeos'':",
+'recentchangesdays-max' => '(masimo $1 {{PLURAL:$1|día|días}})',
+'recentchangescount' => "Numero d'edicions a amostrar, por defecto:",
+'prefs-help-recentchangescount' => 'Inclui os zaguers cambeos, historials de pachina y rechistros.',
+'prefs-help-watchlist-token' => "Si plena iste campo con una clau secreta se chenerará n filo RSS t'a suya lista de seguimeinto.
+Qui conoixca ista clau podrá leyer a suya lista de seguimiento, asinas que esliya una clau segura.
+Contino se i amuestra una calu chenerata de traza aleatoria que puede fer servir si quiere: $1",
+'savedprefs' => "S'han alzato as suyas preferencias.",
+'timezonelegend' => 'Fuso horario:',
+'localtime' => 'Hora local:',
+'timezoneuseserverdefault' => "Usar a zona d'o servidor",
+'timezoneuseoffset' => 'Atra (especifica a esferencia)',
+'timezoneoffset' => 'Esferencia¹:',
+'servertime' => 'A hora en o servidor ye:',
+'guesstimezone' => "Emplir-lo con a hora d'o navegador",
+'timezoneregion-africa' => 'Africa',
+'timezoneregion-america' => 'America',
+'timezoneregion-antarctica' => 'Antarctica',
+'timezoneregion-arctic' => 'Arctico',
+'timezoneregion-asia' => 'Asia',
+'timezoneregion-atlantic' => 'Ociano Atlantico',
+'timezoneregion-australia' => 'Australia',
+'timezoneregion-europe' => 'Europa',
+'timezoneregion-indian' => 'Ociano Indico',
+'timezoneregion-pacific' => 'Ociano Pacifico',
+'allowemail' => "Activar a recepción de correu d'atros usuarios",
+'prefs-searchoptions' => 'Opcions de busca',
+'prefs-namespaces' => 'Espacios de nombres',
+'defaultns' => 'Si no, mirar en istos espacios de nombres:',
+'default' => 'por defecto',
+'prefs-files' => 'fichers',
+'prefs-custom-css' => 'CSS presonalizato',
+'prefs-custom-js' => 'JS presonalizato',
+'prefs-reset-intro' => "Puet emplegar ista pachina ta restaurar as suyas preferencias a las valuras por defecto d'o sitio.
+No se podrá desfer iste cambio.",
+'prefs-emailconfirm-label' => 'Confirmación de correu electronico:',
+'prefs-textboxsize' => "Mida d'a pachina d'edición",
+'youremail' => 'Adreza de correu electronico:',
+'username' => "Nombre d'usuario:",
+'uid' => "ID d'usuario:",
+'prefs-memberingroups' => "Miembro {{PLURAL:$1|d'a colla|d'as collas}}:",
+'prefs-registration' => 'Tiempo de rechistro:',
+'yourrealname' => 'Nombre reyal:',
+'yourlanguage' => 'Luenga:',
+'yourvariant' => 'Modalidat linguistica:',
+'yournick' => 'Sinyadura:',
+'prefs-help-signature' => 'Os comentarios en pachina de discusión s\'han de sinyar con "<nowiki>~~~~</nowiki>", que se tornará en a suya sinyatura y calendata.',
+'badsig' => 'A suya sinyadura no ye conforme; comprebe as etiquetas HTML.',
+'badsiglength' => 'A sinyadura ye masiau larga.
+Habría de tener menos de $1 {{PLURAL:$1|carácter|carácters}}.',
+'yourgender' => 'Sexo:',
+'gender-unknown' => 'No especificato',
+'gender-male' => 'Hombre',
+'gender-female' => 'Muller',
+'prefs-help-gender' => 'Opcional: Emplegada ta corrección de chenero por o software. Ista información será publica.',
+'email' => 'Adreza de correu-e',
+'prefs-help-realname' => "* Nombre reyal (opcional): si esliche escribir-lo, se ferá servir ta l'atribución d'a suya faina.",
+'prefs-help-email' => "L'adreza de correu-e ye opcional, pero ye precisa ta que le ninviemos una nueva contrasenya si nunc la xublidase. Tamién puede fer que atros usuarios puedan contactar con vusté dende a suya pachina d'usuario u de descusión d'usuario sin haber de revelar a suya identidat.",
+'prefs-help-email-required' => 'Cal una adreza de correu-e.',
+'prefs-info' => 'Información basica',
+'prefs-i18n' => 'Internacionalización',
+'prefs-signature' => 'Sinyatura',
+'prefs-dateformat' => 'Formato de calendata',
+'prefs-timeoffset' => 'Diferencia horaria',
+'prefs-advancedediting' => 'Opcions avanzadas',
+'prefs-advancedrc' => 'Opcions avanzadas',
+'prefs-advancedrendering' => 'Opcions avanzadas',
+'prefs-advancedsearchoptions' => 'Opcions avanzadas',
+'prefs-advancedwatchlist' => 'Opcions avanzadas',
+'prefs-display' => 'Opcions de visualización',
+'prefs-diffs' => 'Diferencias',
# User rights
-'userrights' => "Confeguración d'os dreitos d'os usuarios", # Not used as normal message but as header for the special page itself
-'userrights-lookup-user' => "Confegurar collas d'usuarios",
-'userrights-user-editname' => "Escriba un nombre d'usuario:",
-'editusergroup' => "Editar as collas d'usuarios",
-'editinguser' => "S'esta cambiando os dreitos de l'usuario '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])",
-'userrights-editusergroup' => "Editar as collas d'usuarios",
-'saveusergroups' => "Alzar as collas d'usuarios",
-'userrights-groupsmember' => 'Miembro de:',
-'userrights-groups-help' => "Puede cambiar as collas a on que bi ye iste usuario.
+'userrights' => "Confeguración d'os dreitos d'os usuarios",
+'userrights-lookup-user' => "Confegurar collas d'usuarios",
+'userrights-user-editname' => "Escriba un nombre d'usuario:",
+'editusergroup' => "Editar as collas d'usuarios",
+'editinguser' => "S'esta cambiando os dreitos de l'usuario '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])",
+'userrights-editusergroup' => "Editar as collas d'usuarios",
+'saveusergroups' => "Alzar as collas d'usuarios",
+'userrights-groupsmember' => 'Miembro de:',
+'userrights-groupsmember-auto' => 'Miembro implicito de:',
+'userrights-groups-help' => "Puede cambiar as collas a on que bi ye iste usuario.
* Un caixa sinyalata significa que l'usuario ye en ixa colla.
* Una caixa no sinyalata significa que l'usuario no ye en ixa colla.
* Un * indica que vusté no puet sacar a colla dimpués d'adhibir-la, u vice-versa.",
-'userrights-reason' => 'Razón:',
-'userrights-no-interwiki' => "No tiene premiso ta editar os dreitos d'usuario en atras wikis.",
-'userrights-nodatabase' => 'A base de datos $1 no existe u no ye local.',
-'userrights-nologin' => "Ha d'[[Special:UserLogin|encetar una sesión]] con una cuenta d'almenistrador ta poder dar dreitos d'usuario.",
-'userrights-notallowed' => "A suya cuenta no tiene premisos ta dar dreitos d'usuario.",
-'userrights-changeable-col' => 'Grupos que puede cambiar',
-'userrights-unchangeable-col' => 'Collas que no puede cambiar',
+'userrights-reason' => 'Razón:',
+'userrights-no-interwiki' => "No tiene premiso ta editar os dreitos d'usuario en atras wikis.",
+'userrights-nodatabase' => 'A base de datos $1 no existe u no ye local.',
+'userrights-nologin' => "Ha d'[[Special:UserLogin|encetar una sesión]] con una cuenta d'almenistrador ta poder dar dreitos d'usuario.",
+'userrights-notallowed' => "A suya cuenta no tiene premisos ta dar dreitos d'usuario.",
+'userrights-changeable-col' => 'Grupos que puede cambiar',
+'userrights-unchangeable-col' => 'Collas que no puede cambiar',
# Groups
'group' => 'Colla:',
@@ -1195,6 +1247,7 @@ comprebe si latex, dvips, gs y convert son bien instalatos.',
'right-bigdelete' => 'Borrar pachinas con historials largos',
'right-deleterevision' => "Borrar y recuperar versions especificas d'una pachina",
'right-deletedhistory' => "Veyer as dentradas borratas de l'historial, sin o suyo texto asociato",
+'right-deletedtext' => 'Veyer o texto borrato y os cambios entre versions borratas',
'right-browsearchive' => 'Mirar pachinas borratas',
'right-undelete' => 'Recuperar una pachina',
'right-suppressrevision' => 'Revisar y recuperar versions amagatas ta os Admenistradors',
@@ -1208,6 +1261,8 @@ comprebe si latex, dvips, gs y convert son bien instalatos.',
'right-editprotected' => 'Editar pachinas protechitas (sin de protección en cascada)',
'right-editinterface' => "Editar a interficie d'usuario",
'right-editusercssjs' => "Editar os fichers CSS y JS d'atros usuarios",
+'right-editusercss' => "Editar os fichers CSS d'atros usuarios",
+'right-edituserjs' => "Editar os fichers JS d'atros usuarios",
'right-rollback' => "Desfer a escape as edicions d'o zaguer usuario que cambió una pachina",
'right-markbotedits' => 'Sinyalar as edicions esfeitas como edicions de bot',
'right-noratelimit' => 'No se vei afectato por os limites maximos',
@@ -1224,6 +1279,8 @@ comprebe si latex, dvips, gs y convert son bien instalatos.',
'right-siteadmin' => 'Trancar y destrancar a base de datos',
'right-reset-passwords' => "Reiniciar a contrasenya d'atros usuarios",
'right-override-export-depth' => 'Exporta pachinas que incluigan as enlazadas dica un fundaria de 5',
+'right-versiondetail' => "Amostrar a información adicional d'a versión d'o software",
+'right-sendemail' => 'Ninviar un correu electronico a atros usuarios',
# User rights log
'rightslog' => "Rechistro de cambios en os dreitos d'os usuarios",
@@ -1273,6 +1330,15 @@ comprebe si latex, dvips, gs y convert son bien instalatos.',
'recentchanges-legend' => 'Opcions sobre a pachina de zaguers cambeos',
'recentchangestext' => "Siga os cambeos más recients d'a wiki en ista pachina.",
'recentchanges-feed-description' => "Seguir os cambios más recients d'o wiki en ista fuent de noticias.",
+'recentchanges-label-legend' => 'Leyenda: $1.',
+'recentchanges-legend-newpage' => '$1 - pachina nueva',
+'recentchanges-label-newpage' => 'Ista edición ha creyau una nueva pachina',
+'recentchanges-legend-minor' => '$1 - edición menor',
+'recentchanges-label-minor' => 'Ista ye una edición menor',
+'recentchanges-legend-bot' => '$1 - edición de bot',
+'recentchanges-label-bot' => 'Ista edición fue feita por un bot',
+'recentchanges-legend-unpatrolled' => '$1 - edición sin patrullar',
+'recentchanges-label-unpatrolled' => "Esta edición encara no s'ha controlato",
'rcnote' => "Contino {{PLURAL:$1|s'amuestra o unico cambeo feito|s'amuestran os zaguers '''$1''' cambeos feitos}} en {{PLURAL:$2|o zaguer día|os zaguers '''$2''' días}}, dica o $5, $4.",
'rcnotefrom' => "Contino s'amuestran os cambeos dende '''$2''' (dica '''$1''').",
'rclistfrom' => 'Amostrar cambeos recients dende $1',
@@ -1299,6 +1365,8 @@ comprebe si latex, dvips, gs y convert son bien instalatos.',
# Recent changes linked
'recentchangeslinked' => 'Cambeos relacionatos',
+'recentchangeslinked-feed' => 'Cambeos relacionatos',
+'recentchangeslinked-toolbox' => 'Cambios relacionatos',
'recentchangeslinked-title' => 'Cambeos relacionatos con "$1"',
'recentchangeslinked-noresult' => 'No bi habió cambeos en as pachinas vinculatas en o intervalo de tiempo indicato.',
'recentchangeslinked-summary' => "Ista ye una lista d'os zaguers cambios feitos en pachinas con vinclos dende una pachina especifica (u ta miembros d'una categoría especificata). S'amuestran en '''negreta''' as pachinas d'a suya [[Special:Watchlist|lista de seguimiento]].",
@@ -1308,8 +1376,8 @@ comprebe si latex, dvips, gs y convert son bien instalatos.',
# Upload
'upload' => 'Cargar fichero',
'uploadbtn' => 'Cargar un fichero',
-'reupload' => 'Cargar un atra begada',
'reuploaddesc' => 'Anular a carga y tornar ta o formulario de carga de fichers.',
+'upload-tryagain' => "Ninviar a descripción de l'archivo modificau",
'uploadnologin' => 'No ha encetato una sesión',
'uploadnologintext' => "Ha d'estar [[Special:UserLogin|rechistrau]] ta cargar fichers.",
'upload_directory_missing' => 'O directorio de carga ($1) no existe y no lo puede creyar o servidor web.',
@@ -1340,6 +1408,7 @@ Ta incluyir un fichero en una pachina, emplegue un vinclo d'una d'istas trazas
'minlength1' => 'Os nombres de fichero han de tener a lo menos una letra.',
'illegalfilename' => "O nombre de fichero «$1» tiene carácters no premititos en títols de pachinas. Por favor, cambee o nombre d'o fichero y mire de tornar a cargarlo.",
'badfilename' => 'O nombre d\'a imachen s\'ha cambiato por "$1".',
+'filetype-mime-mismatch' => "A extensión d'o fichero no coincide con o suyo tipo MIME.",
'filetype-badmime' => 'No se premite cargar fichers de tipo MIME "$1".',
'filetype-bad-ie-mime' => 'No puet cargar iste fichero porque o Internet Explorer lo consideraría como "$1", que ye un tipo de fichero no premitito y potencialment perigloso.',
'filetype-unwanted-type' => "Os '''\".\$1\"''' son un tipo de fichero no deseyato. Se prefieren os fichers {{PLURAL:\$3|de tipo|d'os tipos}} \$2.",
@@ -1358,7 +1427,6 @@ Si quiere que o suyo resumen amaneixca aquí, habrá d'editar-lo manualment.
* Nombre d'o fichero que ye cargando: '''<tt>[[:$1]]</tt>'''
* Nombre d'o fichero ya existent: '''<tt>[[:$2]]</tt>'''
Por favor, trigue un nombre diferent.",
-'fileexists-thumb' => "<center>'''Archibo esistent'''</center>",
'fileexists-thumbnail-yes' => "Pareix que o fichero ye una imachen chicota ''(miniatura)''. [[$1|thumb]]
Comprebe por favor o fichero '''<tt>[[:$1]]</tt>'''.
Si o fichero comprebato ye a mesma imachen en tamanyo orichinal no cal cargar una nueva miniatura.",
@@ -1372,6 +1440,7 @@ Si encara quiere cargar ixe fichero, torne y faiga servir un nuevo nombre. [[Fil
'file-deleted-duplicate' => "Un fichero igual que iste ([[$1]]) s'ha borrato enantes. Debería mirar-se o historial de borraus d'o fichero antes de continar cargando-lo atra vegada.",
'successfulupload' => 'Cargata correctament',
'uploadwarning' => 'Alvertencia de carga de fichero',
+'uploadwarning-text' => "Por favor, modifique a descripción d'o fichero d'abaixo y torne a intentar-lo.",
'savefile' => 'Alzar fichero',
'uploadedimage' => '«[[$1]]» cargato.',
'overwroteimage' => 's\'ha cargato una nueva versión de "[[$1]]"',
@@ -1379,11 +1448,14 @@ Si encara quiere cargar ixe fichero, torne y faiga servir un nuevo nombre. [[Fil
'uploaddisabledtext' => 'A carga de fichers ye desactivata.',
'php-uploaddisabledtext' => 'A carga de fichers PHP ye desactivata. Por favor, verfique a confeguración de file_uploads.',
'uploadscripted' => 'Iste fichero contiene codigo de script u HTML que puede estar interpretado incorrectament por un navegador.',
-'uploadcorrupt' => "Iste archibo ye corrompito u tiene una estensión incorreuta. Por fabor, comprebe l'archibo y cargue-lo una atra begada.",
'uploadvirus' => 'Iste fichero tiene un virus! Detalles: $1',
+'upload-source' => 'Fichero fuent',
'sourcefilename' => "Nombre d'o fichero d'orichen:",
+'sourceurl' => "URL d'orichen",
'destfilename' => "Nombre d'o fichero de destín:",
'upload-maxfilesize' => "Masima grandaria d'o fichero: $1",
+'upload-description' => "Descripción d'o fichero",
+'upload-options' => 'Opcions de carga',
'watchthisupload' => 'Cosirar iste fichero',
'filewasdeleted' => 'Una fichero con iste mesmo nombre ya se cargó denantes y estió borrato dimpués. Habría de comprebar $1 antes de tornar a cargar-lo una atra vegada.',
'upload-wasdeleted' => "'''Pare cuenta: Ye cargando un fichero que ya estió borrato d'antes más.'''
@@ -1405,12 +1477,43 @@ MGP # Pentax
PICT # misz.
#</pre> <!-- dixe ista linia esautament igual como ye -->',
-'upload-proto-error' => 'Protocolo incorrecto',
-'upload-proto-error-text' => 'Si quiere cargar fichers dende atra pachina, a URL ha de prencipiar por <code>http://</code> u <code>ftp://</code>.',
-'upload-file-error' => 'Error interna',
-'upload-file-error-text' => "Ha escaicito una error interna entre que se prebaba de creyar un fichero temporal en o servidor. Por favor, contaute con un [[Special:ListUsers/sysop|almenistrador]] d'o sistema.",
-'upload-misc-error' => 'Error esconoixita en a carga',
-'upload-misc-error-text' => "Ha escaixito una error entre que se cargaba o fichero. Por favor, comprebe que a URL ye conforme y accesible y dimpués prebe de fer-lo una atra vegada. Si o problema contina, contaute con un [[Special:ListUsers/sysop|almenistrador]] d'o sistema.",
+'upload-proto-error' => 'Protocolo incorrecto',
+'upload-proto-error-text' => 'Si quiere cargar fichers dende atra pachina, a URL ha de prencipiar por <code>http://</code> u <code>ftp://</code>.',
+'upload-file-error' => 'Error interna',
+'upload-file-error-text' => "Ha escaicito una error interna entre que se prebaba de creyar un fichero temporal en o servidor. Por favor, contaute con un [[Special:ListUsers/sysop|almenistrador]] d'o sistema.",
+'upload-misc-error' => 'Error esconoixita en a carga',
+'upload-misc-error-text' => "Ha escaixito una error entre que se cargaba o fichero. Por favor, comprebe que a URL ye conforme y accesible y dimpués prebe de fer-lo una atra vegada. Si o problema contina, contaute con un [[Special:ListUsers/sysop|almenistrador]] d'o sistema.",
+'upload-too-many-redirects' => 'A URL contien masiadas endreceras',
+'upload-unknown-size' => 'Grandaria desconoixid',
+'upload-http-error' => 'Ha ocorriu una error HTTP: $1',
+
+# img_auth script messages
+'img-auth-accessdenied' => 'Acceso refusau',
+'img-auth-nopathinfo' => 'Falta PATH_INFO.
+O suyo servidor no ye configurau ta pasar ista información.
+Puet que siga basau en CGI y no siga compatible con img_auth.
+Se veiga http://www.mediawiki.org/wiki/Manual:Image_Authorization.',
+'img-auth-notindir' => 'A rota solicitada no ye en o directorio de cargas configurau',
+'img-auth-badtitle' => 'No s\'ha puesto construyir un títol valito dende "$1".',
+'img-auth-nologinnWL' => 'No ha encetau sesión y "$1" no ye en a lista blanca.',
+'img-auth-nofile' => 'No existe l\'archivo "$1".',
+'img-auth-isdir' => 'Ye mirando d\'acceder ta un directorio "$1".
+Nomás ye premitito l\'acceso ta os fichers.',
+'img-auth-streaming' => 'Streaming (lectura contina) "$1".',
+'img-auth-public' => "A función de img_auth.php ye amostrar archivos dende una wiki privada.
+Ista wiki ye configurada como wiki publica.
+Por seguridat, s'ha desactivau img_auth.php.",
+'img-auth-noread' => 'L\'usuario no tien acceso de lectura ta "$1".',
+
+# HTTP errors
+'http-invalid-url' => 'URL incorrecta: $1',
+'http-invalid-scheme' => 'As URLs con con prefixo "$1" no son compatibles',
+'http-request-error' => 'A demanda HTTP ha fallau por una error desconoixida.',
+'http-read-error' => 'Error de lectura HTTP.',
+'http-timed-out' => 'A requesta HTTP ha circumducito.',
+'http-curl-error' => 'Error en recuperar a URL: $1',
+'http-host-unreachable' => "No s'ha puesto acceder t'a URL.",
+'http-bad-status' => 'Ha habiu un problema en a requesta HTTP: $1 $2',
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => "No s'ha puesto acceder t'a URL",
@@ -1419,6 +1522,7 @@ PICT # misz.
'upload-curl-error28-text' => "O tiempo de respuesta d'a pachina ye masiau gran. Por favor, comprebe si o servidor ye funcionando, aguarde bell ratet y mire de tornar a fer-lo. Talment deseye prebar de nuevas quan o ret tienga menos carga.",
'license' => 'Licencia:',
+'license-header' => 'Licenciando',
'nolicense' => "No s'en ha trigato garra",
'license-nopreview' => '(Anvista previa no disponible)',
'upload_source_url' => ' (una URL conforme y publicament accesible)',
@@ -1439,6 +1543,7 @@ Fendo click en un encabezau de columna se cambia o criterio d'ordenación.",
'listfiles_count' => 'Versions',
# File description page
+'file-anchor-link' => 'Fichero',
'filehist' => "Historial d'o fichero",
'filehist-help' => 'Punche en una calendata/hora ta veyer o fichero como amaneixeba por ixas envueltas.',
'filehist-deleteall' => 'borrar-lo tot',
@@ -1447,12 +1552,13 @@ Fendo click en un encabezau de columna se cambia o criterio d'ordenación.",
'filehist-current' => 'actual',
'filehist-datetime' => 'Calendata/Hora',
'filehist-thumb' => 'Miniatura',
-'filehist-thumbtext' => "Miniatura d'a bersión de $1",
+'filehist-thumbtext' => "Miniatura d'a versión de $1",
'filehist-nothumb' => 'Sin de miniatura',
'filehist-user' => 'Usuario',
'filehist-dimensions' => 'Dimensions',
'filehist-filesize' => "Grandaria d'o fichero",
'filehist-comment' => 'Comentario',
+'filehist-missing' => 'No se troba o fichero',
'imagelinks' => 'Vinclos ta o fichero',
'linkstoimage' => "{{PLURAL:$1|A pachina siguient tiene|Contino s'amuestran $1 pachinas que tienen}} vinclos ta iste fichero:",
'linkstoimage-more' => 'Bi ha más de {{PLURAL:$1|una pachina con vinclos|$1 pachinas con vinclos}} enta iste fichero.
@@ -1463,15 +1569,16 @@ Tamién puetz consultar a [[Special:WhatLinksHere/$2|lista completa]].',
'morelinkstoimage' => 'Amostrar [[Special:WhatLinksHere/$1|más vinclos]] ta iste fichero.',
'redirectstofile' => '{{PLURAL:$1|O siguient fichero reendreza|Os siguients $1 fichers reendrezan}} enta iste fichero:',
'duplicatesoffile' => "{{PLURAL:$1|O siguient fichero ye un duplicato|Os siguients $1 fichers son duplicatos}} d'iste fichero ([[Special:FileDuplicateSearch/$2|más detalles]]):",
-'sharedupload' => 'Iste fichero provién de $1 y talment siga emplegato en atros prochectos.', # $1 is the repo name, $2 is shareduploadwiki(-desc)
-'shareduploadwiki' => 'Ta más informazión, consulte $1.',
-'shareduploadwiki-desc' => "Contino s'amuestra a descripzión d'a suya $1 en o reposte compartiu.",
-'shareduploadwiki-linktext' => "pachina de descripzión de l'archibo",
-'noimage' => 'No bi ha garra archibo con ixe nombre. Manimenos, puede $1.',
-'noimage-linktext' => 'cargar uno',
+'sharedupload' => 'Iste fichero provién de $1 y talment siga emplegato en atros prochectos.',
+'sharedupload-desc-there' => "Iste fichero ye de $1 y puet estar emplegau por atros prochectos.
+Por favor mire-se a [$2 pachina de descripción d'o fichero] ta trobar más información.",
+'sharedupload-desc-here' => "Iste fichero ye de $1 y pueden emplegar-lo atros prochectos.
+Debaixo s'amuestra a descripción d'a suya [$2 pachina de descripción].",
+'filepage-nofile' => 'No existe garra fichero con ixe nombre.',
+'filepage-nofile-link' => 'No existe garra fichero con ixe nombre, pero puet [$1 puyar-lo].',
'uploadnewversion-linktext' => "Cargar una nueva versión d'iste fichero",
-'shared-repo-from' => 'dende $1', # $1 is the repository name
-'shared-repo' => 'un reposte compartito', # used when shared-repo-NAME does not exist
+'shared-repo-from' => 'dende $1',
+'shared-repo' => 'un reposte compartito',
# File reversion
'filerevert' => 'Revertir $1',
@@ -1500,6 +1607,7 @@ Tamién puetz consultar a [[Special:WhatLinksHere/$2|lista completa]].',
** Dreitos d'autor no respetatos
** Archivo duplicato",
'filedelete-edit-reasonlist' => "Editar as razons d'o borrau",
+'filedelete-maintenance' => 'O borramiento y recuperación de fichers ye desactivau temporalment entre que dura o mantenimiento.',
# MIME search
'mimesearch' => 'Mirar por tipo MIME',
@@ -1520,7 +1628,7 @@ Tamién puetz consultar a [[Special:WhatLinksHere/$2|lista completa]].',
# Random page
'randompage' => "Una pachina a l'azar",
-'randompage-nopages' => 'No bi ha garra pachina en o espazio de nombres "$1".',
+'randompage-nopages' => 'No i ha garra pachina en {{PLURAL:$2|o siguient espacio de nombres|os siguients espacios de nombres}}: "$1".',
# Random redirect
'randomredirect' => 'Ir-ie a una adreza qualsiquiera',
@@ -1532,6 +1640,7 @@ Tamién puetz consultar a [[Special:WhatLinksHere/$2|lista completa]].',
'statistics-header-edits' => "Estatisticas d'edicions",
'statistics-header-views' => 'Estatisticas de vesitas',
'statistics-header-users' => "Estatisticas d'usuarios",
+'statistics-header-hooks' => 'Atras estatisticas',
'statistics-articles' => 'Pachinas de contenito',
'statistics-pages' => 'Pachinas',
'statistics-pages-desc' => "Todas as pachinas d'o wiki, incluyendo pachinas de descusión, reendreceras, etz.",
@@ -1560,8 +1669,8 @@ Cada ringlera contién o vinclo t'a primer y segunda reendreceras, y tamién o d
'brokenredirects' => 'Reendreceras crebatas',
'brokenredirectstext' => 'As siguients endreceras levan enta pachinas inexistents.',
-'brokenredirects-edit' => '(editar)',
-'brokenredirects-delete' => '(borrar)',
+'brokenredirects-edit' => 'editar',
+'brokenredirects-delete' => 'borrar',
'withoutinterwiki' => "Pachinas sin d'interwikis",
'withoutinterwiki-summary' => 'As pachinas siguients no tienen vinclos ta versions en atras luengas:',
@@ -1668,16 +1777,17 @@ Puede reducir o listau trigando un tipo de rechistro, o nombre de l'usuario (sen
# Special:Categories
'categories' => 'Categorías',
-'categoriespagetext' => "As siguients categorías contienen bella pachina u archibo multimedia.
+'categoriespagetext' => "{{PLURAL:$1|A siguient categoría contién|As siguients categorías contienen}} pachinas u fichers multimedia.
No s'amuestran aquí as [[Special:UnusedCategories|categorías no emplegatas]].
-Se beigan tamién as [[Special:WantedCategories|categorías requiestas]].",
+Se veigan tamién as [[Special:WantedCategories|categorías requiestas]].",
'categoriesfrom' => 'Amostrar as categoría que prencipien por:',
'special-categories-sort-count' => 'ordenar por recuento',
'special-categories-sort-abc' => 'ordenar alfabeticament',
# Special:DeletedContributions
-'deletedcontributions' => "Contrebucions d'usuario borratas",
-'deletedcontributions-title' => "Contrebucions d'usuario borradas",
+'deletedcontributions' => "Contrebucions d'usuario borratas",
+'deletedcontributions-title' => "Contrebucions d'usuario borradas",
+'sp-deletedcontributions-contribs' => 'contrebucions',
# Special:LinkSearch
'linksearch' => 'vinclos externos',
@@ -1693,6 +1803,16 @@ Protocolos suportados: <tt>$1</tt>',
'listusersfrom' => 'Amostrar usuarios que o nombre suyo prencipie por:',
'listusers-submit' => 'Amostrar',
'listusers-noresult' => "No s'ha trobato ixe usuario.",
+'listusers-blocked' => '({{GENDER:$1|bloqueyato|bloqueyata}})',
+
+# Special:ActiveUsers
+'activeusers' => "Lista d'usuarios activos",
+'activeusers-intro' => "Ista ye una lista d'usuarios que han teniu bella actividat en os zaguers $1 {{PLURAL:$1|diya|diyas}}.",
+'activeusers-count' => '$1 {{PLURAL:$1|edición|edicions}} en os zaguers {{PLURAL:$3|diya|$3 diyas}}',
+'activeusers-from' => "Amostrar nombres d'usuario que prencipien por:",
+'activeusers-hidebots' => 'Amagar robots',
+'activeusers-hidesysops' => 'Amagar administradors',
+'activeusers-noresult' => "No s'han trobato usuarios.",
# Special:Log/newusers
'newuserlogpage' => 'Rechistro de nuevos usuarios',
@@ -1703,16 +1823,22 @@ Protocolos suportados: <tt>$1</tt>',
'newuserlog-autocreate-entry' => 'Cuenta creyata automaticament',
# Special:ListGroupRights
-'listgrouprights' => "Dreitos d'a colla d'usuarios",
-'listgrouprights-summary' => "Contino trobará a lista de collas d'usuario definitas en iste wiki, con os suyos dreitos d'acceso asociatos. Tamién puet trobar aquí [[{{MediaWiki:Listgrouprights-helppage}}|información adicional]] sobre os dreitos individuals.",
-'listgrouprights-group' => 'Colla',
-'listgrouprights-rights' => 'Dreitos',
-'listgrouprights-helppage' => "Help:Dreitos d'a colla",
-'listgrouprights-members' => '(lista de miembros)',
-'listgrouprights-addgroup' => 'Puet adhibir {{PLURAL:$2|colla|collas}}: $1',
-'listgrouprights-removegroup' => 'Puede borrar {{PLURAL:$2|colla|collas}}: $1',
-'listgrouprights-addgroup-all' => 'Puede adhibir todas as collas',
-'listgrouprights-removegroup-all' => 'Puede borrar todas as collas',
+'listgrouprights' => "Dreitos d'a colla d'usuarios",
+'listgrouprights-summary' => "Contino trobará a lista de collas d'usuario definitas en iste wiki, con os suyos dreitos d'acceso asociatos. Tamién puet trobar aquí [[{{MediaWiki:Listgrouprights-helppage}}|información adicional]] sobre os dreitos individuals.",
+'listgrouprights-key' => '* <span class="listgrouprights-granted">Dreito atorgau</span>
+* <span class="listgrouprights-revoked">Dreito revocau</span>',
+'listgrouprights-group' => 'Colla',
+'listgrouprights-rights' => 'Dreitos',
+'listgrouprights-helppage' => "Help:Dreitos d'a colla",
+'listgrouprights-members' => '(lista de miembros)',
+'listgrouprights-addgroup' => 'Puet adhibir {{PLURAL:$2|colla|collas}}: $1',
+'listgrouprights-removegroup' => 'Puede borrar {{PLURAL:$2|colla|collas}}: $1',
+'listgrouprights-addgroup-all' => 'Puede adhibir todas as collas',
+'listgrouprights-removegroup-all' => 'Puede borrar todas as collas',
+'listgrouprights-addgroup-self' => 'Adhibir {{PLURAL:$2|colla|collas}} a la suya propia cuenta: $1',
+'listgrouprights-removegroup-self' => "Eliminar {{PLURAL:$2|colla|collas}} d'a suya propia cuenta: $1",
+'listgrouprights-addgroup-self-all' => 'Adhibir-se a todas as collas',
+'listgrouprights-removegroup-self-all' => 'Salir de todas as collas',
# E-mail user
'mailnologin' => "No ninviar l'adreza",
@@ -1785,29 +1911,30 @@ L\'adreza de correu-e que endicó en as suyas [[Special:Preferences|preferencias
'enotif_anon_editor' => 'usuario anonimo $1',
'enotif_body' => 'Quiesto/a $WATCHINGUSERNAME,
-A pachina «$PAGETITLE» de {{SITENAME}}
-ha estato $CHANGEDORCREATED por l\'usuario $PAGEEDITOR o $PAGEEDITDATE.
-Puede trobar a bersión autual en {{fullurl:$PAGETITLE}}
+A pachina $PAGETITLE de {{SITENAME}} ha estato $CHANGEDORCREATED por l\'usuario $PAGEEDITOR o $PAGEEDITDATE. Puede veyer a versión actual en $PAGETITLE_URL.
$NEWPAGE
-O resumen d\'a edizión ye: $PAGESUMMARY $PAGEMINOREDIT
+Resumen d\'edición: $PAGESUMMARY $PAGEMINOREDIT
-Ta comunicar-se con l\'usuario:
-por correu: {{fullurl:Special:Emailuser|target=$PAGEEDITOR}}
-en o wiki: {{fullurl:User:$PAGEEDITOR}}
+Ta contactar con l\'editor:
+correu: $PAGEEDITOR_EMAIL
+wiki: $PAGEEDITOR_WIKI
-Ta recullir nuebas notificazions de cambios d\'ista pachina abrá de besitar-la nuebament.
-Tamién puede cambiar, en a su lista de seguimiento, as opzions de notificazión d\'as pachinas que ye cosirando.
+Ta recullir nuevas notificacions de cambios d\'ista pachina habrá de vesitar-la nuevament.
+Tamién puede cambiar, en a su lista de seguimiento, as opcions de notificación d\'as pachinas que ye cosirando.
Atentament,
- O sistema de notificazión de {{SITENAME}}.
+O sistema de notificación de {{SITENAME}}.
--
-Ta cambiar as opzions d\'a suya lista de seguimiento en:
-{{fullurl:Special:Watchlist|edit=yes}}
+Ta cambiar as opcions d\'a suya lista de seguimiento, punche:
+{{fullurl:{{#special:Watchlist}}/edit}}
+
+Ta borrar ista pachina d\'a suya lista de seguimiento, punche:
+$UNWATCHURL
-Ta obtenir más informazión y aduya:
+Ta obtenir más información y aduya:
{{fullurl:{{MediaWiki:Helppage}}}}',
# Delete
@@ -1819,10 +1946,11 @@ Ta obtenir más informazión y aduya:
'exblank' => 'a pachina yera bueda',
'delete-confirm' => 'Borrar "$1"',
'delete-legend' => 'Borrar',
-'historywarning' => 'Pare cuenta: A pachina que ba a borrar tiene un istorial de cambeos:',
+'historywarning' => "'''Pare cuenta!:''' A pachina que ye en momentos de borrar tien un historial de $1 {{PLURAL:$1|versión|versions}}:",
'confirmdeletetext' => "Ye en momentos de borrar d'a base de datos una pachina con tot o suyo historial.
Por favor, confirme que reyalment ye mirando de fer ixo, que entiende as conseqüencias, y que lo fa d'alcuerdo con as [[{{MediaWiki:Policy-url}}|politicas]] d'o wiki.",
'actioncomplete' => 'Acción rematada',
+'actionfailed' => "L'acción ha feito fallita",
'deletedtext' => 'S\'ha borrau "<nowiki>$1</nowiki>".
Se veiga en $2 un rechistro d\'os borraus recients.',
'deletedarticle' => 'borrato "$1"',
@@ -1843,18 +1971,19 @@ Se veiga en $2 un rechistro d\'os borraus recients.',
'delete-warning-toobig' => "Ista pachina tiene un historial d'edición prou largo, con más de $1 {{PLURAL:$1|versión|versions}}. Si la borra podría corromper as operacions d'a base de datos de {{SITENAME}}; contine con cuenta.",
# Rollback
-'rollback' => 'Revertir edicions',
-'rollback_short' => 'Revertir',
-'rollbacklink' => 'revertir',
-'rollbackfailed' => "No s'ha puesto revertir",
-'cantrollback' => "No se pueden revertir as edicions; o zaguer colaborador ye o solo autor d'iste articlo.",
-'alreadyrolled' => "No se puet desfer a zaguer edición de [[:$1]] feita por [[User:$2|$2]] ([[User talk:$2|descusión]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); belatro usuario ya ha editato u desfeito edicions en ixa pachina.
+'rollback' => 'Revertir edicions',
+'rollback_short' => 'Revertir',
+'rollbacklink' => 'revertir',
+'rollbackfailed' => "No s'ha puesto revertir",
+'cantrollback' => "No se pueden revertir as edicions; o zaguer colaborador ye o solo autor d'iste articlo.",
+'alreadyrolled' => "No se puet desfer a zaguer edición de [[:$1]] feita por [[User:$2|$2]] ([[User talk:$2|descusión]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); belatro usuario ya ha editato u desfeito edicions en ixa pachina.
A zaguer edición d'a pachina la fació [[User:$3|$3]] ([[User talk:$3|descusión]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-'editcomment' => "O resumen d'a edición ye: \"''\$1''\".", # only shown if there is an edit comment
-'revertpage' => "S'han revertito as edicions de [[Special:Contributions/$2|$2]] ([[User talk:$2|Descusión]]); tornando t'a zaguera versión editada por [[User:$1|$1]]", # Additionally available: $3: revid of the revision reverted to, $4: timestamp of the revision reverted to, $5: revid of the revision reverted from, $6: timestamp of the revision reverted from
-'rollback-success' => "Revertidas as edicions de $1; s'ha retornato t'a zaguer versión de $2.",
-'sessionfailure' => 'Pareix que bi ha un problema con a suya sesión;
+'editcomment' => "O resumen d'a edición ye: \"''\$1''\".",
+'revertpage' => "S'han revertito as edicions de [[Special:Contributions/$2|$2]] ([[User talk:$2|Descusión]]); tornando t'a zaguera versión editada por [[User:$1|$1]]",
+'revertpage-nouser' => "S'han revertito as edicions feitas por (nombre d'usuario eliminato) a la zaguera versión feita por [[User:$1|$1]]",
+'rollback-success' => "Revertidas as edicions de $1; s'ha retornato t'a zaguer versión de $2.",
+'sessionfailure' => 'Pareix que bi ha un problema con a suya sesión;
s\'ha anulato ista acción como mida de precura contra seqüestros de sesión.
Por favor, prete "Entazaga", recargue a pachina d\'a que venió, y torne a prebar alavez.',
@@ -1872,7 +2001,7 @@ Por favor, prete "Entazaga", recargue a pachina d\'a que venió, y torne a preba
'protectexpiry' => 'Calendata de circumducción:',
'protect_expiry_invalid' => 'O tiempo de circumducción ye incorrecto.',
'protect_expiry_old' => 'O tiempo de circumducción ye una calendata ya pasata.',
-'protect-unchain' => 'Confegurar premisos ta treslaus',
+'protect-unchain-permissions' => 'Desbloqueyar opcions de protección avanzatas',
'protect-text' => "Puetz veyer y cambiar o livel e protección d'a pachina '''<nowiki>$1</nowiki>'''.",
'protect-locked-blocked' => "No puede cambiar os livels de protección mientres ye bloqueyato. Contino se i amuestran as opcions actuals d'a pachina '''$1''':",
'protect-locked-dblock' => "Os livels de protección no se pueden cambiar por un bloqueyo activo d'a base de datos.
@@ -1899,7 +2028,7 @@ Contino se i amuestran as opcions actuals d'a pachina '''$1''':",
**Guerra d'edicions
**Pachina muit vesitada",
'protect-edit-reasonlist' => 'Editar as razons ta protecher',
-'protect-expiry-options' => '1 hora:1 hour,1 día:1 day,1 semana:1 week,2 semanas:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 anyo:1 year,ta cutio:infinite', # display1:time1,display2:time2,...
+'protect-expiry-options' => '1 hora:1 hour,1 día:1 day,1 semana:1 week,2 semanas:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 anyo:1 year,ta cutio:infinite',
'restriction-type' => 'Premiso:',
'restriction-level' => 'Livel de restricción:',
'minimum-size' => 'Grandaria menima',
@@ -1935,6 +2064,7 @@ Si s'ha creyato una nueva pachina con o mesmo nombre dende que se borró a orich
'undelete-nodiff' => "No s'ha trobato garra versión anterior.",
'undeletebtn' => 'Restaurar!',
'undeletelink' => 'amostrar/restaurar',
+'undeleteviewlink' => 'veyer',
'undeletereset' => 'Prencipiar',
'undeleteinvert' => 'Contornar selección',
'undeletecomment' => 'Razón:',
@@ -1972,19 +2102,23 @@ $1",
'contributions-title' => "Contribucions de l'usuario $1",
'mycontris' => 'Contrebucions',
'contribsub2' => 'De $1 ($2)',
-'nocontribs' => "No s'han trobato cambeos que concordasen con ixos criterios", # Optional parameter: $1 is the user name
+'nocontribs' => "No s'han trobato cambeos que concordasen con ixos criterios",
'uctop' => '(zaguer cambeo)',
'month' => 'Dende o mes (y anteriors):',
'year' => "Dende l'anyo (y anteriors):",
-'sp-contributions-newbies' => "Amostrar nomás as contrebucions d'os usuarios nuevos",
-'sp-contributions-newbies-sub' => 'Por nuevos usuarios',
-'sp-contributions-newbies-title' => "Contrebucions d'os nuevos usuarios",
-'sp-contributions-blocklog' => 'Rechistro de bloqueyos',
-'sp-contributions-logs' => 'rechistros',
-'sp-contributions-search' => 'Mirar contribucions',
-'sp-contributions-username' => "Adreza IP u nombre d'usuario:",
-'sp-contributions-submit' => 'Mirar',
+'sp-contributions-newbies' => "Amostrar nomás as contrebucions d'os usuarios nuevos",
+'sp-contributions-newbies-sub' => 'Por nuevos usuarios',
+'sp-contributions-newbies-title' => "Contrebucions d'os nuevos usuarios",
+'sp-contributions-blocklog' => 'Rechistro de bloqueyos',
+'sp-contributions-deleted' => "contribucions d'usuario borradas",
+'sp-contributions-logs' => 'rechistros',
+'sp-contributions-talk' => 'descusión',
+'sp-contributions-userrights' => "administración de dreitos d'usuario",
+'sp-contributions-blocked-notice' => "Iste usuario ye bloqueyato en istos momentos. A zaguer dentrada d'o rechistro de bloqueyos se presienta debaixo ta más información:",
+'sp-contributions-search' => 'Mirar contribucions',
+'sp-contributions-username' => "Adreza IP u nombre d'usuario:",
+'sp-contributions-submit' => 'Mirar',
# What links here
'whatlinkshere' => 'Pachinas que enlazan con ista',
@@ -2007,6 +2141,7 @@ $1",
# Block/unblock
'blockip' => 'Bloqueyar usuario',
+'blockip-title' => 'Bloqueyar usuario',
'blockip-legend' => 'Bloqueyar usuario',
'blockiptext' => "Replene o siguient formulario ta bloqueyar l'acceso
d'escritura dende una cuenta d'usuario u una adreza IP especifica.
@@ -2033,7 +2168,7 @@ as pachinas que s'han vandalizato).",
'ipbenableautoblock' => "bloqueyar automaticament l'adreza IP emplegata por iste usuario, y qualsiquier IP posterior dende a que prebe d'editar",
'ipbsubmit' => 'bloqueyar a iste usuario',
'ipbother' => 'Especificar atro periodo',
-'ipboptions' => '2 horas:2 hours,1 día:1 day,3 días:3 days,1 semana:1 week,2 semanas:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 anyo:1 year,ta cutio:infinite', # display1:time1,display2:time2,...
+'ipboptions' => '2 horas:2 hours,1 día:1 day,3 días:3 days,1 semana:1 week,2 semanas:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 anyo:1 year,ta cutio:infinite',
'ipbotheroption' => 'un atra',
'ipbotherreason' => 'Razons diferens u adicionals',
'ipbhidename' => "Amagar o nombre d'usuario en edicions y listas",
@@ -2061,9 +2196,11 @@ as pachinas que s'han vandalizato).",
'ipblocklist-sh-tempblocks' => '$1 bloqueyos temporals',
'ipblocklist-sh-addressblocks' => "$1 bloqueyos d'adrezas IP individuals",
'ipblocklist-submit' => 'Mirar',
+'ipblocklist-localblock' => 'Bloqueyo local',
+'ipblocklist-otherblocks' => '{{PLURAL:$1|Atro bloqueyo|Atros bloqueyos}}',
'blocklistline' => '$1, $2 ha bloqueyato a $3 ($4)',
'infiniteblock' => 'infinito',
-'expiringblock' => 'zircunduze o $1',
+'expiringblock' => 'circumduz o $1 a las $2',
'anononlyblock' => 'nomás anon.',
'noautoblockblock' => 'Bloqueyo automatico desactivato',
'createaccountblock' => "S'ha bloqueyato a creyación de nuevas cuentas",
@@ -2077,7 +2214,10 @@ as pachinas que s'han vandalizato).",
'contribslink' => 'contrebucions',
'autoblocker' => 'Ye bloqueyato automaticament porque a suya adreza IP l\'ha feito servir recientement "[[User:$1|$1]]". A razón data ta bloqueyar a "[[User:$1|$1]]" estió "$2".',
'blocklogpage' => 'Rechistro de bloqueyos',
-'blocklog-fulllog' => 'Rechistro de bloqueyos completo',
+'blocklog-showlog' => "Iste usuario ya ha estau bloqueyau.
+Ta más detalles, debaixo s'amuestro o rechistro de bloqueyos:",
+'blocklog-showsuppresslog' => "Iste usuario ha estau bloqueyau y amagau.
+Ta más detalles, debaixo s'amuestra o rechistro de supresions:",
'blocklogentry' => "S'ha bloqueyato a [[$1]] con una durada de $2 $3",
'reblock-logentry' => 'cambiato o bloqueyo de [[$1]] con circumducción o $3 a las $2',
'blocklogtext' => "Isto ye un rechistro de bloqueyos y desbloqueyos d'usuarios. As adrezas bloqueyatas automaticament no amaneixen aquí. Mire-se a [[Special:IPBlockList|lista d'adrezas IP bloqueyatas]] ta veyer a lista actual de vedas y bloqueyos.",
@@ -2096,9 +2236,11 @@ as pachinas que s'han vandalizato).",
'ipb_already_blocked' => '"$1" ya yera bloqueyato',
'ipb-needreblock' => "== Ya ye bloqueyato ==
$1 ya ye bloqueyato. Quiere cambiar as condicions d'o bloqueyo?",
+'ipb-otherblocks-header' => '{{PLURAL:$1|Atro bloqueyo|Atros bloqueyos}}',
'ipb_cant_unblock' => "'''Error''': no s'ha trobato o ID de bloqueyo $1. Talment sía ya desbloqueyato.",
'ipb_blocked_as_range' => "Error: L'adreza IP $1 no s'ha bloqueyato dreitament y por ixo no se puede desbloqueyar. Manimenos, ye bloqueyata por estar parte d'o rango $2, que sí puede desbloqueyar-se de conchunta.",
'ip_range_invalid' => "O rango d'adrezas IP no ye conforme.",
+'ip_range_toolarge' => 'No se permiten os bloqueyos de rangos más grans que /$1.',
'blockme' => 'bloqueyar-me',
'proxyblocker' => 'bloqueyador de proxies',
'proxyblocker-disabled' => 'Ista función ye desactivata.',
@@ -2107,6 +2249,7 @@ $1 ya ye bloqueyato. Quiere cambiar as condicions d'o bloqueyo?",
'sorbsreason' => 'A suya adreza IP ye en a lista de proxies ubiertos en a DNSBL de {{SITENAME}}.',
'sorbs_create_account_reason' => 'A suya adreza IP ye en a lista de proxies ubiertos en a DNSBL de {{SITENAME}}. No puede creyar una cuenta',
'cant-block-while-blocked' => 'No puet bloqueyar a atros usuarios en o tiempo que ye bloqueyato.',
+'cant-see-hidden-user' => "L'usuario a qui ye mirando de bloqueyar ya ye bloqueyau y amagau. Como que ye posible que vusté no tienga o dreito hideuser, no puede veyer ni editar os bloqueyos d'ixe usuario.",
# Developer tools
'lockdb' => 'Trancar a base de datos',
@@ -2148,6 +2291,7 @@ por favor, asegure-se d'entender as conseqüencias que tendrá ista acción ante
En ixos casos, si lo deseya, habrá de tresladar u combinar manualment o conteniu d'a pachina de descusión.",
'movearticle' => 'Tresladar pachina:',
+'moveuserpage-warning' => "'''Pare cuenta:''' ye en momentos de tresladar una pachina d'usuario. Pare cuenta en que nomás a pachina será tresladada peor l'usuario '''no''' será renombrau.",
'movenologin' => 'No ha encetato sesión',
'movenologintext' => 'Amenista estar un usuario rechistrato y [[Special:UserLogin|aber-se identificato encetando una sesión]] ta tresladar una pachina.',
'movenotallowed' => 'No tiene premisos ta tresladar pachinas.',
@@ -2158,7 +2302,7 @@ En ixos casos, si lo deseya, habrá de tresladar u combinar manualment o conteni
'move-watch' => 'Cosirar iste articlo',
'movepagebtn' => 'Tresladar pachina',
'pagemovedsub' => 'Treslado feito correctament',
-'movepage-moved' => "S'ha tresladato '''\"\$1\" ta \"\$2\"'''", # The two titles are passed in plain text as $3 and $4 to allow additional goodies in the message.
+'movepage-moved' => "S'ha tresladato '''\"\$1\" ta \"\$2\"'''",
'movepage-moved-redirect' => "S'ha creyato una reendrecera.",
'movepage-moved-noredirect' => "S'ha cancelato a creyación d'una reendrecera.",
'articleexists' => 'Ya bi ha una pachina con ixe nombre u o nombre que ha eslechito no ye conforme. Por favor trigue un atro nombre.',
@@ -2199,6 +2343,11 @@ A pachina de destino ("[[:$1]]") ya existe. Quiere borrar-la ta premitir o tresl
'imageinvalidfilename' => "O nombre d'o fichero obchectivo no ye conforme",
'fix-double-redirects' => 'Esviellar todas as reendreceras que plegan ta o títol orichinal',
'move-leave-redirect' => 'Deixar una reendrecera',
+'protectedpagemovewarning' => "'''Pare cuenta:''' Ista pachina s'ha bloqueyat de traza que nomás usuarios con dreitos d'administrador puedan tresladar-la. Ta más información s'amuestra contino a zaguera dentrada d'o rechistro.",
+'semiprotectedpagemovewarning' => "'''Pare cuenta:''' Ista pachina s'ha bloqueyato ta que nomás os usuarios rechistratos pueden puedan tresladar-la. Contino s'amuestra a zaguera dentrada d'o rechistro:",
+'move-over-sharedrepo' => '== O fichero existe ==
+[[:$1]] existe en un reposte compartiu. Mover o fichero ta ista títol invalidará o fichero completo.',
+'file-exists-sharedrepo' => 'O nombre de fichero trigau ya ye estando usato en un reposte compartiu. Por favor, esliya-ne un atro.',
# Export
'export' => 'Exportar pachinas',
@@ -2220,15 +2369,21 @@ En iste zaguer caso tamién puede usar un vinclo, por eixemplo [[{{#Special:Expo
'export-pagelinks' => 'Incluyir pachinas vinculadas con una fundaria de:',
# Namespace 8 related
-'allmessages' => "Mensaches d'o sistema",
-'allmessagesname' => 'Nombre',
-'allmessagesdefault' => 'texto por defecto',
-'allmessagescurrent' => 'texto actual',
-'allmessagestext' => "Ista ye una lista de totz os mensaches disponibles en o espacio de nombres MediaWiki.
+'allmessages' => "Mensaches d'o sistema",
+'allmessagesname' => 'Nombre',
+'allmessagesdefault' => 'texto por defecto',
+'allmessagescurrent' => 'texto actual',
+'allmessagestext' => "Ista ye una lista de totz os mensaches disponibles en o espacio de nombres MediaWiki.
Vesite por favor [http://www.mediawiki.org/wiki/Localisation a pachina sobre localización de MediaWiki] y [http://translatewiki.net translatewiki.net] si deseya contrebuyir t'a localización cheneral de MediaWiki.",
-'allmessagesnotsupportedDB' => 'Ista pachina no ye disponible porque wgUseDatabaseMessages ye desactivato.',
-'allmessagesfilter' => "Filtrar por a etiqueta d'os mensaches:",
-'allmessagesmodified' => 'Amostrar nomás os mensaches cambiatos',
+'allmessagesnotsupportedDB' => 'Ista pachina no ye disponible porque wgUseDatabaseMessages ye desactivato.',
+'allmessages-filter-legend' => 'Filtro',
+'allmessages-filter' => 'Filtrar por estau de personalización:',
+'allmessages-filter-unmodified' => 'Sin modificar',
+'allmessages-filter-all' => 'Totz',
+'allmessages-filter-modified' => 'Modificato',
+'allmessages-prefix' => 'Filtrar por prefixo:',
+'allmessages-language' => 'Idioma:',
+'allmessages-filter-submit' => 'Ir-ie',
# Thumbnails
'thumbnail-more' => 'Fer más gran',
@@ -2238,6 +2393,9 @@ Vesite por favor [http://www.mediawiki.org/wiki/Localisation a pachina sobre loc
'djvu_no_xml' => "No s'ha puesto replegar o XML ta o fichero DjVu",
'thumbnail_invalid_params' => "Os parametros d'as miniatura no son correctos",
'thumbnail_dest_directory' => "No s'ha puesto creyar o directorio de destino",
+'thumbnail_image-type' => "Mena d'imachen no prevista",
+'thumbnail_gd-library' => "Configuración d'a librería GD incompleta: falta a función $1",
+'thumbnail_image-missing' => 'O fichero pareix no existir: $1',
# Special:Import
'import' => 'Importar pachinas',
@@ -2302,6 +2460,7 @@ Todas as importacions interwiki se rechistran en o [[Special:Log/import|rechistr
Puede veyer-ne, manimenos, o codigo fuent.',
'tooltip-ca-history' => "Versions anteriors d'ista pachina.",
'tooltip-ca-protect' => 'Protecher ista pachina',
+'tooltip-ca-unprotect' => 'Desproteger ista pagina',
'tooltip-ca-delete' => 'Borrar ista pachina',
'tooltip-ca-undelete' => 'Restaurar as edicions feitas a ista pachina antis que no estase borrata',
'tooltip-ca-move' => 'Tresladar (renombrar) ista pachina',
@@ -2312,6 +2471,7 @@ Puede veyer-ne, manimenos, o codigo fuent.',
'tooltip-search-fulltext' => 'Mirar iste texto en as pachinas',
'tooltip-p-logo' => 'Portalada',
'tooltip-n-mainpage' => 'Vesitar a Portalada',
+'tooltip-n-mainpage-description' => 'Vesitar a pachina prencipal',
'tooltip-n-portal' => 'Sobre o prochecto, que puede fer, aon trobar as cosas',
'tooltip-n-currentevents' => 'Trobar información cheneral sobre escaicimientos actuals',
'tooltip-n-recentchanges' => "A lista d'os zaguers cambeos en o wiki",
@@ -2356,10 +2516,12 @@ Puede veyer-ne, manimenos, o codigo fuent.',
# Attribution
'anonymous' => '{{PLURAL:$1|Usuario anónimo|Usuarios anónimos}} de {{SITENAME}}',
'siteuser' => 'Usuario $1 de {{SITENAME}}',
-'lastmodifiedatby' => 'Ista pachina estió modificata por zaguer vegada a $2, $1 por $3.', # $1 date, $2 time, $3 user
+'anonuser' => '{{SITENAME}} usuario anonimo $1',
+'lastmodifiedatby' => 'Ista pachina estió modificata por zaguer vegada a $2, $1 por $3.',
'othercontribs' => 'Basato en o treballo de $1.',
'others' => 'atros',
'siteusers' => '{{PLURAL:$2|Usuario|Usuarios}} $1 de {{SITENAME}}',
+'anonusers' => '{{SITENAME}} {{PLURAL:$2|usuario|usuarios}} anonimos $1',
'creditspage' => "Creditos d'a pachina",
'nocredits' => 'No bi ha información de creditos ta ista pachina.',
@@ -2394,11 +2556,23 @@ Puede veyer-ne, manimenos, o codigo fuent.',
'mw_math_modern' => 'Recomendato ta navegadors modernos',
'mw_math_mathml' => 'MathML si ye posible (esperimental)',
+# Math errors
+'math_failure' => 'Error en o codigo',
+'math_unknown_error' => 'error esconoxita',
+'math_unknown_function' => 'función esconoxita',
+'math_lexing_error' => 'error de lexico',
+'math_syntax_error' => 'error de sintaxi',
+'math_image_error' => 'A conversión enta PNG ha tenito errors;
+comprebe si latex, dvips, gs y convert son bien instalatos.',
+'math_bad_tmpdir' => "No s'ha puesto escribir u creyar o directorio temporal d'esprisions matematicas",
+'math_bad_output' => "No s'ha puesto escribir u creyar o directorio de salida d'esprisions matematicas",
+'math_notexvc' => "No s'ha trobato o fichero executable ''texvc''. Por favor, leiga <em>math/README</em> ta confegurar-lo correctament.",
+
# Patrolling
'markaspatrolleddiff' => 'Sinyalar como ya controlato',
'markaspatrolledtext' => 'Sinyalar iste articlo como controlato',
'markedaspatrolled' => 'Sinyalato como controlato',
-'markedaspatrolledtext' => 'A bersión trigata ye siñalata como controlata.',
+'markedaspatrolledtext' => "A versión seleccionata de [[:$1]] s'ha sinyalato como patrullata.",
'rcpatroldisabled' => "S'ha desactivato o control d'os zagurers cambeos",
'rcpatroldisabledtext' => "A función de control d'os zaguers cambeos ye desactivata en iste inte.",
'markedaspatrollederror' => 'No se puede sinyalar como controlata',
@@ -2428,13 +2602,10 @@ $1',
'previousdiff' => "← Ir t'a edición anterior",
'nextdiff' => "Ir t'a edición siguient →",
-# Visual comparison
-'visual-comparison' => 'Comparanza bisual',
-
# Media information
'mediawarning' => "'''Pare cuenta!''': Iste tipo de fichero puet contener codigo endino.
En executar-lo, podría meter en un contornillo a seguridat d'o suyo sistema.",
-'imagemaxsize' => "Limitar as imachens en as pachinas de descripzión d'archibos á:",
+'imagemaxsize' => "Limite de grandaria d'as imáchens:<br />''(ta pachinas de descripción de fichers)''",
'thumbsize' => "Midas d'a miniatura:",
'widthheightpage' => '$1×$2, $3 {{PLURAL:$3|pachina|pachinas}}',
'file-info' => "(grandaria d'o fichero: $1; tipo MIME: $2)",
@@ -2443,6 +2614,8 @@ En executar-lo, podría meter en un contornillo a seguridat d'o suyo sistema.",
'svg-long-desc' => '(fichero SVG, nominalment $1 × $2 píxels, grandaria: $3)',
'show-big-image' => 'Imachen en a maxima resolución',
'show-big-image-thumb' => "<small>Grandaria d'ista anvista previa: $1 × $2 píxels</small>",
+'file-info-gif-looped' => 'embuclau',
+'file-info-gif-frames' => '$1 {{PLURAL:$1|imachen|imáchens}}',
# Special:NewFiles
'newimages' => 'Galería de nuevas imachens',
@@ -2473,7 +2646,7 @@ Nomás se consideran os elementos de lista (ringleras que escomienzan por *). O
* exposuretime
* fnumber
* isospeedratings
-* focallength", # Do not translate list items
+* focallength",
# EXIF tags
'exif-imagewidth' => 'Amplaria',
@@ -2600,14 +2773,14 @@ Nomás se consideran os elementos de lista (ringleras que escomienzan por *). O
'exif-unknowndate' => 'Calendata esconoixita',
-'exif-orientation-1' => 'Normal', # 0th row: top; 0th column: left
-'exif-orientation-2' => 'Contornata horizontalment', # 0th row: top; 0th column: right
-'exif-orientation-3' => 'Chirata 180º', # 0th row: bottom; 0th column: right
-'exif-orientation-4' => 'Contornata verticalment', # 0th row: bottom; 0th column: left
-'exif-orientation-5' => "Chirata 90° en contra d'as agullas d'o reloch y contornata verticalment", # 0th row: left; 0th column: top
-'exif-orientation-6' => "Chirata 90° como as agullas d'o reloch", # 0th row: right; 0th column: top
-'exif-orientation-7' => "Chirata 90° como as agullas d'o reloch y contornata verticalment", # 0th row: right; 0th column: bottom
-'exif-orientation-8' => "Chirata 90° en contra d'as agullas d'o reloch", # 0th row: left; 0th column: bottom
+'exif-orientation-1' => 'Normal',
+'exif-orientation-2' => 'Contornata horizontalment',
+'exif-orientation-3' => 'Chirata 180º',
+'exif-orientation-4' => 'Contornata verticalment',
+'exif-orientation-5' => "Chirata 90° en contra d'as agullas d'o reloch y contornata verticalment",
+'exif-orientation-6' => "Chirata 90° como as agullas d'o reloch",
+'exif-orientation-7' => "Chirata 90° como as agullas d'o reloch y contornata verticalment",
+'exif-orientation-8' => "Chirata 90° en contra d'as agullas d'o reloch",
'exif-planarconfiguration-1' => 'formato de paquetz de píxels',
'exif-planarconfiguration-2' => 'formato plano',
@@ -2729,7 +2902,7 @@ Nomás se consideran os elementos de lista (ringleras que escomienzan por *). O
'exif-gpsmeasuremode-2' => 'Mesura bidimensional',
'exif-gpsmeasuremode-3' => 'Mesura tridimensional',
-# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+# Pseudotags used for GPSSpeedRef
'exif-gpsspeed-k' => 'Kilometros por hora',
'exif-gpsspeed-m' => 'Millas por hora',
'exif-gpsspeed-n' => 'Nugos',
@@ -2748,6 +2921,7 @@ Nomás se consideran os elementos de lista (ringleras que escomienzan por *). O
'watchlistall2' => 'totz',
'namespacesall' => 'totz',
'monthsall' => 'totz',
+'limitall' => 'Totz',
# E-mail address confirmation
'confirmemail' => 'Confirmar adreza de correu-e',
@@ -2767,17 +2941,17 @@ O programa retornó o siguient codigo d'error: $1",
'confirmemail_loggedin' => 'A suya adreza de correu-e ya ye confirmata.',
'confirmemail_error' => 'Bella cosa falló en alzar a suya confirmación.',
'confirmemail_subject' => "confirmación de l'adreza de correu-e de {{SITENAME}}",
-'confirmemail_body' => 'Belún, probablement busté mesmo, ha rechistrato una cuenta "$2" con ista adreza de correu-e en {{SITENAME}} dende l\'adreza IP $1.
+'confirmemail_body' => 'Belún, probablement vusté mesmo, ha rechistrato una cuenta "$2" con ista adreza de correu-e en {{SITENAME}} dende l\'adreza IP $1.
-Ta confirmar que ista cuenta reyalment le perteneixe y autibar as funzions de correu-e en {{SITENAME}}, ubra iste binclo en o suyo nabegador:
+Ta confirmar que ista cuenta reyalment le perteneixe y activar as funcions de correu-e en {{SITENAME}}, ubra iste vinclo en o suyo navegador:
$3
-Si a cuenta *no* ye suya, siga iste atro binclo ta anular a confirmazión d\'adreza de correu-e:
+Si a cuenta *no* ye suya, siga iste atro vinclo ta anular a confirmación d\'adreza de correu-e:
$5
-Iste codigo de confirmazión zircunduzirá en $4.',
+Iste codigo de confirmación circumducirá en $4.',
'confirmemail_invalidated' => "Anular a confirmación d'adreza de correu-e",
'invalidateemail' => 'Anular a confirmación de correu-e',
@@ -2870,7 +3044,7 @@ Tamién puede fer servir o [[Special:Watchlist/edit|editor estándar]].",
'duplicate-defaultsort' => "Pare cuenta: A clau d'ordenación por defecto «$2» anula l'anterior clau d'ordenación por defecto «$1».",
# Special:Version
-'version' => 'Versión', # Not used as normal message but as header for the special page itself
+'version' => 'Versión',
'version-extensions' => 'Estensions instalatas',
'version-specialpages' => 'Pachinas especials',
'version-parserhooks' => "Grifios d'o parser (parser hooks)",
@@ -2884,7 +3058,7 @@ Tamién puede fer servir o [[Special:Watchlist/edit|editor estándar]].",
'version-skin-extension-functions' => "Funcions d'estensión de l'aparencia (Skin)",
'version-hook-name' => "Nombre d'o grifio",
'version-hook-subscribedby' => 'Suscrito por',
-'version-version' => 'Bersión',
+'version-version' => '(Versión $1)',
'version-license' => 'Licencia',
'version-software' => 'Software instalato',
'version-software-product' => 'Producto',
@@ -2965,4 +3139,15 @@ Escriba o nombre d\'o fichero sin o prefixo "{{ns:file}}:".',
'dberr-outofdate' => "Pare cuenta que o suyo endice d'o nuestro conteniu puet que no siga esviellau.",
'dberr-cachederror' => "A siguient pachina ye una pachina alzada d'a pachina solicitada, y podría no estar actualizada.",
+# HTML forms
+'htmlform-invalid-input' => "Bi ha problemas con belún d'os datos que ha escrito",
+'htmlform-select-badoption' => 'A valura especificada no ye una opción conforme.',
+'htmlform-int-invalid' => 'A valura que especificó no ye un entero.',
+'htmlform-float-invalid' => 'A valura que ha especificato no ye un entero.',
+'htmlform-int-toolow' => "A valura que ha especificato ye por debaixo d'o menimo de $1",
+'htmlform-int-toohigh' => "A valura que ha especificato ye alto d'o maximo de $1",
+'htmlform-submit' => 'Ninviar',
+'htmlform-reset' => 'Desfer cambios',
+'htmlform-selectorother-other' => 'Atros',
+
);
diff --git a/languages/messages/MessagesAng.php b/languages/messages/MessagesAng.php
index f68a02d3..3bb379e4 100644
--- a/languages/messages/MessagesAng.php
+++ b/languages/messages/MessagesAng.php
@@ -64,6 +64,13 @@ $messages = array(
'underline-never' => 'Nǣfre',
'underline-default' => 'Ƿebbsēċendes ȝeƿuna',
+# Font style option in Special:Preferences
+'editfont-style' => 'Feldes trahtānsīenmōd ādihtan:',
+'editfont-default' => 'Ƿebbsēċendes ȝeƿuna',
+'editfont-monospace' => 'Ānbrǣdisc trahtānsīen',
+'editfont-sansserif' => 'Būtonscrīfisc trahtānsīen',
+'editfont-serif' => 'Scrīfisc trahtānsīen',
+
# Dates
'sunday' => 'Sunnandæȝ',
'monday' => 'Mōnandæȝ',
@@ -123,7 +130,7 @@ $messages = array(
'category-media-header' => 'Ȝemynda in flocce "$1"',
'category-empty' => "''Þes flocc hæfþ nū nān ȝeƿritu oþþe ȝemynda in.''",
'hidden-categories' => '{{PLURAL:$1|Ȝehȳded flocc|Ȝehȳdede floccas}}',
-'hidden-category-category' => 'Ȝehȳdede floccas', # Name of the category where hidden categories will be listed
+'hidden-category-category' => 'Ȝehȳdede floccas',
'category-subcat-count' => '{{PLURAL:$2|Þes flocc hæfþ efne þone folgende underflocc.|Þes flocc hæfþ þā folgende {{PLURAL:$1|underflocc|$1 underfloccas}}, þāra $2.}}',
'category-subcat-count-limited' => 'Þes flocc hæfþ {{PLURAL:$1|þisne underflocc|$1 þās underfloccas}}.',
'category-article-count' => '{{PLURAL:$2|Þes flocc hæfþ efne þā folgende sīdan.|{{PLURAL:$1|Sēo folgende sīde is|$1 Þā folgendan sīdan sind}} in þissum flocce, þāra $2.}}',
@@ -137,10 +144,18 @@ $messages = array(
* [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]',
-'about' => 'Ymbe',
-'article' => 'Innoþsīde',
-'newwindow' => '(openaþ in nīƿum ēagþyrele)',
-'cancel' => 'Undōn',
+'about' => 'Ymbe',
+'article' => 'Innoþsīde',
+'newwindow' => '(openaþ in nīƿum ēagþyrele)',
+'cancel' => 'Undōn',
+'moredotdotdot' => 'Mā...',
+'mypage' => 'Mīnu sīde',
+'mytalk' => 'Mīn ȝespreċ',
+'anontalk' => 'Ȝespreċ for þissum IP',
+'navigation' => 'Þurhfōr',
+'and' => '&#32;and',
+
+# Cologne Blue skin
'qbfind' => 'Findan',
'qbbrowse' => 'Ofer sēċan',
'qbedit' => 'Ādihtan',
@@ -148,12 +163,34 @@ $messages = array(
'qbpageinfo' => 'Ȝeƿef',
'qbmyoptions' => 'Mīna sīdan',
'qbspecialpages' => 'Syndriȝa sīdan',
-'moredotdotdot' => 'Mā...',
-'mypage' => 'Mīnu sīde',
-'mytalk' => 'Mīn ȝespreċ',
-'anontalk' => 'Ȝespreċ for þissum IP',
-'navigation' => 'Þurhfōr',
-'and' => '&#32;and',
+'faq' => 'Oftost ascoda ascunga',
+'faqpage' => 'Project:FAQ',
+
+# Vector skin
+'vector-action-addsection' => 'Mearcunge ēacian',
+'vector-action-move' => 'Ƿeȝan',
+'vector-action-protect' => 'Beorgan',
+'vector-action-undelete' => 'Edƿyrcan',
+'vector-action-unprotect' => 'Unbeorgan',
+'vector-namespace-category' => 'Flocc',
+'vector-namespace-help' => 'Helpsīde',
+'vector-namespace-image' => 'Fīl',
+'vector-namespace-main' => 'Sīde',
+'vector-namespace-media' => 'Ȝemyndesīde',
+'vector-namespace-mediawiki' => 'Ǣrend',
+'vector-namespace-project' => 'Ƿeorcsīde',
+'vector-namespace-special' => 'Syndriȝu sīde',
+'vector-namespace-talk' => 'Ȝespreċ',
+'vector-namespace-template' => 'Bysen',
+'vector-namespace-user' => 'Brūcendsīde',
+'vector-view-create' => 'Scieppan',
+'vector-view-edit' => 'Ādihtan',
+'vector-view-history' => 'Stǣr sēon',
+'vector-view-view' => 'Rǣdan',
+'vector-view-viewsource' => 'Fruma sēon',
+'actions' => 'Fremmendas',
+'namespaces' => 'Namastedas',
+'variants' => 'Missenliċnessa',
'errorpagetitle' => 'Ƿōh',
'returnto' => 'To $1 eftgān.',
@@ -202,11 +239,16 @@ $messages = array(
'otherlanguages' => 'On ōðrum sprǣċum',
'redirectedfrom' => '(Edlǣded fram $1)',
'redirectpagesub' => 'Edlǣdsīde',
-'lastmodifiedat' => 'Man læst þās sīdan hƿearf on $1, æt $2.', # $1 date, $2 time
+'lastmodifiedat' => 'Man læst þās sīdan hƿearf on $1, æt $2.',
'protectedpage' => 'Borgenu sīde',
'jumpto' => 'Forðgangan on:',
'jumptonavigation' => 'þurhfōr',
'jumptosearch' => 'sēcan',
+'view-pool-error' => 'Sāriȝ, þās þeȝntelleras nū ƿyrcaþ tō miċel.
+Tō mæniȝ brūcendas fandiaþ to sēonne þās sīdan.
+Bidde forbyrde scortre tīde fore fandiende to sēonne þās sīdan eft.
+
+$1',
# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
'aboutsite' => 'Ymbe {{SITENAME}}n',
@@ -219,8 +261,6 @@ $messages = array(
'disclaimerpage' => 'Ƿeorc:Ymbcƿidas',
'edithelp' => 'Ādihtan help',
'edithelppage' => 'Help:Ādihtan',
-'faq' => 'Oftost ascoda ascunga',
-'faqpage' => 'Project:FAQ',
'helppage' => 'Help:Innoþ',
'mainpage' => 'Hēafodsīde',
'mainpage-description' => 'Hēafodsīde',
@@ -285,29 +325,30 @@ $messages = array(
Getæl gengra ānlicra trameta cann mann findand be [[Special:SpecialPages|{{int:specialpages}}]].',
# General errors
-'error' => 'Ƿōh',
-'databaseerror' => 'Cȳþþuhordes ƿōh',
-'dberrortext' => 'Gewitnesshordes bēnes endebyrdnesse unrihtness hæfþ gelumpen.
+'error' => 'Ƿōh',
+'databaseerror' => 'Cȳþþuhordes ƿōh',
+'dberrortext' => 'Gewitnesshordes bēnes endebyrdnesse unrihtness hæfþ gelumpen.
Þis mæg gelimpan unrihtnesse on þǣre sōftware.
Sēo nīwoste gesōhte sōftware bēn wæs:
<blockquote><tt>$1</tt></blockquote>
fram innan weorce "<tt>$2</tt>".
Gewitnesshord edwende unrihtnesse "<tt>$3: $4</tt>"',
-'laggedslavemode' => "'''Ƿarnung:''' Sīde ne mihteliċ ne hæfþ nīƿa nīƿunga.",
-'enterlockreason' => 'Wrīt race þǣre forwiernunge and apunsunge be þǣm tīman on þǣm bēo sēo forwiernung forlǣten',
-'missingarticle-rev' => '(nīƿung#: $1)',
-'internalerror' => 'Innan ƿōh',
-'internalerror_info' => 'Innan ƿōh: $1',
-'filerenameerror' => 'Ne cúðe ednemnan þrǽd "$1" tó "$2".',
-'filenotfound' => 'Ne cūðe findan þrǣd "$1".',
-'formerror' => 'Ƿōh: ne meahte cȳþþuȝeƿrit forþsendan',
-'badarticleerror' => 'Þēos dǣd ne cann bēon gefremed on þissum tramete.',
-'badtitle' => 'Unandfenge títul',
-'viewsource' => 'Fruman sēon',
-'cascadeprotected' => 'Þis trament hafaþ geworden gebeorgod wiþ ādihtunge, for þǣm þe hē is geinnod in þissum trament {{PLURAL:$1|tramente, þe is| tramentum, þe sind}} geborgod mid þǣre "cascading" cyre gesett wyrcende: $2',
+'laggedslavemode' => "'''Ƿarnung:''' Sīde ne mihteliċ ne hæfþ nīƿa nīƿunga.",
+'enterlockreason' => 'Wrīt race þǣre forwiernunge and apunsunge be þǣm tīman on þǣm bēo sēo forwiernung forlǣten',
+'missingarticle-rev' => '(nīƿung#: $1)',
+'internalerror' => 'Innan ƿōh',
+'internalerror_info' => 'Innan ƿōh: $1',
+'fileappenderrorread' => 'Ne meahte "$1" rǣdan on ēacunge.',
+'fileappenderror' => 'Ne meahte "$1" to "$2" ēacian.',
+'filerenameerror' => 'Ne cúðe ednemnan þrǽd "$1" tó "$2".',
+'filenotfound' => 'Ne cūðe findan þrǣd "$1".',
+'formerror' => 'Ƿōh: ne meahte cȳþþuȝeƿrit forþsendan',
+'badarticleerror' => 'Þēos dǣd ne cann bēon gefremed on þissum tramete.',
+'badtitle' => 'Unandfenge títul',
+'viewsource' => 'Fruman sēon',
+'cascadeprotected' => 'Þis trament hafaþ geworden gebeorgod wiþ ādihtunge, for þǣm þe hē is geinnod in þissum trament {{PLURAL:$1|tramente, þe is| tramentum, þe sind}} geborgod mid þǣre "cascading" cyre gesett wyrcende: $2',
# Login and logout pages
-'logouttitle' => 'Brūcendūtmeldung',
'logouttext' => "'''Þū eart nū ūtmeldod.'''
Þū canst ætfeolan tō brūcenne {{SITENAME}} ungecūðe, oþþe þū canst [[Special:UserLogin|inmeldian eft]] tō ylcan oþþe ōðrum brūcende.
@@ -315,7 +356,6 @@ Cnāw þæt sume sīdan cunnon gelǣstende ēowod wesan swā þū wǣre gīet in
'welcomecreation' => '== Ƿilcumen, $1! ==
Þīn hordcleofa ƿearþ ȝescapen. Ne forȝiet tō hƿierfenne þīna [[Special:Preferences|{{SITENAME}} foreberunga]].',
-'loginpagetitle' => 'Brūcendinmeldung',
'yourname' => 'Þīn brūcendnama',
'yourpassword' => 'Þafungƿord:',
'yourpasswordagain' => 'Þafungƿord edƿrītan:',
@@ -324,6 +364,7 @@ Cnāw þæt sume sīdan cunnon gelǣstende ēowod wesan swā þū wǣre gīet in
'login' => 'Inmeldian',
'nav-login-createaccount' => 'Nīƿne hordcleofan scieppan oþþe inmeldian',
'userlogin' => 'Macian nīwne grīman oþþe grīman brūcan',
+'userloginnocreate' => 'Inmeldian',
'logout' => 'Ūtmeldian',
'userlogout' => 'Ūtmeldian',
'notloggedin' => 'Ne inȝemelded',
@@ -334,15 +375,8 @@ Cnāw þæt sume sīdan cunnon gelǣstende ēowod wesan swā þū wǣre gīet in
'badretype' => 'Þā þafungƿord þe ƿrite þū, bēoþ unȝemæcca.',
'userexists' => 'Hƿā hæfþ þæt brūcendnama.
Bidde ōðer brūcendnama ċēosan.',
-'youremail' => 'E-ǣrende *',
-'username' => 'Brūcendnama:',
-'yourrealname' => 'Þīn rihtnama*',
-'yourlanguage' => 'Brūcendofermearces sprǣc',
-'yourvariant' => 'Sprǣce wendung',
-'yourgender' => 'Ȝecynd:',
-'gender-male' => 'Ƿer',
-'gender-female' => 'Frēo',
'loginerror' => 'Inmeldunge ƿōh',
+'createaccounterror' => 'Ne cūðe macian reccend: $1',
'nocookiesnew' => 'Se brūcendreccend wæs gemacod, ac þū neart inmedlod.
{{SITENAME}} brȳcþ tācninclu tō inmeldienne brūcendas.
Þū hafast forwierned tācninclu.
@@ -353,6 +387,7 @@ Bidde þē, lǣt hīe tō twyrcenne, and þǣræfter inmelda þurh þīnne nīwa
Stafena micelnesse sind hefige and ānlica on brūcendnamum.
Scēawa þīne wrītunge eft, oþþe brūc þā cartan þe is hērunder tō [[Special:UserLogin/signup|settene nīwne brūcendreccend]].',
'nosuchusershort' => 'Þǣr is nān brūcend mid þǣm naman "<nowiki>$1</nowiki>". Edscēawa on þīne wrītunge.',
+'passwordtooshort' => 'Gelēafword sculon habban læst {{PLURAL:$1|1 stafan|$1 stafan}}.',
'mailmypassword' => 'Nīƿe þafungƿord bȳ e-mail sendan',
'acct_creation_throttle_hit' => 'Hwæt, þu hæfst gēo geseted {{PLURAL:$1|1 hordcleofan|$1 -}}. Þu ne canst settan ǣnige māran.',
'accountcreated' => 'Hordcleofan ȝescapen',
@@ -412,7 +447,8 @@ Scēawa þīne wrītunge eft, oþþe brūc þā cartan þe is hērunder tō [[Sp
'newarticletext' => "Þu hæfst bende tō tramete gefolgod þe nū gīet ne stendeþ.
Tō scieppene þone tramet, onginn þyddan in þǣre boxe under (sēo þone [[{{MediaWiki:Helppage}}|helptramet]] for mā gefrǣge).
Gif þu hider misfōn cōme, cnoca þā þīnne webbscēaweres '''on bæc''' cnæpp.",
-'usercssjsyoucanpreview' => "'''Rǣd:''' Brūc þone 'Forescēawian' cnæpp tō āfandienne þīne nīwe css/js beforan sparunge.",
+'usercssyoucanpreview' => "'''Rǣd:''' Brūc þone 'Forescēawian' cnæpp tō āfandienne þīne nīwe css/js beforan sparunge.",
+'userjsyoucanpreview' => "'''Rǣd:''' Brūc þone 'Forescēawian' cnæpp tō āfandienne þīne nīwe css/js beforan sparunge.",
'updated' => '(Ednīƿed)',
'note' => "'''Behielde:'''",
'previewnote' => "'''Ȝemune þe þēos efne forescēaƿe is.'''
@@ -434,7 +470,8 @@ folcliċum āgnunge oþþe ȝelīċum frēom horde (sēo $1 for āscungum).
'longpagewarning' => 'WARNUNG: Þes tramet is $1 kilobyta lang; sume
webbscēaweras hæbben earfoðu mid þȳ þe hīe ādihtaþ trametas nēa oþþe lengran þonne 32kb.
Bidde behycge þæt þu bricst þone tramet intō smalrum dǣlum.',
-'templatesused' => 'Ongelīcnessa gebrȳcda on þissum tramete:',
+'templatesused' => '{{PLURAL:$1|Bysen|Bysena}} brocen on þisre sīdan:',
+'templatesusedpreview' => '{{PLURAL:$1|Bysen|Bysena}} brocen on þisre forescēaƿe:',
'template-protected' => '(borgen)',
'template-semiprotected' => '(sāmborgen)',
'hiddencategories' => 'Þēos sīde is ȝesīþ {{PLURAL:$1|1 ȝehȳdedes flocces|$1 ȝehȳdeda flocca}}:',
@@ -442,7 +479,7 @@ Bidde behycge þæt þu bricst þone tramet intō smalrum dǣlum.',
'nocreate-loggedin' => 'Þū ne hæfst þafunge to scieppenne nīƿa sīdan.',
'permissionserrors' => 'Þafunga ƿōh',
'permissionserrorstext-withaction' => 'Þū ne hæfst þafunge for $2, forþǣm þe {{PLURAL:$1|race|racum}}:',
-'recreate-deleted-warn' => "'''Warnung: Þu edsciepst tramet þe wæs ǣr āfeorsod.'''
+'recreate-moveddeleted-warn' => "'''Warnung: Þu edsciepst tramet þe wæs ǣr āfeorsod.'''
Þu sceoldest smēagan, hwæðer hit gerādlic sīe, forþ tō gānne mid ādihtunge þisses trametes.
Þæt āfeorsungbred þisses trametes is hēr geīeht for behēfnesse:",
@@ -450,6 +487,8 @@ Bidde behycge þæt þu bricst þone tramet intō smalrum dǣlum.',
# History pages
'viewpagelogs' => 'Ealdhordas sēon for þisse sīdan',
'nohistory' => 'Nis nān ādihtungstǣr for þissum tramete.',
+'currentrev-asof' => 'Nīƿe fadung sƿā $1',
+'revisionasof' => 'Nīƿung fram',
'previousrevision' => '← Ieldra fadung',
'nextrevision' => 'Nīƿra fadung →',
'currentrevisionlink' => 'Nīƿu fadung',
@@ -462,22 +501,29 @@ Bidde behycge þæt þu bricst þone tramet intō smalrum dǣlum.',
'historyempty' => '(æmettiȝ)',
# Revision feed
-'history-feed-title' => 'Ednīƿunge stǣr',
-'history-feed-description' => 'Ednīƿunge stǣr þisse sīdan on þǣre ƿiki',
+'history-feed-title' => 'Ednīƿunge stǣr',
+'history-feed-description' => 'Ednīƿunge stǣr þisse sīdan on þǣre ƿiki',
+'history-feed-item-nocomment' => '$1 on $2',
# Revision deletion
-'rev-deleted-comment' => '(cƿide fornōm)',
-'rev-deleted-user' => '(brūcendnama fornōm)',
-'rev-delundel' => 'scēaƿian/hȳdan',
-'revdelete-hide-text' => 'Ednīƿungtraht hȳdan',
-'revdelete-hide-comment' => 'Ādihtcƿide hȳdan',
-'revdelete-hide-user' => 'Ādihteres brūcendnama/IP address hȳdan',
-'revdelete-hide-image' => 'Fīlinnoþ hȳdan',
-'revdel-restore' => 'scēaƿnesse hƿeorfan',
-'pagehist' => 'Sīdan stǣr',
-'revdelete-content' => 'innoþ',
-'revdelete-summary' => 'ādihtscortnes',
-'revdelete-uname' => 'brūcendnama',
+'rev-deleted-comment' => '(cƿide fornōm)',
+'rev-deleted-user' => '(brūcendnama fornōm)',
+'rev-delundel' => 'scēaƿian/hȳdan',
+'rev-showdeleted' => 'scēaƿan',
+'revdelete-show-file-submit' => 'Ȝēa',
+'revdelete-hide-text' => 'Ednīƿungtraht hȳdan',
+'revdelete-hide-image' => 'Fīlinnoþ hȳdan',
+'revdelete-hide-comment' => 'Ādihtcƿide hȳdan',
+'revdelete-hide-user' => 'Ādihteres brūcendnama/IP address hȳdan',
+'revdelete-radio-same' => '(ne hƿeorfan)',
+'revdelete-radio-set' => 'Ȝēa',
+'revdelete-radio-unset' => 'Nā',
+'revdel-restore' => 'scēaƿnesse hƿeorfan',
+'pagehist' => 'Sīdan stǣr',
+'revdelete-content' => 'innoþ',
+'revdelete-summary' => 'ādihtscortnes',
+'revdelete-uname' => 'brūcendnama',
+'revdelete-reasonotherlist' => 'Ōðru racu',
# History merging
'mergehistory-from' => 'Frumasīde:',
@@ -502,9 +548,14 @@ Bidde behycge þæt þu bricst þone tramet intō smalrum dǣlum.',
'searchsubtitleinvalid' => "Þū sōhtest '''$1'''",
'notitlematches' => 'Nān sīdenama mæccan',
'notextmatches' => 'Nāne sīdetrahtes mæccan',
-'nextn' => 'nīehst $1',
+'prevn' => 'ǣror {{PLURAL:$1|$1}}',
+'nextn' => 'nīehst {{PLURAL:$1|$1}}',
+'viewprevnext' => 'Sēon ($1 {{int:pipe-separator}} $2) ($3)',
'searchmenu-new' => "'''Þā sīdan \"[[:\$1]]\" scieppan on þisre ƿiki!'''",
'searchhelp-url' => 'Help:Innoþ',
+'searchprofile-articles' => 'Innoþsīdan',
+'searchprofile-project' => 'Help and Ƿeorc sīdan',
+'searchprofile-images' => 'Mæniȝȝemyndisc',
'searchprofile-everything' => 'Ȝehƿæt',
'searchprofile-articles-tooltip' => 'In $1 sēċan',
'searchprofile-project-tooltip' => 'In $1 sēċan',
@@ -529,16 +580,17 @@ Bidde behycge þæt þu bricst þone tramet intō smalrum dǣlum.',
'powersearch-field' => 'Sēċan',
'search-external' => 'Ūtan sōcn',
+# Quickbar
+'qbsettings-none' => 'Nān',
+
# Preferences page
'preferences' => 'Foreberunga',
'mypreferences' => 'Mīna foreberunga',
'prefsnologin' => 'Ne inȝemelded',
-'qbsettings-none' => 'Nān',
-'skin' => 'Scynn',
+'prefs-skin' => 'Scynn',
'skin-preview' => 'Forescēaƿian',
-'dateformat' => 'Tælmearcwīse',
-'datetime' => 'Tælmearc and tīd',
-'math_unknown_error' => 'uncūþ ƿōh',
+'prefs-math' => 'Rīmcræft',
+'prefs-datetime' => 'Tælmearc and tīd',
'prefs-rc' => 'Nīƿe hƿearfas',
'prefs-watchlist' => 'Ƿæccȝetalu',
'saveprefs' => 'Sparian',
@@ -547,12 +599,20 @@ Bidde behycge þæt þu bricst þone tramet intō smalrum dǣlum.',
'searchresultshead' => 'Sōcnfintan',
'resultsperpage' => 'Tōhīgunga tō īewenne for tramete',
'contextlines' => 'Līnan tō īewenne in tōhīgunge',
-'recentchangescount' => 'Tītula getæl in nīwlicum hweorfungum',
+'recentchangescount' => 'Hū mæniȝ ādihtas to scēaƿenne ȝeþēaƿe:',
'savedprefs' => 'Þīna foreberunga ƿurdon ȝespared.',
'timezonelegend' => 'Tīdstell',
'servertime' => 'Bryttantīma is nū',
'defaultns' => 'Sēcan in þissum namstedum be frambyge:',
'default' => 'gewunelic',
+'youremail' => 'E-ǣrende *',
+'username' => 'Brūcendnama:',
+'yourrealname' => 'Þīn rihtnama*',
+'yourlanguage' => 'Brūcendofermearces sprǣc',
+'yourvariant' => 'Sprǣce wendung',
+'yourgender' => 'Ȝecynd:',
+'gender-male' => 'Ƿer',
+'gender-female' => 'Frēo',
# User rights
'userrights-user-editname' => 'Brūcendnama ƿrītan:',
@@ -589,6 +649,13 @@ Bidde behycge þæt þu bricst þone tramet intō smalrum dǣlum.',
'recentchanges' => 'Nīƿe hƿearfas',
'recentchanges-legend' => 'Nīƿa hƿearfa forebearƿan',
'recentchanges-feed-description' => 'Þā mǣst nīƿoste hƿearfan huntan to þisse ƿiki in þissum strēame',
+'recentchanges-label-legend' => 'Cǣȝ: $1.',
+'recentchanges-legend-newpage' => '$1 - nīƿu sīde',
+'recentchanges-label-newpage' => 'Þes ādiht macode nīƿa sīdan',
+'recentchanges-legend-minor' => '$1 - lȳtl ādiht',
+'recentchanges-label-minor' => 'Þes is lȳtl ādiht',
+'recentchanges-legend-bot' => '$1 - searuþræles ādiht',
+'recentchanges-label-bot' => 'Searuþræl fremmode þisne ādiht',
'rcnote' => "Under {{PLURAL:$1|... '''1''' ...|sind þā æftemestan '''$1''' hweorfunga}} in {{PLURAL:$2|...|þǣm æftemestum '''$2''' dagum}}, . . $5, $4.",
'rcnotefrom' => 'Under sind þā hweorfunga siþþan <b>$2</b> (oþ <b>$1</b> geīewed).',
'rclistfrom' => 'Nīƿe hƿeorfan sēon beȝinnende fram $1',
@@ -610,10 +677,12 @@ Bidde behycge þæt þu bricst þone tramet intō smalrum dǣlum.',
'rc-enhanced-hide' => 'Ȝehanda hȳdan',
# Recent changes linked
-'recentchangeslinked' => 'Sibbhƿearfas',
-'recentchangeslinked-title' => 'Hƿearfas ȝesibbed to "$1"',
-'recentchangeslinked-page' => 'Sīdenama:',
-'recentchangeslinked-to' => 'Hƿearfas to sīdan sēon þe hlenċan habbaþ to þǣre ȝiefen sīdan in stede',
+'recentchangeslinked' => 'Sibbhƿearfas',
+'recentchangeslinked-feed' => 'Sibbhƿearfas',
+'recentchangeslinked-toolbox' => 'Sibbhƿearfas',
+'recentchangeslinked-title' => 'Hƿearfas ȝesibbed to "$1"',
+'recentchangeslinked-page' => 'Sīdenama:',
+'recentchangeslinked-to' => 'Hƿearfas to sīdan sēon þe hlenċan habbaþ to þǣre ȝiefen sīdan in stede',
# Upload
'upload' => 'Fīl forþsendan',
@@ -633,6 +702,7 @@ Bidde behycge þæt þu bricst þone tramet intō smalrum dǣlum.',
'sourcefilename' => 'Fruman þrǣdnama:',
'license' => 'Gelēaf:',
+'license-header' => 'Gelēaf',
'nolicense' => 'Nǣnne gecorenne',
'license-nopreview' => 'Þis gelēaf nis gearu.',
@@ -651,6 +721,7 @@ Swenge wiþ sweorhēafod andwendeþ þā endebyrdnessa.',
'listfiles_count' => 'Fadunga',
# File description page
+'file-anchor-link' => 'Fīl',
'filehist' => 'Fīlanstǣr',
'filehist-help' => 'Cnæpp on dæȝe/tīde to sēonne þā fīlan sƿā ƿæs hēo on þǣre tīde.',
'filehist-deleteall' => 'afeorsian eall',
@@ -659,19 +730,20 @@ Swenge wiþ sweorhēafod andwendeþ þā endebyrdnessa.',
'filehist-current' => 'nū',
'filehist-datetime' => 'Dæȝ/Tīd',
'filehist-thumb' => 'Lȳtlbiliþ',
+'filehist-thumbtext' => 'Lȳtlbiliþ for fadunge sƿā $1',
'filehist-nothumb' => 'Nān biliþincel',
'filehist-user' => 'Brūcend',
'filehist-dimensions' => 'Miċela',
'filehist-filesize' => 'Fīlmicelness',
'filehist-comment' => 'Ymbsprǣċ',
+'filehist-missing' => 'Fīl lēas',
'imagelinks' => 'Fīlhlenċan',
'linkstoimage' => 'Þā folgendan {{PLURAL:$1|sīde hæfþ hlenċe|sīdan habbaþ hlenċan}} for þissum fīle:',
'nolinkstoimage' => 'Þǣr sind nāne trametas þe bindaþ tō þissum biliðe.',
'morelinkstoimage' => 'Seoh [[Special:WhatLinksHere/$1|mā hlencan]] tō þissum fīle.',
'redirectstofile' => '{{PLURAL:$1|Þes fīl edlǣdeþ|$1 Þās fīlas hēr edlǣdaþ}} tō þissum fīle:',
'duplicatesoffile' => '{{PLURAL:$1|Þes fīl hēr is gelīcness|Þās fīlas hēr sind gelīcnessa}} þisses fīles (seoh [[Special:FileDuplicateSearch/$2|mā gewitnesse hērymb]]):',
-'sharedupload' => 'Þēos fīl is fram $1 and man mæȝ hīe brūcan on ōðrum ƿeorcum.', # $1 is the repo name, $2 is shareduploadwiki(-desc)
-'noimage' => 'Nān þrǣd mid þissum naman stendeþ nū oþþe nā mā, ac þu canst þēah hine $1.',
+'sharedupload' => 'Þēos fīl is fram $1 and man mæȝ hīe brūcan on ōðrum ƿeorcum.',
'uploadnewversion-linktext' => 'Nīƿe fadunge þisse fīlan forþsendan',
# File reversion
@@ -697,8 +769,8 @@ Swenge wiþ sweorhēafod andwendeþ þā endebyrdnessa.',
'brokenredirects' => 'Brocene ymblǣderas',
'brokenredirectstext' => 'Þā folgendan edlǣdunga bendaþ tō unedwistlicum trametum.',
-'brokenredirects-edit' => '(ādihtan)',
-'brokenredirects-delete' => '(āfeorsian)',
+'brokenredirects-edit' => 'ādihtan',
+'brokenredirects-delete' => 'āfeorsian',
'withoutinterwiki' => 'Trametas būtan sprǣcbendum',
'withoutinterwiki-summary' => 'Þā folgendan trametas ne bindaþ tō ōðrum sprǣcfadungum:',
@@ -758,6 +830,9 @@ Swenge wiþ sweorhēafod andwendeþ þā endebyrdnessa.',
'categories' => 'Floccas',
'categoriespagetext' => 'Þā folgendan floccas standaþ in þǣm wici.',
+# Special:DeletedContributions
+'sp-deletedcontributions-contribs' => 'forðunga',
+
# Special:LinkSearch
'linksearch' => 'Ūtanƿeard hlenċan',
'linksearch-ok' => 'Sēċan',
@@ -765,6 +840,9 @@ Swenge wiþ sweorhēafod andwendeþ þā endebyrdnessa.',
# Special:ListUsers
'listusers-noresult' => 'Nǣnne brūcend gefundenne.',
+# Special:ActiveUsers
+'activeusers' => 'Hƿata brūcenda ȝetalu',
+
# Special:Log/newusers
'newuserlogpage' => 'Brūcenda ȝesceaft ȝetalu',
'newuserlog-create-entry' => 'Nīƿe brūcend',
@@ -835,8 +913,8 @@ Swenge wiþ sweorhēafod andwendeþ þā endebyrdnessa.',
'rollback_short' => 'Edhƿeorfan',
'rollbacklink' => 'Edhƿeorfan',
'rollbackfailed' => 'Edhƿeorf misfangen',
-'editcomment' => "Sēo ādihtungymbsprǣc wæs: \"''\$1''\".", # only shown if there is an edit comment
-'revertpage' => 'Ācierde ādihtunga fram [[Special:Contributions/$2|$2]] ([[User talk:$2|Gesprec]]); wendede on bæc tō ǣrran fadunge fram [[User:$1|$1]]', # Additionally available: $3: revid of the revision reverted to, $4: timestamp of the revision reverted to, $5: revid of the revision reverted from, $6: timestamp of the revision reverted from
+'editcomment' => "Sēo ādihtungymbsprǣc wæs: \"''\$1''\".",
+'revertpage' => 'Ācierde ādihtunga fram [[Special:Contributions/$2|$2]] ([[User talk:$2|Gesprec]]); wendede on bæc tō ǣrran fadunge fram [[User:$1|$1]]',
# Protect
'protectlogpage' => 'Beorges ealdhord',
@@ -857,7 +935,7 @@ Swenge wiþ sweorhēafod andwendeþ þā endebyrdnessa.',
'protect-expiring' => 'endaþ $1 (UTC)',
'protect-cascade' => 'Sīdan beorgan beinnodon þisse sīdan (flōƿende ȝebeorg)',
'protect-cantedit' => 'Þū ne meaht þæt beorges emnet hƿeorfan þisre sīdan, forþǣm ne hæfst þū þafunge to ādihtenne hīe.',
-'protect-expiry-options' => '1 stund:1 hour,1 dæg:1 day,1 wucu:1 week,2 wuca:2 weeks,1 mōnaþ:1 month,3 mōnþas:3 months,6 mōnþas:6 months,1 gēar:1 year,unendiendlic:infinite', # display1:time1,display2:time2,...
+'protect-expiry-options' => '1 stund:1 hour,1 dæg:1 day,1 wucu:1 week,2 wuca:2 weeks,1 mōnaþ:1 month,3 mōnþas:3 months,6 mōnþas:6 months,1 gēar:1 year,unendiendlic:infinite',
'restriction-type' => 'Þafung:',
'restriction-level' => 'Ȝehæftes emnet:',
@@ -875,6 +953,7 @@ Swenge wiþ sweorhēafod andwendeþ þā endebyrdnessa.',
# Undelete
'undeletebtn' => 'Edstaðola!',
'undeletelink' => 'sēon/nīƿian',
+'undeleteviewlink' => 'sēon',
'undeletedarticle' => 'edstaðolod "[[$1]]"',
'undelete-search-submit' => 'Sēċan',
@@ -892,6 +971,7 @@ Swenge wiþ sweorhēafod andwendeþ þā endebyrdnessa.',
'month' => 'Fram mōnþe (and ǣror)',
'year' => 'Fram ȝēare (and ǣror)',
+'sp-contributions-talk' => 'ȝespreċ',
'sp-contributions-search' => 'Forðunga sēċan',
'sp-contributions-username' => 'IP address oþþe brūcendnama:',
'sp-contributions-submit' => 'Sēċan',
@@ -925,12 +1005,12 @@ Swenge wiþ sweorhēafod andwendeþ þā endebyrdnessa.',
** Uncwēme brūcendnama',
'ipbsubmit' => 'Þisne brūcend gǣlan',
'ipbother' => 'Ōðeru tīd',
-'ipboptions' => '2 stunda:2 hours,1 dæȝ:1 day,3 dagas:3 days,1 ƿucu:1 week,2 ƿuca:2 weeks,1 mōnaþ:1 month,3 mōnþas:3 months,6 mōnþas:6 months,1 ȝēar:1 year,unendiend:infinite', # display1:time1,display2:time2,...
+'ipboptions' => '2 stunda:2 hours,1 dæȝ:1 day,3 dagas:3 days,1 ƿucu:1 week,2 ƿuca:2 weeks,1 mōnaþ:1 month,3 mōnþas:3 months,6 mōnþas:6 months,1 ȝēar:1 year,unendiend:infinite',
'ipbotheroption' => 'ōðer',
'ipbotherreason' => 'Ōðeru/geīecendlicu racu:',
'ipblocklist-submit' => 'Sēċan',
'infiniteblock' => 'unendiende',
-'expiringblock' => 'forealdaþ $1',
+'expiringblock' => 'forealdaþ $1 $2',
'blocklink' => 'fortȳnan',
'unblocklink' => 'unfortȳnan',
'change-blocklink' => 'Fortȳne hƿeorfan',
@@ -945,7 +1025,7 @@ Swenge wiþ sweorhēafod andwendeþ þā endebyrdnessa.',
'move-watch' => 'Frumasīdan and endesīdan ƿæccan',
'movepagebtn' => 'Sīdan ȝeferan',
'pagemovedsub' => 'Ȝefōr spēdde',
-'movepage-moved' => '\'\'\'"$1" ƿæs to "$2"\'\'\' ȝefered', # The two titles are passed in plain text as $3 and $4 to allow additional goodies in the message.
+'movepage-moved' => '\'\'\'"$1" ƿæs to "$2"\'\'\' ȝefered',
'articleexists' => 'Tramet on þǣm naman ǣr stendeþ, oþþe þone
naman þu cēas nis andfenge.
Bidde cēos ōðerne naman.',
@@ -961,9 +1041,14 @@ Bidde cēos ōðerne naman.',
'export' => 'Sīdan ūtsendan',
# Namespace 8 related
-'allmessagesname' => 'Nama',
-'allmessagesdefault' => 'Fūsliċ traht',
-'allmessagescurrent' => 'Nū traht',
+'allmessagesname' => 'Nama',
+'allmessagesdefault' => 'Fūsliċ traht',
+'allmessagescurrent' => 'Nū traht',
+'allmessages-filter-unmodified' => 'Unhƿorfen',
+'allmessages-filter-all' => 'Eall',
+'allmessages-filter-modified' => 'Hƿorfen',
+'allmessages-language' => 'Sprǣċ:',
+'allmessages-filter-submit' => 'Gān',
# Thumbnails
'thumbnail-more' => 'Mǣrsian',
@@ -994,6 +1079,7 @@ Bidde cēos ōðerne naman.',
Þū meaht hire fruman sēon.',
'tooltip-ca-history' => 'Ǣror fadunga þisse sīdan',
'tooltip-ca-protect' => 'Þās sīdan beorgan',
+'tooltip-ca-unprotect' => 'Þās sīdan unbeorgan',
'tooltip-ca-delete' => 'Þās sīdan āfeorsian',
'tooltip-ca-move' => 'Þās sīdan ȝeferan',
'tooltip-ca-watch' => 'Þās sīdan ēacian to þīnre ƿæccȝetale',
@@ -1003,6 +1089,7 @@ Bidde cēos ōðerne naman.',
'tooltip-search-fulltext' => 'Þā sīdan sēċan mid þissum trahte',
'tooltip-p-logo' => 'Hēafodsīde',
'tooltip-n-mainpage' => 'Þǣre hēafodsīdan gān',
+'tooltip-n-mainpage-description' => 'Þǣre hēafodsīdan gān',
'tooltip-n-portal' => 'Ymbe þǣm ƿeorce, hƿæt meaht þū dōn, hƿǣr to findenne þing',
'tooltip-n-currentevents' => 'Ieldran cȳþþe findan ymbe nīƿum ȝelimpum',
'tooltip-n-recentchanges' => 'Sēo ȝetalu nīƿa hƿearfa in þǣre ƿiki',
@@ -1037,12 +1124,16 @@ Bidde cēos ōðerne naman.',
'anonymous' => 'Namcūþlēas(e) brūcend {{SITENAME}}n',
'siteuser' => '{{SITENAME}}n brūcere $1',
'others' => 'ōðru',
+'anonusers' => '{{SITENAME}} {{PLURAL:$2|uncūþ brūcend|uncūðe brūcendas}} $1',
# Info page
'numedits' => 'Hū mæniȝ ādihtas (sīde): $1',
'numtalkedits' => 'Hū mæniȝ ādihtas (ȝespreċsīde): $1',
'numwatchers' => 'Hū mæniȝ ƿæcceras: $1',
+# Math errors
+'math_unknown_error' => 'uncūþ ƿōh',
+
# Patrol log
'patrol-log-auto' => '(selffremmende)',
'patrol-log-diff' => 'nīƿung $1',
@@ -1144,6 +1235,7 @@ Bidde cēos ōðerne naman.',
'watchlistall2' => 'eall',
'namespacesall' => 'eall',
'monthsall' => 'eall',
+'limitall' => 'eall',
# E-mail address confirmation
'confirmemail_body' => 'Hwilchwega, gewēne þu of IP stōwe $1, hæfþ in namanbēc gestt ǣnne hordcleofan
@@ -1191,11 +1283,12 @@ $5
'watchlisttools-raw' => 'Grēne ƿæccȝetale ādihtan',
# Special:Version
-'version' => 'Fadung', # Not used as normal message but as header for the special page itself
+'version' => 'Fadung',
'version-specialpages' => 'Syndriȝa sīdan',
'version-other' => 'Ōðer',
'version-hooks' => 'Anglas',
'version-hook-name' => 'Angelnama',
+'version-version' => '(Fadung $1)',
# Special:FilePath
'filepath' => 'Fīlpæþ',
@@ -1217,4 +1310,9 @@ $5
# Special:Tags
'tags-edit' => 'ādihtan',
+# HTML forms
+'htmlform-submit' => 'Forþsendan',
+'htmlform-reset' => 'Hƿearfas undōn',
+'htmlform-selectorother-other' => 'Ōðer',
+
);
diff --git a/languages/messages/MessagesAr.php b/languages/messages/MessagesAr.php
index b95803ca..eef842a4 100644
--- a/languages/messages/MessagesAr.php
+++ b/languages/messages/MessagesAr.php
@@ -7,23 +7,38 @@
* @ingroup Language
* @file
*
- * @author Agurzil
+ * @author ;Hiba;1
+ * @author Abanima
+ * @author AhmadSherif
* @author Alnokta
* @author Antime
+ * @author Bassem JARKAS
* @author Chaos
* @author Ciphers
+ * @author DrFO.Tn
+ * @author Elmondo21st
+ * @author Elmoro
* @author Gharbeia
+ * @author Hakeem
+ * @author Histolo2
* @author Jak
* @author Khaledhosny
+ * @author Lord Anubis
+ * @author MK
+ * @author Menasim
* @author Meno25
* @author Mido
* @author Mimouni
+ * @author Mo7amedsalim
* @author Obayd
* @author OsamaK
* @author Ouda
* @author Oxydo
+ * @author Riadismet
+ * @author Sami Lab
* @author Tarawneh
- * @author לערי ריינהארט
+ * @author TheEgyptian
+ * @author Uwe a
* @author ترجمان05
* @author عصام بايزيدي
* @author نصوح
@@ -155,66 +170,68 @@ $magicWords = array(
'toc' => array( '0', '__فهرس__', '__TOC__' ),
'noeditsection' => array( '0', '__لاتحريرقسم__', '__NOEDITSECTION__' ),
'noheader' => array( '0', '__لاعنوان__', '__NOHEADER__' ),
- 'currentmonth' => array( '1', 'شهر_حالي', 'شهر', 'CURRENTMONTH' ),
- 'currentmonthname' => array( '1', 'اسم_الشهر_الحالي', 'اسم_شهر_حالي', 'اسم_شهر', 'CURRENTMONTHNAME' ),
- 'currentmonthnamegen' => array( '1', 'اسم_الشهر_الحالي_المولد', 'اسم_شهر_حالي_مولد', 'CURRENTMONTHNAMEGEN' ),
- 'currentmonthabbrev' => array( '1', 'اختصار_الشهر_الحالي', 'اختصار_شهر_حالي', 'CURRENTMONTHABBREV' ),
- 'currentday' => array( '1', 'يوم_حالي', 'يوم', 'CURRENTDAY' ),
- 'currentday2' => array( '1', 'يوم_حالي2', 'يوم2', 'CURRENTDAY2' ),
- 'currentdayname' => array( '1', 'اسم_اليوم_الحالي', 'اسم_يوم_حالي', 'اسم_يوم', 'CURRENTDAYNAME' ),
- 'currentyear' => array( '1', 'عام_حالي', 'عام', 'CURRENTYEAR' ),
- 'currenttime' => array( '1', 'وقت_حالي', 'وقت', 'CURRENTTIME' ),
- 'currenthour' => array( '1', 'ساعة_حالية', 'ساعة', 'CURRENTHOUR' ),
- 'localmonth' => array( '1', 'شهر_محلي', 'LOCALMONTH' ),
- 'localmonthname' => array( '1', 'اسم_الشهر_المحلي', 'اسم_شهر_محلي', 'LOCALMONTHNAME' ),
- 'localmonthnamegen' => array( '1', 'اسم_الشهر_المحلي_المولد', 'اسم_شهر_محلي_مولد', 'LOCALMONTHNAMEGEN' ),
- 'localmonthabbrev' => array( '1', 'اختصار_الشهر_المحلي', 'اختصار_شهر_محلي', 'LOCALMONTHABBREV' ),
+ 'currentmonth' => array( '1', 'شهر_حالي', 'شهر_حالي2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+ 'currentmonth1' => array( '1', 'شهر_حالي1', 'CURRENTMONTH1' ),
+ 'currentmonthname' => array( '1', 'اسم_الشهر_الحالي', 'CURRENTMONTHNAME' ),
+ 'currentmonthnamegen' => array( '1', 'اسم_الشهر_الحالي_المولد', 'CURRENTMONTHNAMEGEN' ),
+ 'currentmonthabbrev' => array( '1', 'اختصار_الشهر_الحالي', 'CURRENTMONTHABBREV' ),
+ 'currentday' => array( '1', 'يوم_حالي', 'CURRENTDAY' ),
+ 'currentday2' => array( '1', 'يوم_حالي2', 'CURRENTDAY2' ),
+ 'currentdayname' => array( '1', 'اسم_اليوم_الحالي', 'CURRENTDAYNAME' ),
+ 'currentyear' => array( '1', 'عام_حالي', 'CURRENTYEAR' ),
+ 'currenttime' => array( '1', 'وقت_حالي', 'CURRENTTIME' ),
+ 'currenthour' => array( '1', 'ساعة_حالية', 'CURRENTHOUR' ),
+ 'localmonth' => array( '1', 'شهر_محلي', 'شهر_محلي2', 'LOCALMONTH', 'LOCALMONTH2' ),
+ 'localmonth1' => array( '1', 'شهر_محلي1', 'LOCALMONTH1' ),
+ 'localmonthname' => array( '1', 'اسم_الشهر_المحلي', 'LOCALMONTHNAME' ),
+ 'localmonthnamegen' => array( '1', 'اسم_الشهر_المحلي_المولد', 'LOCALMONTHNAMEGEN' ),
+ 'localmonthabbrev' => array( '1', 'اختصار_الشهر_المحلي', 'LOCALMONTHABBREV' ),
'localday' => array( '1', 'يوم_محلي', 'LOCALDAY' ),
'localday2' => array( '1', 'ي