summaryrefslogtreecommitdiff
path: root/languages
diff options
context:
space:
mode:
authorPierre Schmitz <pierre@archlinux.de>2014-12-27 15:41:37 +0100
committerPierre Schmitz <pierre@archlinux.de>2014-12-31 11:43:28 +0100
commitc1f9b1f7b1b77776192048005dcc66dcf3df2bfb (patch)
tree2b38796e738dd74cb42ecd9bfd151803108386bc /languages
parentb88ab0086858470dd1f644e64cb4e4f62bb2be9b (diff)
Update to MediaWiki 1.24.1
Diffstat (limited to 'languages')
-rw-r--r--languages/ConverterRule.php502
-rw-r--r--languages/FakeConverter.php122
-rw-r--r--languages/Language.php1065
-rw-r--r--languages/LanguageConverter.php703
-rw-r--r--languages/Names.php37
-rw-r--r--languages/classes/LanguageAr.php2
-rw-r--r--languages/classes/LanguageAz.php2
-rw-r--r--languages/classes/LanguageBe_tarask.php6
-rw-r--r--languages/classes/LanguageBg.php2
-rw-r--r--languages/classes/LanguageBs.php10
-rw-r--r--languages/classes/LanguageCu.php16
-rw-r--r--languages/classes/LanguageDsb.php12
-rw-r--r--languages/classes/LanguageEo.php10
-rw-r--r--languages/classes/LanguageEs.php2
-rw-r--r--languages/classes/LanguageEt.php2
-rw-r--r--languages/classes/LanguageFi.php22
-rw-r--r--languages/classes/LanguageGa.php4
-rw-r--r--languages/classes/LanguageGan.php46
-rw-r--r--languages/classes/LanguageHe.php4
-rw-r--r--languages/classes/LanguageHsb.php12
-rw-r--r--languages/classes/LanguageHu.php4
-rw-r--r--languages/classes/LanguageHy.php6
-rw-r--r--languages/classes/LanguageIu.php115
-rw-r--r--languages/classes/LanguageJa.php4
-rw-r--r--languages/classes/LanguageKaa.php10
-rw-r--r--languages/classes/LanguageKk.php81
-rw-r--r--languages/classes/LanguageKk_cyrl.php70
-rw-r--r--languages/classes/LanguageKm.php2
-rw-r--r--languages/classes/LanguageKsh.php12
-rw-r--r--languages/classes/LanguageKu.php33
-rw-r--r--languages/classes/LanguageKu_ku.php5
-rw-r--r--languages/classes/LanguageLa.php4
-rw-r--r--languages/classes/LanguageMl.php2
-rw-r--r--languages/classes/LanguageMy.php2
-rw-r--r--languages/classes/LanguageOs.php5
-rw-r--r--languages/classes/LanguagePl.php2
-rw-r--r--languages/classes/LanguageQqx.php2
-rw-r--r--languages/classes/LanguageRu.php10
-rw-r--r--languages/classes/LanguageShi.php42
-rw-r--r--languages/classes/LanguageSl.php9
-rw-r--r--languages/classes/LanguageSr.php86
-rw-r--r--languages/classes/LanguageTr.php5
-rw-r--r--languages/classes/LanguageTyv.php21
-rw-r--r--languages/classes/LanguageUk.php14
-rw-r--r--languages/classes/LanguageUz.php21
-rw-r--r--languages/classes/LanguageWa.php16
-rw-r--r--languages/classes/LanguageYue.php4
-rw-r--r--languages/classes/LanguageZh.php44
-rw-r--r--languages/classes/LanguageZh_hans.php9
-rw-r--r--languages/i18n/ab.json158
-rw-r--r--languages/i18n/ace.json1212
-rw-r--r--languages/i18n/aeb.json922
-rw-r--r--languages/i18n/af.json3002
-rw-r--r--languages/i18n/ak.json66
-rw-r--r--languages/i18n/aln.json1063
-rw-r--r--languages/i18n/am.json1982
-rw-r--r--languages/i18n/an.json2637
-rw-r--r--languages/i18n/ang.json971
-rw-r--r--languages/i18n/anp.json506
-rw-r--r--languages/i18n/ar.json3223
-rw-r--r--languages/i18n/arc.json1396
-rw-r--r--languages/i18n/arn.json692
-rw-r--r--languages/i18n/arq.json648
-rw-r--r--languages/i18n/ary.json1996
-rw-r--r--languages/i18n/arz.json2301
-rw-r--r--languages/i18n/as.json3004
-rw-r--r--languages/i18n/ast.json3114
-rw-r--r--languages/i18n/av.json79
-rw-r--r--languages/i18n/avk.json1706
-rw-r--r--languages/i18n/ay.json197
-rw-r--r--languages/i18n/az.json2355
-rw-r--r--languages/i18n/azb.json2917
-rw-r--r--languages/i18n/ba.json2929
-rw-r--r--languages/i18n/bar.json1245
-rw-r--r--languages/i18n/bbc-latn.json544
-rw-r--r--languages/i18n/bcc.json2473
-rw-r--r--languages/i18n/bcl.json2975
-rw-r--r--languages/i18n/be-tarask.json3125
-rw-r--r--languages/i18n/be.json3107
-rw-r--r--languages/i18n/bg.json2899
-rw-r--r--languages/i18n/bho.json907
-rw-r--r--languages/i18n/bi.json111
-rw-r--r--languages/i18n/bjn.json2655
-rw-r--r--languages/i18n/bm.json84
-rw-r--r--languages/i18n/bn.json3122
-rw-r--r--languages/i18n/bo.json820
-rw-r--r--languages/i18n/bpy.json1198
-rw-r--r--languages/i18n/bqi.json562
-rw-r--r--languages/i18n/br.json3058
-rw-r--r--languages/i18n/brh.json471
-rw-r--r--languages/i18n/bs.json2993
-rw-r--r--languages/i18n/bto.json573
-rw-r--r--languages/i18n/bug.json331
-rw-r--r--languages/i18n/bxr.json279
-rw-r--r--languages/i18n/ca.json3133
-rw-r--r--languages/i18n/cbk-zam.json85
-rw-r--r--languages/i18n/cdo.json991
-rw-r--r--languages/i18n/ce.json2669
-rw-r--r--languages/i18n/ceb.json846
-rw-r--r--languages/i18n/ch.json775
-rw-r--r--languages/i18n/chr.json74
-rw-r--r--languages/i18n/chy.json11
-rw-r--r--languages/i18n/ckb.json2557
-rw-r--r--languages/i18n/co.json615
-rw-r--r--languages/i18n/cps.json697
-rw-r--r--languages/i18n/cr.json10
-rw-r--r--languages/i18n/crh-cyrl.json1437
-rw-r--r--languages/i18n/crh-latn.json1439
-rw-r--r--languages/i18n/cs.json3186
-rw-r--r--languages/i18n/csb.json882
-rw-r--r--languages/i18n/cu.json667
-rw-r--r--languages/i18n/cv.json866
-rw-r--r--languages/i18n/cy.json3018
-rw-r--r--languages/i18n/da.json3074
-rw-r--r--languages/i18n/de-at.json18
-rw-r--r--languages/i18n/de-ch.json294
-rw-r--r--languages/i18n/de-formal.json316
-rw-r--r--languages/i18n/de.json3226
-rw-r--r--languages/i18n/diq.json3192
-rw-r--r--languages/i18n/dsb.json3057
-rw-r--r--languages/i18n/dtp.json1088
-rw-r--r--languages/i18n/dv.json584
-rw-r--r--languages/i18n/dz.json474
-rw-r--r--languages/i18n/ee.json459
-rw-r--r--languages/i18n/egl.json1331
-rw-r--r--languages/i18n/el.json3071
-rw-r--r--languages/i18n/eml.json101
-rw-r--r--languages/i18n/en-ca.json40
-rw-r--r--languages/i18n/en-gb.json86
-rw-r--r--languages/i18n/en.json3579
-rw-r--r--languages/i18n/eo.json3152
-rw-r--r--languages/i18n/es.json3224
-rw-r--r--languages/i18n/et.json3119
-rw-r--r--languages/i18n/eu.json2886
-rw-r--r--languages/i18n/ext.json1727
-rw-r--r--languages/i18n/fa.json3204
-rw-r--r--languages/i18n/ff.json448
-rw-r--r--languages/i18n/fi.json3165
-rw-r--r--languages/i18n/fit.json501
-rw-r--r--languages/i18n/fj.json146
-rw-r--r--languages/i18n/fo.json2378
-rw-r--r--languages/i18n/fr.json3313
-rw-r--r--languages/i18n/frc.json515
-rw-r--r--languages/i18n/frp.json2866
-rw-r--r--languages/i18n/frr.json3073
-rw-r--r--languages/i18n/fur.json1249
-rw-r--r--languages/i18n/fy.json1678
-rw-r--r--languages/i18n/ga.json1535
-rw-r--r--languages/i18n/gag.json728
-rw-r--r--languages/i18n/gan-hans.json1669
-rw-r--r--languages/i18n/gan-hant.json1666
-rw-r--r--languages/i18n/gan.json12
-rw-r--r--languages/i18n/gd.json3167
-rw-r--r--languages/i18n/gl.json3119
-rw-r--r--languages/i18n/glk.json52
-rw-r--r--languages/i18n/gn.json368
-rw-r--r--languages/i18n/gom-latn.json544
-rw-r--r--languages/i18n/got.json466
-rw-r--r--languages/i18n/grc.json2019
-rw-r--r--languages/i18n/gsw.json2907
-rw-r--r--languages/i18n/gu.json2911
-rw-r--r--languages/i18n/gv.json1060
-rw-r--r--languages/i18n/ha.json535
-rw-r--r--languages/i18n/hak.json1460
-rw-r--r--languages/i18n/haw.json1279
-rw-r--r--languages/i18n/he.json3203
-rw-r--r--languages/i18n/hi.json3072
-rw-r--r--languages/i18n/hif-latn.json2701
-rw-r--r--languages/i18n/hil.json1352
-rw-r--r--languages/i18n/hr.json2977
-rw-r--r--languages/i18n/hrx.json3023
-rw-r--r--languages/i18n/hsb.json3093
-rw-r--r--languages/i18n/ht.json881
-rw-r--r--languages/i18n/hu.json3005
-rw-r--r--languages/i18n/hy.json1902
-rw-r--r--languages/i18n/ia.json3103
-rw-r--r--languages/i18n/id.json3233
-rw-r--r--languages/i18n/ie.json993
-rw-r--r--languages/i18n/ig.json1231
-rw-r--r--languages/i18n/ii.json8
-rw-r--r--languages/i18n/ik.json24
-rw-r--r--languages/i18n/ike-cans.json278
-rw-r--r--languages/i18n/ike-latn.json247
-rw-r--r--languages/i18n/ilo.json3070
-rw-r--r--languages/i18n/inh.json850
-rw-r--r--languages/i18n/io.json1081
-rw-r--r--languages/i18n/is.json2864
-rw-r--r--languages/i18n/it.json3198
-rw-r--r--languages/i18n/ja.json3286
-rw-r--r--languages/i18n/jam.json730
-rw-r--r--languages/i18n/jbo.json351
-rw-r--r--languages/i18n/jut.json613
-rw-r--r--languages/i18n/jv.json2958
-rw-r--r--languages/i18n/ka.json3072
-rw-r--r--languages/i18n/kaa.json1326
-rw-r--r--languages/i18n/kab.json2968
-rw-r--r--languages/i18n/kbd-cyrl.json919
-rw-r--r--languages/i18n/kg.json415
-rw-r--r--languages/i18n/khw.json807
-rw-r--r--languages/i18n/ki.json10
-rw-r--r--languages/i18n/kiu.json1116
-rw-r--r--languages/i18n/kk-arab.json1771
-rw-r--r--languages/i18n/kk-cyrl.json2754
-rw-r--r--languages/i18n/kk-latn.json1770
-rw-r--r--languages/i18n/kk.json30
-rw-r--r--languages/i18n/kl.json379
-rw-r--r--languages/i18n/km.json2625
-rw-r--r--languages/i18n/kn.json1778
-rw-r--r--languages/i18n/ko.json3148
-rw-r--r--languages/i18n/koi.json574
-rw-r--r--languages/i18n/krc.json2826
-rw-r--r--languages/i18n/kri.json483
-rw-r--r--languages/i18n/krj.json232
-rw-r--r--languages/i18n/ks-arab.json46
-rw-r--r--languages/i18n/ks-deva.json13
-rw-r--r--languages/i18n/ks.json32
-rw-r--r--languages/i18n/ksh.json3130
-rw-r--r--languages/i18n/ku-arab.json22
-rw-r--r--languages/i18n/ku-latn.json1583
-rw-r--r--languages/i18n/kv.json125
-rw-r--r--languages/i18n/kw.json1019
-rw-r--r--languages/i18n/ky.json1424
-rw-r--r--languages/i18n/la.json1805
-rw-r--r--languages/i18n/lad.json1121
-rw-r--r--languages/i18n/lb.json3062
-rw-r--r--languages/i18n/lbe.json48
-rw-r--r--languages/i18n/lez.json1000
-rw-r--r--languages/i18n/lfn.json677
-rw-r--r--languages/i18n/lg.json894
-rw-r--r--languages/i18n/li.json2662
-rw-r--r--languages/i18n/lij.json966
-rw-r--r--languages/i18n/liv.json552
-rw-r--r--languages/i18n/lmo.json1457
-rw-r--r--languages/i18n/ln.json535
-rw-r--r--languages/i18n/lo.json663
-rw-r--r--languages/i18n/loz.json780
-rw-r--r--languages/i18n/lrc.json2287
-rw-r--r--languages/i18n/lt.json2888
-rw-r--r--languages/i18n/ltg.json628
-rw-r--r--languages/i18n/lus.json1475
-rw-r--r--languages/i18n/lv.json2460
-rw-r--r--languages/i18n/lzh.json2121
-rw-r--r--languages/i18n/lzz.json583
-rw-r--r--languages/i18n/mai.json2788
-rw-r--r--languages/i18n/map-bms.json1394
-rw-r--r--languages/i18n/mdf.json2035
-rw-r--r--languages/i18n/mg.json2700
-rw-r--r--languages/i18n/mhr.json797
-rw-r--r--languages/i18n/mi.json85
-rw-r--r--languages/i18n/min.json1878
-rw-r--r--languages/i18n/mk.json3275
-rw-r--r--languages/i18n/ml.json3131
-rw-r--r--languages/i18n/mn.json2598
-rw-r--r--languages/i18n/mo.json418
-rw-r--r--languages/i18n/mr.json3009
-rw-r--r--languages/i18n/mrj.json506
-rw-r--r--languages/i18n/ms.json3146
-rw-r--r--languages/i18n/mt.json2741
-rw-r--r--languages/i18n/mwl.json834
-rw-r--r--languages/i18n/my.json1454
-rw-r--r--languages/i18n/myv.json1618
-rw-r--r--languages/i18n/mzn.json724
-rw-r--r--languages/i18n/na.json67
-rw-r--r--languages/i18n/nah.json1089
-rw-r--r--languages/i18n/nan.json949
-rw-r--r--languages/i18n/nap.json2245
-rw-r--r--languages/i18n/nb.json3157
-rw-r--r--languages/i18n/nds-nl.json2960
-rw-r--r--languages/i18n/nds.json2190
-rw-r--r--languages/i18n/ne.json2692
-rw-r--r--languages/i18n/new.json361
-rw-r--r--languages/i18n/niu.json174
-rw-r--r--languages/i18n/nl-informal.json290
-rw-r--r--languages/i18n/nl.json3174
-rw-r--r--languages/i18n/nn.json2947
-rw-r--r--languages/i18n/nov.json323
-rw-r--r--languages/i18n/nrm.json100
-rw-r--r--languages/i18n/nso.json883
-rw-r--r--languages/i18n/nv.json259
-rw-r--r--languages/i18n/ny.json18
-rw-r--r--languages/i18n/oc.json3070
-rw-r--r--languages/i18n/om.json70
-rw-r--r--languages/i18n/or.json2910
-rw-r--r--languages/i18n/os.json1206
-rw-r--r--languages/i18n/pa.json2155
-rw-r--r--languages/i18n/pag.json256
-rw-r--r--languages/i18n/pam.json1636
-rw-r--r--languages/i18n/pap.json278
-rw-r--r--languages/i18n/pcd.json791
-rw-r--r--languages/i18n/pdc.json738
-rw-r--r--languages/i18n/pdt.json451
-rw-r--r--languages/i18n/pfl.json899
-rw-r--r--languages/i18n/pi.json71
-rw-r--r--languages/i18n/pih.json42
-rw-r--r--languages/i18n/pl.json3219
-rw-r--r--languages/i18n/pms.json3096
-rw-r--r--languages/i18n/pnb.json2595
-rw-r--r--languages/i18n/pnt.json1000
-rw-r--r--languages/i18n/prg.json1978
-rw-r--r--languages/i18n/ps.json2058
-rw-r--r--languages/i18n/pt-br.json3135
-rw-r--r--languages/i18n/pt.json3166
-rw-r--r--languages/i18n/qqq.json3739
-rw-r--r--languages/i18n/qu.json2991
-rw-r--r--languages/i18n/qug.json648
-rw-r--r--languages/i18n/rgn.json524
-rw-r--r--languages/i18n/rif.json543
-rw-r--r--languages/i18n/rm.json2776
-rw-r--r--languages/i18n/rmy.json372
-rw-r--r--languages/i18n/ro.json3117
-rw-r--r--languages/i18n/roa-tara.json3119
-rw-r--r--languages/i18n/ru.json3253
-rw-r--r--languages/i18n/rue.json2950
-rw-r--r--languages/i18n/rup.json385
-rw-r--r--languages/i18n/ruq-cyrl.json254
-rw-r--r--languages/i18n/ruq-latn.json254
-rw-r--r--languages/i18n/rw.json28
-rw-r--r--languages/i18n/sa.json2893
-rw-r--r--languages/i18n/sah.json3066
-rw-r--r--languages/i18n/sat.json902
-rw-r--r--languages/i18n/sc.json1502
-rw-r--r--languages/i18n/scn.json2224
-rw-r--r--languages/i18n/sco.json2806
-rw-r--r--languages/i18n/sd.json606
-rw-r--r--languages/i18n/sdc.json1487
-rw-r--r--languages/i18n/se.json1047
-rw-r--r--languages/i18n/sei.json772
-rw-r--r--languages/i18n/sg.json245
-rw-r--r--languages/i18n/sgs.json1384
-rw-r--r--languages/i18n/sh.json2959
-rw-r--r--languages/i18n/shi.json996
-rw-r--r--languages/i18n/si.json2906
-rw-r--r--languages/i18n/sk.json3029
-rw-r--r--languages/i18n/sl.json3112
-rw-r--r--languages/i18n/sli.json1691
-rw-r--r--languages/i18n/sm.json153
-rw-r--r--languages/i18n/sma.json648
-rw-r--r--languages/i18n/sn.json122
-rw-r--r--languages/i18n/so.json1125
-rw-r--r--languages/i18n/sq.json2757
-rw-r--r--languages/i18n/sr-ec.json3209
-rw-r--r--languages/i18n/sr-el.json3177
-rw-r--r--languages/i18n/srn.json795
-rw-r--r--languages/i18n/ss.json217
-rw-r--r--languages/i18n/st.json110
-rw-r--r--languages/i18n/stq.json2381
-rw-r--r--languages/i18n/su.json2341
-rw-r--r--languages/i18n/sv.json3171
-rw-r--r--languages/i18n/sw.json2278
-rw-r--r--languages/i18n/szl.json2143
-rw-r--r--languages/i18n/ta.json2796
-rw-r--r--languages/i18n/tcy.json745
-rw-r--r--languages/i18n/te.json3032
-rw-r--r--languages/i18n/tet.json704
-rw-r--r--languages/i18n/tg-cyrl.json2120
-rw-r--r--languages/i18n/tg-latn.json1743
-rw-r--r--languages/i18n/th.json2888
-rw-r--r--languages/i18n/ti.json120
-rw-r--r--languages/i18n/tk.json2239
-rw-r--r--languages/i18n/tl.json3007
-rw-r--r--languages/i18n/tly.json656
-rw-r--r--languages/i18n/tn.json116
-rw-r--r--languages/i18n/to.json915
-rw-r--r--languages/i18n/tokipona.json113
-rw-r--r--languages/i18n/tpi.json623
-rw-r--r--languages/i18n/tr.json3141
-rw-r--r--languages/i18n/tru.json620
-rw-r--r--languages/i18n/ts.json661
-rw-r--r--languages/i18n/tt-cyrl.json1747
-rw-r--r--languages/i18n/tt-latn.json1488
-rw-r--r--languages/i18n/tw.json52
-rw-r--r--languages/i18n/ty.json113
-rw-r--r--languages/i18n/tyv.json979
-rw-r--r--languages/i18n/tzm.json610
-rw-r--r--languages/i18n/udm.json206
-rw-r--r--languages/i18n/ug-arab.json2940
-rw-r--r--languages/i18n/ug-latn.json158
-rw-r--r--languages/i18n/uk.json3295
-rw-r--r--languages/i18n/ur.json1112
-rw-r--r--languages/i18n/uz.json1327
-rw-r--r--languages/i18n/ve.json22
-rw-r--r--languages/i18n/vec.json2880
-rw-r--r--languages/i18n/vep.json2329
-rw-r--r--languages/i18n/vi.json3216
-rw-r--r--languages/i18n/vls.json147
-rw-r--r--languages/i18n/vmf.json708
-rw-r--r--languages/i18n/vo.json2122
-rw-r--r--languages/i18n/vot.json675
-rw-r--r--languages/i18n/vro.json1691
-rw-r--r--languages/i18n/wa.json1628
-rw-r--r--languages/i18n/war.json1941
-rw-r--r--languages/i18n/wo.json1561
-rw-r--r--languages/i18n/wuu.json1317
-rw-r--r--languages/i18n/xal.json880
-rw-r--r--languages/i18n/xh.json106
-rw-r--r--languages/i18n/xmf.json644
-rw-r--r--languages/i18n/yi.json2977
-rw-r--r--languages/i18n/yo.json2679
-rw-r--r--languages/i18n/yue.json2439
-rw-r--r--languages/i18n/za.json242
-rw-r--r--languages/i18n/zea.json943
-rw-r--r--languages/i18n/zh-hans.json3217
-rw-r--r--languages/i18n/zh-hant.json3173
-rw-r--r--languages/i18n/zh-hk.json67
-rw-r--r--languages/i18n/zh-sg.json12
-rw-r--r--languages/i18n/zh-tw.json569
-rw-r--r--languages/i18n/zh.json19
-rw-r--r--languages/i18n/zu.json257
-rw-r--r--languages/messages/MessagesAb.php230
-rw-r--r--languages/messages/MessagesAce.php1133
-rw-r--r--languages/messages/MessagesAeb.php1346
-rw-r--r--languages/messages/MessagesAf.php3890
-rw-r--r--languages/messages/MessagesAk.php115
-rw-r--r--languages/messages/MessagesAln.php1521
-rw-r--r--languages/messages/MessagesAm.php2566
-rw-r--r--languages/messages/MessagesAn.php3479
-rw-r--r--languages/messages/MessagesAng.php1303
-rw-r--r--languages/messages/MessagesAnp.php723
-rw-r--r--languages/messages/MessagesAr.php4152
-rw-r--r--languages/messages/MessagesArc.php1739
-rw-r--r--languages/messages/MessagesArn.php962
-rw-r--r--languages/messages/MessagesArq.php19
-rw-r--r--languages/messages/MessagesAry.php2664
-rw-r--r--languages/messages/MessagesArz.php3135
-rw-r--r--languages/messages/MessagesAs.php3853
-rw-r--r--languages/messages/MessagesAst.php3944
-rw-r--r--languages/messages/MessagesAv.php119
-rw-r--r--languages/messages/MessagesAvk.php2262
-rw-r--r--languages/messages/MessagesAy.php264
-rw-r--r--languages/messages/MessagesAz.php2903
-rw-r--r--languages/messages/MessagesAzb.php3788
-rw-r--r--languages/messages/MessagesBa.php3892
-rw-r--r--languages/messages/MessagesBar.php1700
-rw-r--r--languages/messages/MessagesBbc.php3
-rw-r--r--languages/messages/MessagesBbc_latn.php724
-rw-r--r--languages/messages/MessagesBcc.php2941
-rw-r--r--languages/messages/MessagesBcl.php3877
-rw-r--r--languages/messages/MessagesBe.php3508
-rw-r--r--languages/messages/MessagesBe_tarask.php3899
-rw-r--r--languages/messages/MessagesBg.php3621
-rw-r--r--languages/messages/MessagesBh.php3
-rw-r--r--languages/messages/MessagesBho.php1154
-rw-r--r--languages/messages/MessagesBi.php152
-rw-r--r--languages/messages/MessagesBjn.php3607
-rw-r--r--languages/messages/MessagesBm.php135
-rw-r--r--languages/messages/MessagesBn.php3899
-rw-r--r--languages/messages/MessagesBo.php863
-rw-r--r--languages/messages/MessagesBpy.php1663
-rw-r--r--languages/messages/MessagesBqi.php809
-rw-r--r--languages/messages/MessagesBr.php3876
-rw-r--r--languages/messages/MessagesBrh.php641
-rw-r--r--languages/messages/MessagesBs.php3917
-rw-r--r--languages/messages/MessagesBug.php465
-rw-r--r--languages/messages/MessagesBxr.php7
-rw-r--r--languages/messages/MessagesCa.php3888
-rw-r--r--languages/messages/MessagesCbk_zam.php126
-rw-r--r--languages/messages/MessagesCdo.php1435
-rw-r--r--languages/messages/MessagesCe.php2261
-rw-r--r--languages/messages/MessagesCeb.php1170
-rw-r--r--languages/messages/MessagesCh.php1094
-rw-r--r--languages/messages/MessagesChr.php126
-rw-r--r--languages/messages/MessagesCkb.php3431
-rw-r--r--languages/messages/MessagesCo.php533
-rw-r--r--languages/messages/MessagesCps.php974
-rw-r--r--languages/messages/MessagesCrh.php4
-rw-r--r--languages/messages/MessagesCrh_cyrl.php2030
-rw-r--r--languages/messages/MessagesCrh_latn.php2036
-rw-r--r--languages/messages/MessagesCs.php3960
-rw-r--r--languages/messages/MessagesCsb.php1233
-rw-r--r--languages/messages/MessagesCu.php909
-rw-r--r--languages/messages/MessagesCv.php1157
-rw-r--r--languages/messages/MessagesCy.php3858
-rw-r--r--languages/messages/MessagesDa.php3893
-rw-r--r--languages/messages/MessagesDe.php3983
-rw-r--r--languages/messages/MessagesDe_at.php19
-rw-r--r--languages/messages/MessagesDe_ch.php601
-rw-r--r--languages/messages/MessagesDe_formal.php723
-rw-r--r--languages/messages/MessagesDiq.php4156
-rw-r--r--languages/messages/MessagesDsb.php3667
-rw-r--r--languages/messages/MessagesDtp.php1505
-rw-r--r--languages/messages/MessagesDv.php791
-rw-r--r--languages/messages/MessagesDz.php686
-rw-r--r--languages/messages/MessagesEe.php600
-rw-r--r--languages/messages/MessagesEgl.php670
-rw-r--r--languages/messages/MessagesEl.php3931
-rw-r--r--languages/messages/MessagesEml.php159
-rw-r--r--languages/messages/MessagesEn.php4928
-rw-r--r--languages/messages/MessagesEn_ca.php61
-rw-r--r--languages/messages/MessagesEn_gb.php117
-rw-r--r--languages/messages/MessagesEn_rtl.php3
-rw-r--r--languages/messages/MessagesEo.php3868
-rw-r--r--languages/messages/MessagesEs.php4020
-rw-r--r--languages/messages/MessagesEt.php3848
-rw-r--r--languages/messages/MessagesEu.php3527
-rw-r--r--languages/messages/MessagesExt.php2354
-rw-r--r--languages/messages/MessagesFa.php4054
-rw-r--r--languages/messages/MessagesFf.php608
-rw-r--r--languages/messages/MessagesFi.php3869
-rw-r--r--languages/messages/MessagesFit.php702
-rw-r--r--languages/messages/MessagesFj.php212
-rw-r--r--languages/messages/MessagesFo.php3130
-rw-r--r--languages/messages/MessagesFr.php4097
-rw-r--r--languages/messages/MessagesFrc.php679
-rw-r--r--languages/messages/MessagesFrp.php3944
-rw-r--r--languages/messages/MessagesFrr.php3798
-rw-r--r--languages/messages/MessagesFur.php1576
-rw-r--r--languages/messages/MessagesFy.php2187
-rw-r--r--languages/messages/MessagesGa.php2140
-rw-r--r--languages/messages/MessagesGag.php992
-rw-r--r--languages/messages/MessagesGan.php13
-rw-r--r--languages/messages/MessagesGan_hans.php2207
-rw-r--r--languages/messages/MessagesGan_hant.php2204
-rw-r--r--languages/messages/MessagesGd.php1641
-rw-r--r--languages/messages/MessagesGl.php4003
-rw-r--r--languages/messages/MessagesGlk.php73
-rw-r--r--languages/messages/MessagesGn.php515
-rw-r--r--languages/messages/MessagesGot.php508
-rw-r--r--languages/messages/MessagesGrc.php2650
-rw-r--r--languages/messages/MessagesGsw.php3603
-rw-r--r--languages/messages/MessagesGu.php3835
-rw-r--r--languages/messages/MessagesGv.php1454
-rw-r--r--languages/messages/MessagesHa.php770
-rw-r--r--languages/messages/MessagesHak.php1967
-rw-r--r--languages/messages/MessagesHaw.php781
-rw-r--r--languages/messages/MessagesHe.php4015
-rw-r--r--languages/messages/MessagesHi.php3962
-rw-r--r--languages/messages/MessagesHif.php3
-rw-r--r--languages/messages/MessagesHif_latn.php3659
-rw-r--r--languages/messages/MessagesHil.php1935
-rw-r--r--languages/messages/MessagesHr.php3834
-rw-r--r--languages/messages/MessagesHrx.php12
-rw-r--r--languages/messages/MessagesHsb.php3746
-rw-r--r--languages/messages/MessagesHt.php1241
-rw-r--r--languages/messages/MessagesHu.php3791
-rw-r--r--languages/messages/MessagesHy.php2535
-rw-r--r--languages/messages/MessagesIa.php3979
-rw-r--r--languages/messages/MessagesId.php4066
-rw-r--r--languages/messages/MessagesIe.php1282
-rw-r--r--languages/messages/MessagesIg.php1671
-rw-r--r--languages/messages/MessagesIi.php9
-rw-r--r--languages/messages/MessagesIk.php24
-rw-r--r--languages/messages/MessagesIke_cans.php411
-rw-r--r--languages/messages/MessagesIke_latn.php382
-rw-r--r--languages/messages/MessagesIlo.php3921
-rw-r--r--languages/messages/MessagesInh.php1159
-rw-r--r--languages/messages/MessagesIo.php1459
-rw-r--r--languages/messages/MessagesIs.php3750
-rw-r--r--languages/messages/MessagesIt.php3924
-rw-r--r--languages/messages/MessagesIu.php3
-rw-r--r--languages/messages/MessagesJa.php4194
-rw-r--r--languages/messages/MessagesJam.php1085
-rw-r--r--languages/messages/MessagesJbo.php418
-rw-r--r--languages/messages/MessagesJut.php842
-rw-r--r--languages/messages/MessagesJv.php3628
-rw-r--r--languages/messages/MessagesKa.php3958
-rw-r--r--languages/messages/MessagesKaa.php1770
-rw-r--r--languages/messages/MessagesKab.php2960
-rw-r--r--languages/messages/MessagesKbd.php3
-rw-r--r--languages/messages/MessagesKbd_cyrl.php1326
-rw-r--r--languages/messages/MessagesKg.php237
-rw-r--r--languages/messages/MessagesKhw.php1124
-rw-r--r--languages/messages/MessagesKiu.php1524
-rw-r--r--languages/messages/MessagesKk.php39
-rw-r--r--languages/messages/MessagesKk_arab.php2457
-rw-r--r--languages/messages/MessagesKk_cn.php3
-rw-r--r--languages/messages/MessagesKk_cyrl.php3402
-rw-r--r--languages/messages/MessagesKk_kz.php3
-rw-r--r--languages/messages/MessagesKk_latn.php2453
-rw-r--r--languages/messages/MessagesKk_tr.php3
-rw-r--r--languages/messages/MessagesKl.php497
-rw-r--r--languages/messages/MessagesKm.php3548
-rw-r--r--languages/messages/MessagesKn.php2152
-rw-r--r--languages/messages/MessagesKo.php4017
-rw-r--r--languages/messages/MessagesKo_kp.php3
-rw-r--r--languages/messages/MessagesKoi.php752
-rw-r--r--languages/messages/MessagesKrc.php3583
-rw-r--r--languages/messages/MessagesKri.php502
-rw-r--r--languages/messages/MessagesKrj.php322
-rw-r--r--languages/messages/MessagesKs.php6
-rw-r--r--languages/messages/MessagesKs_arab.php57
-rw-r--r--languages/messages/MessagesKs_deva.php11
-rw-r--r--languages/messages/MessagesKsh.php4141
-rw-r--r--languages/messages/MessagesKu.php3
-rw-r--r--languages/messages/MessagesKu_arab.php25
-rw-r--r--languages/messages/MessagesKu_latn.php2086
-rw-r--r--languages/messages/MessagesKv.php190
-rw-r--r--languages/messages/MessagesKw.php1374
-rw-r--r--languages/messages/MessagesKy.php1816
-rw-r--r--languages/messages/MessagesLa.php2318
-rw-r--r--languages/messages/MessagesLad.php1101
-rw-r--r--languages/messages/MessagesLb.php3843
-rw-r--r--languages/messages/MessagesLbe.php76
-rw-r--r--languages/messages/MessagesLez.php1307
-rw-r--r--languages/messages/MessagesLfn.php924
-rw-r--r--languages/messages/MessagesLg.php1356
-rw-r--r--languages/messages/MessagesLi.php3518
-rw-r--r--languages/messages/MessagesLij.php1329
-rw-r--r--languages/messages/MessagesLiv.php752
-rw-r--r--languages/messages/MessagesLmo.php1261
-rw-r--r--languages/messages/MessagesLn.php719
-rw-r--r--languages/messages/MessagesLo.php865
-rw-r--r--languages/messages/MessagesLoz.php1072
-rw-r--r--languages/messages/MessagesLrc.php14
-rw-r--r--languages/messages/MessagesLt.php3763
-rw-r--r--languages/messages/MessagesLtg.php868
-rw-r--r--languages/messages/MessagesLus.php1939
-rw-r--r--languages/messages/MessagesLv.php3192
-rw-r--r--languages/messages/MessagesLzh.php2742
-rw-r--r--languages/messages/MessagesLzz.php728
-rw-r--r--languages/messages/MessagesMai.php3461
-rw-r--r--languages/messages/MessagesMap_bms.php1844
-rw-r--r--languages/messages/MessagesMdf.php2707
-rw-r--r--languages/messages/MessagesMg.php3390
-rw-r--r--languages/messages/MessagesMhr.php1064
-rw-r--r--languages/messages/MessagesMi.php134
-rw-r--r--languages/messages/MessagesMin.php2622
-rw-r--r--languages/messages/MessagesMk.php4130
-rw-r--r--languages/messages/MessagesMl.php3882
-rw-r--r--languages/messages/MessagesMn.php3423
-rw-r--r--languages/messages/MessagesMo.php558
-rw-r--r--languages/messages/MessagesMr.php3786
-rw-r--r--languages/messages/MessagesMrj.php689
-rw-r--r--languages/messages/MessagesMs.php3877
-rw-r--r--languages/messages/MessagesMt.php3578
-rw-r--r--languages/messages/MessagesMwl.php1144
-rw-r--r--languages/messages/MessagesMy.php1867
-rw-r--r--languages/messages/MessagesMyv.php2055
-rw-r--r--languages/messages/MessagesMzn.php992
-rw-r--r--languages/messages/MessagesNa.php119
-rw-r--r--languages/messages/MessagesNah.php1437
-rw-r--r--languages/messages/MessagesNan.php1152
-rw-r--r--languages/messages/MessagesNap.php763
-rw-r--r--languages/messages/MessagesNb.php3883
-rw-r--r--languages/messages/MessagesNds.php2898
-rw-r--r--languages/messages/MessagesNds_nl.php3971
-rw-r--r--languages/messages/MessagesNe.php3419
-rw-r--r--languages/messages/MessagesNew.php478
-rw-r--r--languages/messages/MessagesNiu.php273
-rw-r--r--languages/messages/MessagesNl.php4018
-rw-r--r--languages/messages/MessagesNl_informal.php638
-rw-r--r--languages/messages/MessagesNn.php3767
-rw-r--r--languages/messages/MessagesNov.php451
-rw-r--r--languages/messages/MessagesNso.php1234
-rw-r--r--languages/messages/MessagesNv.php348
-rw-r--r--languages/messages/MessagesNy.php33
-rw-r--r--languages/messages/MessagesOc.php3760
-rw-r--r--languages/messages/MessagesOm.php105
-rw-r--r--languages/messages/MessagesOr.php3785
-rw-r--r--languages/messages/MessagesOs.php1691
-rw-r--r--languages/messages/MessagesPa.php2686
-rw-r--r--languages/messages/MessagesPag.php403
-rw-r--r--languages/messages/MessagesPam.php2310
-rw-r--r--languages/messages/MessagesPap.php409
-rw-r--r--languages/messages/MessagesPcd.php1096
-rw-r--r--languages/messages/MessagesPdc.php960
-rw-r--r--languages/messages/MessagesPdt.php595
-rw-r--r--languages/messages/MessagesPfl.php1175
-rw-r--r--languages/messages/MessagesPi.php47
-rw-r--r--languages/messages/MessagesPih.php73
-rw-r--r--languages/messages/MessagesPl.php3987
-rw-r--r--languages/messages/MessagesPms.php3916
-rw-r--r--languages/messages/MessagesPnb.php3523
-rw-r--r--languages/messages/MessagesPnt.php1377
-rw-r--r--languages/messages/MessagesPrg.php2663
-rw-r--r--languages/messages/MessagesPs.php2627
-rw-r--r--languages/messages/MessagesPt.php3919
-rw-r--r--languages/messages/MessagesPt_br.php3920
-rw-r--r--languages/messages/MessagesQqq.php10526
-rw-r--r--languages/messages/MessagesQu.php3695
-rw-r--r--languages/messages/MessagesQug.php866
-rw-r--r--languages/messages/MessagesRgn.php725
-rw-r--r--languages/messages/MessagesRif.php801
-rw-r--r--languages/messages/MessagesRm.php3710
-rw-r--r--languages/messages/MessagesRmy.php508
-rw-r--r--languages/messages/MessagesRo.php3895
-rw-r--r--languages/messages/MessagesRoa_tara.php4175
-rw-r--r--languages/messages/MessagesRu.php4018
-rw-r--r--languages/messages/MessagesRue.php3803
-rw-r--r--languages/messages/MessagesRup.php222
-rw-r--r--languages/messages/MessagesRuq.php3
-rw-r--r--languages/messages/MessagesRuq_cyrl.php341
-rw-r--r--languages/messages/MessagesRuq_latn.php341
-rw-r--r--languages/messages/MessagesSa.php3648
-rw-r--r--languages/messages/MessagesSah.php3843
-rw-r--r--languages/messages/MessagesSat.php1195
-rw-r--r--languages/messages/MessagesSc.php1477
-rw-r--r--languages/messages/MessagesScn.php2886
-rw-r--r--languages/messages/MessagesSco.php1549
-rw-r--r--languages/messages/MessagesSd.php830
-rw-r--r--languages/messages/MessagesSdc.php1909
-rw-r--r--languages/messages/MessagesSe.php1345
-rw-r--r--languages/messages/MessagesSei.php1041
-rw-r--r--languages/messages/MessagesSg.php314
-rw-r--r--languages/messages/MessagesSgs.php1889
-rw-r--r--languages/messages/MessagesSh.php3844
-rw-r--r--languages/messages/MessagesShi.php1328
-rw-r--r--languages/messages/MessagesSi.php3811
-rw-r--r--languages/messages/MessagesSk.php3866
-rw-r--r--languages/messages/MessagesSl.php3932
-rw-r--r--languages/messages/MessagesSli.php2308
-rw-r--r--languages/messages/MessagesSm.php225
-rw-r--r--languages/messages/MessagesSma.php874
-rw-r--r--languages/messages/MessagesSn.php191
-rw-r--r--languages/messages/MessagesSo.php1530
-rw-r--r--languages/messages/MessagesSq.php3616
-rw-r--r--languages/messages/MessagesSr.php7
-rw-r--r--languages/messages/MessagesSr_ec.php4093
-rw-r--r--languages/messages/MessagesSr_el.php3998
-rw-r--r--languages/messages/MessagesSrn.php1077
-rw-r--r--languages/messages/MessagesSs.php307
-rw-r--r--languages/messages/MessagesSt.php164
-rw-r--r--languages/messages/MessagesStq.php3201
-rw-r--r--languages/messages/MessagesSu.php2904
-rw-r--r--languages/messages/MessagesSv.php3906
-rw-r--r--languages/messages/MessagesSw.php3052
-rw-r--r--languages/messages/MessagesSzl.php2740
-rw-r--r--languages/messages/MessagesTa.php3605
-rw-r--r--languages/messages/MessagesTcy.php969
-rw-r--r--languages/messages/MessagesTe.php3464
-rw-r--r--languages/messages/MessagesTet.php925
-rw-r--r--languages/messages/MessagesTg.php3
-rw-r--r--languages/messages/MessagesTg_cyrl.php2455
-rw-r--r--languages/messages/MessagesTg_latn.php2300
-rw-r--r--languages/messages/MessagesTh.php3654
-rw-r--r--languages/messages/MessagesTi.php195
-rw-r--r--languages/messages/MessagesTk.php3074
-rw-r--r--languages/messages/MessagesTl.php3943
-rw-r--r--languages/messages/MessagesTly.php894
-rw-r--r--languages/messages/MessagesTn.php174
-rw-r--r--languages/messages/MessagesTo.php1223
-rw-r--r--languages/messages/MessagesTokipona.php168
-rw-r--r--languages/messages/MessagesTpi.php832
-rw-r--r--languages/messages/MessagesTr.php3760
-rw-r--r--languages/messages/MessagesTru.php875
-rw-r--r--languages/messages/MessagesTs.php911
-rw-r--r--languages/messages/MessagesTt.php7
-rw-r--r--languages/messages/MessagesTt_cyrl.php2394
-rw-r--r--languages/messages/MessagesTt_latn.php2081
-rw-r--r--languages/messages/MessagesTy.php160
-rw-r--r--languages/messages/MessagesTyv.php1314
-rw-r--r--languages/messages/MessagesUdm.php268
-rw-r--r--languages/messages/MessagesUg.php3
-rw-r--r--languages/messages/MessagesUg_arab.php3846
-rw-r--r--languages/messages/MessagesUg_latn.php235
-rw-r--r--languages/messages/MessagesUk.php4111
-rw-r--r--languages/messages/MessagesUr.php1486
-rw-r--r--languages/messages/MessagesUz.php1637
-rw-r--r--languages/messages/MessagesVe.php45
-rw-r--r--languages/messages/MessagesVec.php3730
-rw-r--r--languages/messages/MessagesVep.php2965
-rw-r--r--languages/messages/MessagesVi.php4212
-rw-r--r--languages/messages/MessagesVls.php194
-rw-r--r--languages/messages/MessagesVmf.php986
-rw-r--r--languages/messages/MessagesVo.php2799
-rw-r--r--languages/messages/MessagesVot.php944
-rw-r--r--languages/messages/MessagesVro.php2188
-rw-r--r--languages/messages/MessagesWa.php2291
-rw-r--r--languages/messages/MessagesWar.php2512
-rw-r--r--languages/messages/MessagesWo.php2080
-rw-r--r--languages/messages/MessagesWuu.php1821
-rw-r--r--languages/messages/MessagesXal.php1192
-rw-r--r--languages/messages/MessagesXh.php168
-rw-r--r--languages/messages/MessagesXmf.php902
-rw-r--r--languages/messages/MessagesYi.php3792
-rw-r--r--languages/messages/MessagesYo.php3613
-rw-r--r--languages/messages/MessagesYue.php3098
-rw-r--r--languages/messages/MessagesZa.php336
-rw-r--r--languages/messages/MessagesZea.php1332
-rw-r--r--languages/messages/MessagesZh.php19
-rw-r--r--languages/messages/MessagesZh_cn.php16
-rw-r--r--languages/messages/MessagesZh_hans.php3882
-rw-r--r--languages/messages/MessagesZh_hant.php3859
-rw-r--r--languages/messages/MessagesZh_hk.php98
-rw-r--r--languages/messages/MessagesZh_mo.php3
-rw-r--r--languages/messages/MessagesZh_my.php3
-rw-r--r--languages/messages/MessagesZh_sg.php14
-rw-r--r--languages/messages/MessagesZh_tw.php854
-rw-r--r--languages/messages/MessagesZu.php377
-rw-r--r--languages/utils/CLDRPluralRuleConverter.php322
-rw-r--r--languages/utils/CLDRPluralRuleConverterExpression.php41
-rw-r--r--languages/utils/CLDRPluralRuleConverterFragment.php34
-rw-r--r--languages/utils/CLDRPluralRuleConverterOperator.php114
-rw-r--r--languages/utils/CLDRPluralRuleError.php20
-rw-r--r--languages/utils/CLDRPluralRuleEvaluator.php555
-rw-r--r--languages/utils/CLDRPluralRuleEvaluatorRange.php110
785 files changed, 561222 insertions, 703962 deletions
diff --git a/languages/ConverterRule.php b/languages/ConverterRule.php
new file mode 100644
index 00000000..a5e960f9
--- /dev/null
+++ b/languages/ConverterRule.php
@@ -0,0 +1,502 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Language
+ */
+
+/**
+ * Parser for rules of language conversion , parse rules in -{ }- tag.
+ * @ingroup Language
+ * @author fdcn <fdcn64@gmail.com>, PhiLiP <philip.npc@gmail.com>
+ */
+class ConverterRule {
+ public $mText; // original text in -{text}-
+ public $mConverter; // LanguageConverter object
+ public $mRuleDisplay = '';
+ public $mRuleTitle = false;
+ public $mRules = '';// string : the text of the rules
+ public $mRulesAction = 'none';
+ public $mFlags = array();
+ public $mVariantFlags = array();
+ public $mConvTable = array();
+ public $mBidtable = array();// array of the translation in each variant
+ public $mUnidtable = array();// array of the translation in each variant
+
+ /**
+ * Constructor
+ *
+ * @param string $text The text between -{ and }-
+ * @param LanguageConverter $converter
+ */
+ public function __construct( $text, $converter ) {
+ $this->mText = $text;
+ $this->mConverter = $converter;
+ }
+
+ /**
+ * Check if variants array in convert array.
+ *
+ * @param array|string $variants Variant language code
+ * @return string Translated text
+ */
+ 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() {
+ $text = $this->mText;
+ $flags = array();
+ $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;
+ }
+ }
+ $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( '+' => true, 'H' => true );
+ if ( isset( $flags['T'] ) ) {
+ $temp['T'] = true;
+ }
+ if ( isset( $flags['D'] ) ) {
+ $temp['D'] = true;
+ }
+ $flags = $temp;
+ } else {
+ if ( isset( $flags['A'] ) ) {
+ $flags['+'] = true;
+ $flags['S'] = true;
+ }
+ if ( isset( $flags['D'] ) ) {
+ unset( $flags['S'] );
+ }
+ // 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();
+ }
+ }
+ $this->mVariantFlags = $variantFlags;
+ $this->mRules = $text;
+ $this->mFlags = $flags;
+ }
+
+ /**
+ * Generate conversion table.
+ * @private
+ */
+ function parseRules() {
+ $rules = $this->mRules;
+ $bidtable = array();
+ $unidtable = array();
+ $variants = $this->mConverter->mVariants;
+ $varsep_pattern = $this->mConverter->getVarSeparatorPattern();
+
+ // Split according to $varsep_pattern, but ignore semicolons from HTML entities
+ $rules = preg_replace( '/(&[#a-zA-Z0-9]+);/', "$1\x01", $rules );
+ $choice = preg_split( $varsep_pattern, $rules );
+ $choice = str_replace( "\x01", ';', $choice );
+
+ 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 ) ) {
+ $bidtable[$v] = $to;
+ } 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 ( !isset( $this->mConverter->mVariantNames[$v] ) ) {
+ $bidtable = array();
+ $unidtable = array();
+ break;
+ }
+ }
+ $this->mBidtable = $bidtable;
+ $this->mUnidtable = $unidtable;
+ }
+
+ /**
+ * @private
+ *
+ * @return string
+ */
+ 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";
+ }
+ }
+ return $text;
+ }
+
+ /**
+ * Parse rules conversion.
+ * @private
+ *
+ * @param string $variant
+ *
+ * @return string
+ */
+ function getRuleConvertedStr( $variant ) {
+ $bidtable = $this->mBidtable;
+ $unidtable = $this->mUnidtable;
+
+ if ( count( $bidtable ) + count( $unidtable ) == 0 ) {
+ return $this->mRules;
+ } else {
+ // display current variant in bidirectional array
+ $disp = $this->getTextInBidtable( $variant );
+ // or display current variant in fallbacks
+ if ( !$disp ) {
+ $disp = $this->getTextInBidtable(
+ $this->mConverter->getVariantFallbacks( $variant ) );
+ }
+ // or display current variant in unidirectional array
+ 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 );
+ $disp = $disp[0];
+ } else {
+ $disp = array_values( $unidtable );
+ $disp = array_values( $disp[0] );
+ $disp = $disp[0];
+ }
+ }
+ return $disp;
+ }
+ }
+
+ /**
+ * Similar to getRuleConvertedStr(), but this prefers to use original
+ * page title if $variant === $this->mConverter->mMainLanguageCode
+ * and may return false in this case (so this title conversion rule
+ * will be ignored and the original title is shown).
+ *
+ * @since 1.22
+ * @param string $variant The variant code to display page title in
+ * @return string|bool The converted title or false if just page name
+ */
+ function getRuleConvertedTitle( $variant ) {
+ if ( $variant === $this->mConverter->mMainLanguageCode ) {
+ // If a string targeting exactly this variant is set,
+ // use it. Otherwise, just return false, so the real
+ // page name can be shown (and because variant === main,
+ // there'll be no further automatic conversion).
+ $disp = $this->getTextInBidtable( $variant );
+ if ( $disp ) {
+ return $disp;
+ }
+ if ( array_key_exists( $variant, $this->mUnidtable ) ) {
+ $disp = array_values( $this->mUnidtable[$variant] );
+ $disp = $disp[0];
+ }
+ // Assigned above or still false.
+ return $disp;
+ } else {
+ return $this->getRuleConvertedStr( $variant );
+ }
+ }
+
+ /**
+ * Generate conversion table for all text.
+ * @private
+ */
+ 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 ) {
+ /* for bidirectional array
+ fill in the missing variants, if any,
+ with fallbacks */
+ if ( !isset( $bidtable[$v] ) ) {
+ $variantFallbacks =
+ $this->mConverter->getVariantFallbacks( $v );
+ $vf = $this->getTextInBidtable( $variantFallbacks );
+ if ( $vf ) {
+ $bidtable[$v] = $vf;
+ }
+ }
+
+ 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];
+ }
+ if ( $manLevel[$vo] == 'bidirectional' ) {
+ $this->mConvTable[$vo][$bidtable[$v]] = $bidtable[$vo];
+ }
+ }
+ $vmarked[] = $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.
+ * @param string $variant Variant language code
+ */
+ public function parse( $variant = null ) {
+ if ( !$variant ) {
+ $variant = $this->mConverter->getPreferredVariant();
+ }
+
+ $this->parseFlags();
+ $flags = $this->mFlags;
+
+ // convert to specified variant
+ // syntax: -{zh-hans;zh-hant[;...]|<text to convert>}-
+ 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,
+ // then we check its fallback variants.
+ $variantFallbacks =
+ $this->mConverter->getVariantFallbacks( $variant );
+ if ( is_array( $variantFallbacks ) ) {
+ foreach ( $variantFallbacks as $variantFallback ) {
+ // if current variant's fallback exist in flags
+ if ( isset( $this->mVariantFlags[$variantFallback] ) ) {
+ // then convert <text to convert> to fallback language
+ $this->mRules =
+ $this->mConverter->autoConvert( $this->mRules,
+ $variantFallback );
+ break;
+ }
+ }
+ }
+ }
+ $this->mFlags = $flags = array( 'R' => true );
+ }
+
+ 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 ( !$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 ) {
+ $this->mBidtable[$v] = $rules;
+ }
+ } 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->getRuleConvertedTitle( $variant );
+ $this->mRuleDisplay = '';
+ break;
+ default:
+ // ignore unknown flags (but see error case below)
+ }
+ }
+ if ( $this->mRuleDisplay === false ) {
+ $this->mRuleDisplay = '<span class="error">'
+ . wfMessage( 'converter-manual-rule-error' )->inContentLanguage()->escaped()
+ . '</span>';
+ }
+
+ $this->generateConvTable();
+ }
+
+ /**
+ * @todo FIXME: code this function :)
+ */
+ public function hasRules() {
+ // TODO:
+ }
+
+ /**
+ * Get display text on markup -{...}-
+ * @return string
+ */
+ public function getDisplay() {
+ return $this->mRuleDisplay;
+ }
+
+ /**
+ * Get converted title.
+ * @return string
+ */
+ public function getTitle() {
+ return $this->mRuleTitle;
+ }
+
+ /**
+ * Return how deal with conversion rules.
+ * @return string
+ */
+ public function getRulesAction() {
+ return $this->mRulesAction;
+ }
+
+ /**
+ * Get conversion table. (bidirectional and unidirectional
+ * conversion table)
+ * @return array
+ */
+ public function getConvTable() {
+ return $this->mConvTable;
+ }
+
+ /**
+ * Get conversion rules string.
+ * @return string
+ */
+ public function getRules() {
+ return $this->mRules;
+ }
+
+ /**
+ * Get conversion flags.
+ * @return array
+ */
+ public function getFlags() {
+ return $this->mFlags;
+ }
+}
diff --git a/languages/FakeConverter.php b/languages/FakeConverter.php
new file mode 100644
index 00000000..47d24dc4
--- /dev/null
+++ b/languages/FakeConverter.php
@@ -0,0 +1,122 @@
+<?php
+/**
+ * Internationalisation code.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Language
+ */
+
+/**
+ * A fake language converter
+ *
+ * @ingroup Language
+ */
+class FakeConverter {
+ /**
+ * @var Language
+ */
+ public $mLang;
+
+ function __construct( $langobj ) {
+ $this->mLang = $langobj;
+ }
+
+ function autoConvert( $text, $variant = false ) {
+ return $text;
+ }
+
+ function autoConvertToAllVariants( $text ) {
+ return array( $this->mLang->getCode() => $text );
+ }
+
+ function convert( $t ) {
+ return $t;
+ }
+
+ function convertTo( $text, $variant ) {
+ return $text;
+ }
+
+ /**
+ * @param Title $t
+ * @return mixed
+ */
+ function convertTitle( $t ) {
+ return $t->getPrefixedText();
+ }
+
+ function convertNamespace( $ns ) {
+ return $this->mLang->getFormattedNsText( $ns );
+ }
+
+ function getVariants() {
+ return array( $this->mLang->getCode() );
+ }
+
+ function getVariantFallbacks( $variant ) {
+ return $this->mLang->getCode();
+ }
+
+ function getPreferredVariant() {
+ return $this->mLang->getCode();
+ }
+
+ function getDefaultVariant() {
+ return $this->mLang->getCode();
+ }
+
+ function getURLVariant() {
+ return '';
+ }
+
+ function getConvRuleTitle() {
+ return false;
+ }
+
+ function findVariantLink( &$l, &$n, $ignoreOtherCond = false ) {
+ }
+
+ function getExtraHashOptions() {
+ return '';
+ }
+
+ function getParsedTitle() {
+ return '';
+ }
+
+ function markNoConversion( $text, $noParse = false ) {
+ return $text;
+ }
+
+ function convertCategoryKey( $key ) {
+ return $key;
+ }
+
+ /** @deprecated since 1.22 is no longer used */
+ function armourMath( $text ) {
+ return $text;
+ }
+
+ function validateVariant( $variant = null ) {
+ return $variant === $this->mLang->getCode() ? $variant : null;
+ }
+
+ function translate( $text, $variant ) {
+ return $text;
+ }
+}
diff --git a/languages/Language.php b/languages/Language.php
index 11d91036..ad198c35 100644
--- a/languages/Language.php
+++ b/languages/Language.php
@@ -35,46 +35,10 @@ if ( function_exists( 'mb_strtoupper' ) ) {
}
/**
- * a fake language converter
- *
- * @ingroup Language
- */
-class FakeConverter {
- /**
- * @var Language
- */
- public $mLang;
- function __construct( $langobj ) { $this->mLang = $langobj; }
- function autoConvert( $text, $variant = false ) { return $text; }
- function autoConvertToAllVariants( $text ) { return array( $this->mLang->getCode() => $text ); }
- function convert( $t ) { return $t; }
- function convertTo( $text, $variant ) { return $text; }
- function convertTitle( $t ) { return $t->getPrefixedText(); }
- function convertNamespace( $ns ) { return $this->mLang->getFormattedNsText( $ns ); }
- function getVariants() { return array( $this->mLang->getCode() ); }
- function getVariantFallbacks( $variant ) { return $this->mLang->getCode(); }
- function getPreferredVariant() { return $this->mLang->getCode(); }
- function getDefaultVariant() { return $this->mLang->getCode(); }
- function getURLVariant() { return ''; }
- function getConvRuleTitle() { return false; }
- function findVariantLink( &$l, &$n, $ignoreOtherCond = false ) { }
- function getExtraHashOptions() { return ''; }
- function getParsedTitle() { return ''; }
- function markNoConversion( $text, $noParse = false ) { return $text; }
- function convertCategoryKey( $key ) { return $key; }
- function convertLinkToAllVariants( $text ) { return $this->autoConvertToAllVariants( $text ); }
- /** @deprecated since 1.22 is no longer used */
- function armourMath( $text ) { return $text; }
- function validateVariant( $variant = null ) { return $variant === $this->mLang->getCode() ? $variant : null; }
- function translate( $text, $variant ) { return $text; }
-}
-
-/**
* Internationalisation code
* @ingroup Language
*/
class Language {
-
/**
* @var LanguageConverter
*/
@@ -181,7 +145,7 @@ class Language {
/**
* Get a cached or new language object for a given language code
- * @param $code String
+ * @param string $code
* @return Language
*/
static function factory( $code ) {
@@ -206,15 +170,15 @@ class Language {
/**
* Create a language object for a given language code
- * @param $code String
+ * @param string $code
* @throws MWException
* @return Language
*/
protected static function newFromCode( $code ) {
// Protect against path traversal below
if ( !Language::isValidCode( $code )
- || strcspn( $code, ":/\\\000" ) !== strlen( $code ) )
- {
+ || strcspn( $code, ":/\\\000" ) !== strlen( $code )
+ ) {
throw new MWException( "Invalid language code \"$code\"" );
}
@@ -262,7 +226,10 @@ class Language {
* @since 1.21
*/
public static function isSupportedLanguage( $code ) {
- return $code === strtolower( $code ) && is_readable( self::getMessagesFileName( $code ) );
+ return self::isValidBuiltInCode( $code )
+ && ( is_readable( self::getMessagesFileName( $code ) )
+ || is_readable( self::getJsonMessagesFileName( $code ) )
+ );
}
/**
@@ -274,8 +241,8 @@ class Language {
* Based on regexes by Mark Davis of the Unicode Consortium:
* http://unicode.org/repos/cldr/trunk/tools/java/org/unicode/cldr/util/data/langtagRegex.txt
*
- * @param $code string
- * @param $lenient boolean Whether to allow '_' as separator. The default is only '-'.
+ * @param string $code
+ * @param bool $lenient Whether to allow '_' as separator. The default is only '-'.
*
* @return bool
* @since 1.21
@@ -330,7 +297,7 @@ class Language {
* not it exists. This includes codes which are used solely for
* customisation via the MediaWiki namespace.
*
- * @param $code string
+ * @param string $code
*
* @return bool
*/
@@ -352,9 +319,9 @@ class Language {
/**
* Returns true if a language code is of a valid form for the purposes of
- * internal customisation of MediaWiki, via Messages*.php.
+ * internal customisation of MediaWiki, via Messages*.php or *.json.
*
- * @param $code string
+ * @param string $code
*
* @throws MWException
* @since 1.18
@@ -372,13 +339,13 @@ class Language {
throw new MWException( __METHOD__ . " must be passed a string, $type given$addmsg" );
}
- return (bool)preg_match( '/^[a-z0-9-]{2,}$/i', $code );
+ return (bool)preg_match( '/^[a-z0-9-]{2,}$/', $code );
}
/**
* Returns true if a language code is an IETF tag known to MediaWiki.
*
- * @param $code string
+ * @param string $tag
*
* @since 1.21
* @return bool
@@ -407,8 +374,8 @@ class Language {
}
/**
- * @param $code
- * @return String Name of the language class
+ * @param string $code
+ * @return string Name of the language class
*/
public static function classFromCode( $code ) {
if ( $code == 'en' ) {
@@ -421,7 +388,7 @@ class Language {
/**
* Includes language class files
*
- * @param $class string Name of the language class
+ * @param string $class Name of the language class
*/
public static function preloadLanguageClass( $class ) {
global $IP;
@@ -473,16 +440,7 @@ class Language {
* Hook which will be called if this is the content language.
* Descendants can use this to register hook functions or modify globals
*/
- function initContLang() { }
-
- /**
- * Same as getFallbacksFor for current language.
- * @return array|bool
- * @deprecated in 1.19
- */
- function getFallbackLanguageCode() {
- wfDeprecated( __METHOD__, '1.19' );
- return self::getFallbackFor( $this->mCode );
+ function initContLang() {
}
/**
@@ -538,12 +496,13 @@ class Language {
wfRunHooks( 'LanguageGetNamespaces', array( &$this->namespaceNames ) );
}
+
return $this->namespaceNames;
}
/**
* Arbitrarily set all of the namespace names at once. Mainly used for testing
- * @param $namespaces Array of namespaces (id => name)
+ * @param array $namespaces Array of namespaces (id => name)
*/
public function setNamespaces( array $namespaces ) {
$this->namespaceNames = $namespaces;
@@ -582,11 +541,12 @@ class Language {
* echo $mw_ns; // prints 'MediaWiki'
* </code>
*
- * @param $index Int: the array key of the namespace to return
- * @return mixed, string if the namespace value exists, otherwise false
+ * @param int $index The array key of the namespace to return
+ * @return string|bool String if the namespace value exists, otherwise false
*/
function getNsText( $index ) {
$ns = $this->getNamespaces();
+
return isset( $ns[$index] ) ? $ns[$index] : false;
}
@@ -605,26 +565,30 @@ class Language {
*/
function getFormattedNsText( $index ) {
$ns = $this->getNsText( $index );
+
return strtr( $ns, '_', ' ' );
}
/**
* Returns gender-dependent namespace alias if available.
- * @param $index Int: namespace index
- * @param $gender String: gender key (male, female... )
- * @return String
+ * See https://www.mediawiki.org/wiki/Manual:$wgExtraGenderNamespaces
+ * @param int $index Namespace index
+ * @param string $gender Gender key (male, female... )
+ * @return string
* @since 1.18
*/
function getGenderNsText( $index, $gender ) {
global $wgExtraGenderNamespaces;
- $ns = $wgExtraGenderNamespaces + self::$dataCache->getItem( $this->mCode, 'namespaceGenderAliases' );
+ $ns = $wgExtraGenderNamespaces +
+ self::$dataCache->getItem( $this->mCode, 'namespaceGenderAliases' );
+
return isset( $ns[$index][$gender] ) ? $ns[$index][$gender] : $this->getNsText( $index );
}
/**
- * Whether this language makes distinguishes genders for example in
- * namespaces.
+ * Whether this language uses gender-dependent namespace aliases.
+ * See https://www.mediawiki.org/wiki/Manual:$wgExtraGenderNamespaces
* @return bool
* @since 1.18
*/
@@ -649,8 +613,8 @@ class Language {
* Only matches namespace names for the current language, not the
* canonical ones defined in Namespace.php.
*
- * @param $text String
- * @return mixed An integer if $text is a valid value otherwise false
+ * @param string $text
+ * @return int|bool An integer if $text is a valid value otherwise false
*/
function getLocalNsIndex( $text ) {
$lctext = $this->lc( $text );
@@ -677,7 +641,8 @@ class Language {
}
global $wgExtraGenderNamespaces;
- $genders = $wgExtraGenderNamespaces + (array)self::$dataCache->getItem( $this->mCode, 'namespaceGenderAliases' );
+ $genders = $wgExtraGenderNamespaces +
+ (array)self::$dataCache->getItem( $this->mCode, 'namespaceGenderAliases' );
foreach ( $genders as $index => $forms ) {
foreach ( $forms as $alias ) {
$aliases[$alias] = $index;
@@ -697,6 +662,7 @@ class Language {
$this->namespaceAliases = $aliases + $convertedNames;
}
+
return $this->namespaceAliases;
}
@@ -730,8 +696,8 @@ class Language {
* Get a namespace key by value, case insensitive. Canonical namespace
* names override custom ones defined for the current language.
*
- * @param $text String
- * @return mixed An integer if $text is a valid value otherwise false
+ * @param string $text
+ * @return int|bool An integer if $text is a valid value otherwise false
*/
function getNsIndex( $text ) {
$lctext = $this->lc( $text );
@@ -746,8 +712,8 @@ class Language {
/**
* short names for language variants used for language conversion links.
*
- * @param $code String
- * @param $usemsg bool Use the "variantname-xyz" message if it exists
+ * @param string $code
+ * @param bool $usemsg Use the "variantname-xyz" message if it exists
* @return string
*/
function getVariantname( $code, $usemsg = true ) {
@@ -765,7 +731,9 @@ class Language {
}
/**
- * @param $name string
+ * @deprecated since 1.24, doesn't handle conflicting aliases. Use
+ * SpecialPageFactory::getLocalNameFor instead.
+ * @param string $name
* @return string
*/
function specialPage( $name ) {
@@ -811,7 +779,7 @@ class Language {
}
/**
- * @param $image
+ * @param string $image
* @return array|null
*/
function getImageFile( $image ) {
@@ -820,13 +788,21 @@ class Language {
/**
* @return array
+ * @since 1.24
+ */
+ function getImageFiles() {
+ return self::$dataCache->getItem( $this->mCode, 'imageFiles' );
+ }
+
+ /**
+ * @return array
*/
function getExtraUserToggles() {
return (array)self::$dataCache->getItem( $this->mCode, 'extraUserToggles' );
}
/**
- * @param $tog
+ * @param string $tog
* @return string
*/
function getUserToggle( $tog ) {
@@ -838,10 +814,10 @@ class Language {
* Only those defined in MediaWiki, no other data like CLDR.
* If $customisedOnly is true, only returns codes with a messages file
*
- * @param $customisedOnly bool
+ * @param bool $customisedOnly
*
* @return array
- * @deprecated in 1.20, use fetchLanguageNames()
+ * @deprecated since 1.20, use fetchLanguageNames()
*/
public static function getLanguageNames( $customisedOnly = false ) {
return self::fetchLanguageNames( null, $customisedOnly ? 'mwfile' : 'mw' );
@@ -851,10 +827,10 @@ class Language {
* Get translated language names. This is done on best effort and
* by default this is exactly the same as Language::getLanguageNames.
* The CLDR extension provides translated names.
- * @param $code String Language code.
- * @return Array language code => language name
+ * @param string $code Language code.
+ * @return array Language code => language name
* @since 1.18.0
- * @deprecated in 1.20, use fetchLanguageNames()
+ * @deprecated since 1.20, use fetchLanguageNames()
*/
public static function getTranslatedLanguageNames( $code ) {
return self::fetchLanguageNames( $code, 'all' );
@@ -862,13 +838,13 @@ class Language {
/**
* Get an array of language names, indexed by code.
- * @param $inLanguage null|string: Code of language in which to return the names
+ * @param null|string $inLanguage Code of language in which to return the names
* Use null for autonyms (native names)
- * @param $include string:
+ * @param string $include One of:
* 'all' all available languages
* 'mw' only if the language is defined in MediaWiki or wgExtraLanguageNames (default)
* 'mwfile' only if the language is in 'mw' *and* has a message file
- * @return array: language code => language name
+ * @return array Language code => language name
* @since 1.20
*/
public static function fetchLanguageNames( $inLanguage = null, $include = 'mw' ) {
@@ -880,6 +856,11 @@ class Language {
include "$IP/languages/Names.php";
}
+ // If passed an invalid language code to use, fallback to en
+ if ( $inLanguage !== null && !Language::isValidCode( $inLanguage ) ) {
+ $inLanguage = 'en';
+ }
+
$names = array();
if ( $inLanguage ) {
@@ -911,24 +892,29 @@ class Language {
# We do this using a foreach over the codes instead of a directory
# loop so that messages files in extensions will work correctly.
foreach ( $returnMw as $code => $value ) {
- if ( is_readable( self::getMessagesFileName( $code ) ) ) {
+ if ( is_readable( self::getMessagesFileName( $code ) )
+ || is_readable( self::getJsonMessagesFileName( $code ) )
+ ) {
$namesMwFile[$code] = $names[$code];
}
}
+
return $namesMwFile;
}
+
# 'mw' option; default if it's not one of the other two options (all/mwfile)
return $returnMw;
}
/**
- * @param $code string: The code of the language for which to get the name
- * @param $inLanguage null|string: Code of language in which to return the name (null for autonyms)
- * @param $include string: 'all', 'mw' or 'mwfile'; see fetchLanguageNames()
- * @return string: Language name or empty
+ * @param string $code The code of the language for which to get the name
+ * @param null|string $inLanguage Code of language in which to return the name (null for autonyms)
+ * @param string $include 'all', 'mw' or 'mwfile'; see fetchLanguageNames()
+ * @return string Language name or empty
* @since 1.20
*/
public static function fetchLanguageName( $code, $inLanguage = null, $include = 'all' ) {
+ $code = strtolower( $code );
$array = self::fetchLanguageNames( $inLanguage, $include );
return !array_key_exists( $code, $array ) ? '' : $array[$code];
}
@@ -936,7 +922,7 @@ class Language {
/**
* Get a message from the MediaWiki namespace.
*
- * @param $msg String: message name
+ * @param string $msg Message name
* @return string
*/
function getMessageFromDB( $msg ) {
@@ -946,16 +932,16 @@ class Language {
/**
* Get the native language name of $code.
* Only if defined in MediaWiki, no other data like CLDR.
- * @param $code string
+ * @param string $code
* @return string
- * @deprecated in 1.20, use fetchLanguageName()
+ * @deprecated since 1.20, use fetchLanguageName()
*/
function getLanguageName( $code ) {
return self::fetchLanguageName( $code );
}
/**
- * @param $key string
+ * @param string $key
* @return string
*/
function getMonthName( $key ) {
@@ -974,7 +960,7 @@ class Language {
}
/**
- * @param $key string
+ * @param string $key
* @return string
*/
function getMonthNameGen( $key ) {
@@ -982,7 +968,7 @@ class Language {
}
/**
- * @param $key string
+ * @param string $key
* @return string
*/
function getMonthAbbreviation( $key ) {
@@ -1001,7 +987,7 @@ class Language {
}
/**
- * @param $key string
+ * @param string $key
* @return string
*/
function getWeekdayName( $key ) {
@@ -1009,7 +995,7 @@ class Language {
}
/**
- * @param $key string
+ * @param string $key
* @return string
*/
function getWeekdayAbbreviation( $key ) {
@@ -1017,7 +1003,7 @@ class Language {
}
/**
- * @param $key string
+ * @param string $key
* @return string
*/
function getIranianCalendarMonthName( $key ) {
@@ -1025,7 +1011,7 @@ class Language {
}
/**
- * @param $key string
+ * @param string $key
* @return string
*/
function getHebrewCalendarMonthName( $key ) {
@@ -1033,7 +1019,7 @@ class Language {
}
/**
- * @param $key string
+ * @param string $key
* @return string
*/
function getHebrewCalendarMonthNameGen( $key ) {
@@ -1041,7 +1027,7 @@ class Language {
}
/**
- * @param $key string
+ * @param string $key
* @return string
*/
function getHijriCalendarMonthName( $key ) {
@@ -1049,6 +1035,23 @@ class Language {
}
/**
+ * Pass through result from $dateTimeObj->format()
+ * @param DateTime|bool|null &$dateTimeObj
+ * @param string $ts
+ * @param DateTimeZone|bool|null $zone
+ * @param string $code
+ * @return string
+ */
+ private static function dateTimeObjFormat( &$dateTimeObj, $ts, $zone, $code ) {
+ if ( !$dateTimeObj ) {
+ $dateTimeObj = DateTime::createFromFormat(
+ 'YmdHis', $ts, $zone ?: new DateTimeZone( 'UTC' )
+ );
+ }
+ return $dateTimeObj->format( $code );
+ }
+
+ /**
* This is a workalike of PHP's date() function, but with better
* internationalisation, a reduced set of format characters, and a better
* escaping format.
@@ -1103,17 +1106,19 @@ class Language {
* time zone, if any. Note that the format characters crUeIOPTZ will assume
* $ts is UTC if $zone is not given.
*
- * @param $format String
- * @param $ts String: 14-character timestamp
+ * @param string $format
+ * @param string $ts 14-character timestamp
* YYYYMMDDHHMMSS
* 01234567890123
- * @param $zone DateTimeZone: Timezone of $ts
+ * @param DateTimeZone $zone Timezone of $ts
+ * @param[out] int $ttl The amount of time (in seconds) the output may be cached for.
+ * Only makes sense if $ts is the current time.
* @todo handling of "o" format character for Iranian, Hebrew, Hijri & Thai?
*
* @throws MWException
* @return string
*/
- function sprintfDate( $format, $ts, DateTimeZone $zone = null ) {
+ function sprintfDate( $format, $ts, DateTimeZone $zone = null, &$ttl = null ) {
$s = '';
$raw = false;
$roman = false;
@@ -1127,6 +1132,25 @@ class Language {
$minguo = false;
$tenno = false;
+ $usedSecond = false;
+ $usedMinute = false;
+ $usedHour = false;
+ $usedAMPM = false;
+ $usedDay = false;
+ $usedWeek = false;
+ $usedMonth = false;
+ $usedYear = false;
+ $usedISOYear = false;
+ $usedIsLeapYear = false;
+
+ $usedHebrewMonth = false;
+ $usedIranianMonth = false;
+ $usedHijriMonth = false;
+ $usedHebrewYear = false;
+ $usedIranianYear = false;
+ $usedHijriYear = false;
+ $usedTennoYear = false;
+
if ( strlen( $ts ) !== 14 ) {
throw new MWException( __METHOD__ . ": The timestamp $ts should have 14 characters" );
}
@@ -1135,14 +1159,21 @@ class Language {
throw new MWException( __METHOD__ . ": The timestamp $ts should be a number" );
}
- for ( $p = 0; $p < strlen( $format ); $p++ ) {
+ $formatLength = strlen( $format );
+ for ( $p = 0; $p < $formatLength; $p++ ) {
$num = false;
$code = $format[$p];
- if ( $code == 'x' && $p < strlen( $format ) - 1 ) {
+ if ( $code == 'x' && $p < $formatLength - 1 ) {
$code .= $format[++$p];
}
- if ( ( $code === 'xi' || $code == 'xj' || $code == 'xk' || $code == 'xm' || $code == 'xo' || $code == 'xt' ) && $p < strlen( $format ) - 1 ) {
+ if ( ( $code === 'xi'
+ || $code === 'xj'
+ || $code === 'xk'
+ || $code === 'xm'
+ || $code === 'xo'
+ || $code === 'xt' )
+ && $p < $formatLength - 1 ) {
$code .= $format[++$p];
}
@@ -1163,217 +1194,251 @@ class Language {
$hebrewNum = true;
break;
case 'xg':
+ $usedMonth = true;
$s .= $this->getMonthNameGen( substr( $ts, 4, 2 ) );
break;
case 'xjx':
+ $usedHebrewMonth = true;
if ( !$hebrew ) {
$hebrew = self::tsToHebrew( $ts );
}
$s .= $this->getHebrewCalendarMonthNameGen( $hebrew[1] );
break;
case 'd':
+ $usedDay = true;
$num = substr( $ts, 6, 2 );
break;
case 'D':
- if ( !$dateTimeObj ) {
- $dateTimeObj = DateTime::createFromFormat(
- 'YmdHis', $ts, $zone ?: new DateTimeZone( 'UTC' )
- );
- }
- $s .= $this->getWeekdayAbbreviation( $dateTimeObj->format( 'w' ) + 1 );
+ $usedDay = true;
+ $s .= $this->getWeekdayAbbreviation( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'w' ) + 1 );
break;
case 'j':
+ $usedDay = true;
$num = intval( substr( $ts, 6, 2 ) );
break;
case 'xij':
+ $usedDay = true;
if ( !$iranian ) {
$iranian = self::tsToIranian( $ts );
}
$num = $iranian[2];
break;
case 'xmj':
+ $usedDay = true;
if ( !$hijri ) {
$hijri = self::tsToHijri( $ts );
}
$num = $hijri[2];
break;
case 'xjj':
+ $usedDay = true;
if ( !$hebrew ) {
$hebrew = self::tsToHebrew( $ts );
}
$num = $hebrew[2];
break;
case 'l':
- if ( !$dateTimeObj ) {
- $dateTimeObj = DateTime::createFromFormat(
- 'YmdHis', $ts, $zone ?: new DateTimeZone( 'UTC' )
- );
- }
- $s .= $this->getWeekdayName( $dateTimeObj->format( 'w' ) + 1 );
+ $usedDay = true;
+ $s .= $this->getWeekdayName( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'w' ) + 1 );
break;
case 'F':
+ $usedMonth = true;
$s .= $this->getMonthName( substr( $ts, 4, 2 ) );
break;
case 'xiF':
+ $usedIranianMonth = true;
if ( !$iranian ) {
$iranian = self::tsToIranian( $ts );
}
$s .= $this->getIranianCalendarMonthName( $iranian[1] );
break;
case 'xmF':
+ $usedHijriMonth = true;
if ( !$hijri ) {
$hijri = self::tsToHijri( $ts );
}
$s .= $this->getHijriCalendarMonthName( $hijri[1] );
break;
case 'xjF':
+ $usedHebrewMonth = true;
if ( !$hebrew ) {
$hebrew = self::tsToHebrew( $ts );
}
$s .= $this->getHebrewCalendarMonthName( $hebrew[1] );
break;
case 'm':
+ $usedMonth = true;
$num = substr( $ts, 4, 2 );
break;
case 'M':
+ $usedMonth = true;
$s .= $this->getMonthAbbreviation( substr( $ts, 4, 2 ) );
break;
case 'n':
+ $usedMonth = true;
$num = intval( substr( $ts, 4, 2 ) );
break;
case 'xin':
+ $usedIranianMonth = true;
if ( !$iranian ) {
$iranian = self::tsToIranian( $ts );
}
$num = $iranian[1];
break;
case 'xmn':
+ $usedHijriMonth = true;
if ( !$hijri ) {
$hijri = self::tsToHijri ( $ts );
}
$num = $hijri[1];
break;
case 'xjn':
+ $usedHebrewMonth = true;
if ( !$hebrew ) {
$hebrew = self::tsToHebrew( $ts );
}
$num = $hebrew[1];
break;
case 'xjt':
+ $usedHebrewMonth = true;
if ( !$hebrew ) {
$hebrew = self::tsToHebrew( $ts );
}
$num = $hebrew[3];
break;
case 'Y':
+ $usedYear = true;
$num = substr( $ts, 0, 4 );
break;
case 'xiY':
+ $usedIranianYear = true;
if ( !$iranian ) {
$iranian = self::tsToIranian( $ts );
}
$num = $iranian[0];
break;
case 'xmY':
+ $usedHijriYear = true;
if ( !$hijri ) {
$hijri = self::tsToHijri( $ts );
}
$num = $hijri[0];
break;
case 'xjY':
+ $usedHebrewYear = true;
if ( !$hebrew ) {
$hebrew = self::tsToHebrew( $ts );
}
$num = $hebrew[0];
break;
case 'xkY':
+ $usedYear = true;
if ( !$thai ) {
$thai = self::tsToYear( $ts, 'thai' );
}
$num = $thai[0];
break;
case 'xoY':
+ $usedYear = true;
if ( !$minguo ) {
$minguo = self::tsToYear( $ts, 'minguo' );
}
$num = $minguo[0];
break;
case 'xtY':
+ $usedTennoYear = true;
if ( !$tenno ) {
$tenno = self::tsToYear( $ts, 'tenno' );
}
$num = $tenno[0];
break;
case 'y':
+ $usedYear = true;
$num = substr( $ts, 2, 2 );
break;
case 'xiy':
+ $usedIranianYear = true;
if ( !$iranian ) {
$iranian = self::tsToIranian( $ts );
}
$num = substr( $iranian[0], -2 );
break;
case 'a':
+ $usedAMPM = true;
$s .= intval( substr( $ts, 8, 2 ) ) < 12 ? 'am' : 'pm';
break;
case 'A':
+ $usedAMPM = true;
$s .= intval( substr( $ts, 8, 2 ) ) < 12 ? 'AM' : 'PM';
break;
case 'g':
+ $usedHour = true;
$h = substr( $ts, 8, 2 );
$num = $h % 12 ? $h % 12 : 12;
break;
case 'G':
+ $usedHour = true;
$num = intval( substr( $ts, 8, 2 ) );
break;
case 'h':
+ $usedHour = true;
$h = substr( $ts, 8, 2 );
$num = sprintf( '%02d', $h % 12 ? $h % 12 : 12 );
break;
case 'H':
+ $usedHour = true;
$num = substr( $ts, 8, 2 );
break;
case 'i':
+ $usedMinute = true;
$num = substr( $ts, 10, 2 );
break;
case 's':
+ $usedSecond = true;
$num = substr( $ts, 12, 2 );
break;
case 'c':
case 'r':
+ $usedSecond = true;
+ // fall through
case 'e':
case 'O':
case 'P':
case 'T':
- // Pass through string from $dateTimeObj->format()
- if ( !$dateTimeObj ) {
- $dateTimeObj = DateTime::createFromFormat(
- 'YmdHis', $ts, $zone ?: new DateTimeZone( 'UTC' )
- );
- }
- $s .= $dateTimeObj->format( $code );
+ $s .= Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, $code );
break;
case 'w':
case 'N':
case 'z':
+ $usedDay = true;
+ $num = Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, $code );
+ break;
case 'W':
+ $usedWeek = true;
+ $num = Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, $code );
+ break;
case 't':
+ $usedMonth = true;
+ $num = Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, $code );
+ break;
case 'L':
+ $usedIsLeapYear = true;
+ $num = Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, $code );
+ break;
case 'o':
+ $usedISOYear = true;
+ $num = Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, $code );
+ break;
case 'U':
+ $usedSecond = true;
+ // fall through
case 'I':
case 'Z':
- // Pass through number from $dateTimeObj->format()
- if ( !$dateTimeObj ) {
- $dateTimeObj = DateTime::createFromFormat(
- 'YmdHis', $ts, $zone ?: new DateTimeZone( 'UTC' )
- );
- }
- $num = $dateTimeObj->format( $code );
+ $num = Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, $code );
break;
case '\\':
# Backslash escaping
- if ( $p < strlen( $format ) - 1 ) {
+ if ( $p < $formatLength - 1 ) {
$s .= $format[++$p];
} else {
$s .= '\\';
@@ -1381,7 +1446,7 @@ class Language {
break;
case '"':
# Quoted literal
- if ( $p < strlen( $format ) - 1 ) {
+ if ( $p < $formatLength - 1 ) {
$endQuote = strpos( $format, '"', $p + 1 );
if ( $endQuote === false ) {
# No terminating quote, assume literal "
@@ -1413,6 +1478,63 @@ class Language {
}
}
}
+
+ if ( $usedSecond ) {
+ $ttl = 1;
+ } elseif ( $usedMinute ) {
+ $ttl = 60 - substr( $ts, 12, 2 );
+ } elseif ( $usedHour ) {
+ $ttl = 3600 - substr( $ts, 10, 2 ) * 60 - substr( $ts, 12, 2 );
+ } elseif ( $usedAMPM ) {
+ $ttl = 43200 - ( substr( $ts, 8, 2 ) % 12 ) * 3600 - substr( $ts, 10, 2 ) * 60 - substr( $ts, 12, 2 );
+ } elseif ( $usedDay || $usedHebrewMonth || $usedIranianMonth || $usedHijriMonth || $usedHebrewYear || $usedIranianYear || $usedHijriYear || $usedTennoYear ) {
+ // @todo Someone who understands the non-Gregorian calendars should write proper logic for them
+ // so that they don't need purged every day.
+ $ttl = 86400 - substr( $ts, 8, 2 ) * 3600 - substr( $ts, 10, 2 ) * 60 - substr( $ts, 12, 2 );
+ } else {
+ $possibleTtls = array();
+ $timeRemainingInDay = 86400 - substr( $ts, 8, 2 ) * 3600 - substr( $ts, 10, 2 ) * 60 - substr( $ts, 12, 2 );
+ if ( $usedWeek ) {
+ $possibleTtls[] = ( 7 - Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'N' ) ) * 86400 + $timeRemainingInDay;
+ } elseif ( $usedISOYear ) {
+ // December 28th falls on the last ISO week of the year, every year.
+ // The last ISO week of a year can be 52 or 53.
+ $lastWeekOfISOYear = DateTime::createFromFormat( 'Ymd', substr( $ts, 0, 4 ) . '1228', $zone ?: new DateTimeZone( 'UTC' ) )->format( 'W' );
+ $currentISOWeek = Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'W' );
+ $weeksRemaining = $lastWeekOfISOYear - $currentISOWeek;
+ $timeRemainingInWeek = ( 7 - Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'N' ) ) * 86400 + $timeRemainingInDay;
+ $possibleTtls[] = $weeksRemaining * 604800 + $timeRemainingInWeek;
+ }
+
+ if ( $usedMonth ) {
+ $possibleTtls[] = ( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 't' ) - substr( $ts, 6, 2 ) ) * 86400 + $timeRemainingInDay;
+ } elseif ( $usedYear ) {
+ $possibleTtls[] = ( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'L' ) + 364 - Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'z' ) ) * 86400
+ + $timeRemainingInDay;
+ } elseif ( $usedIsLeapYear ) {
+ $year = substr( $ts, 0, 4 );
+ $timeRemainingInYear = ( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'L' ) + 364 - Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'z' ) ) * 86400
+ + $timeRemainingInDay;
+ $mod = $year % 4;
+ if ( $mod || ( !( $year % 100 ) && $year % 400 ) ) {
+ // this isn't a leap year. see when the next one starts
+ $nextCandidate = $year - $mod + 4;
+ if ( $nextCandidate % 100 || !( $nextCandidate % 400 ) ) {
+ $possibleTtls[] = ( $nextCandidate - $year - 1 ) * 365 * 86400 + $timeRemainingInYear;
+ } else {
+ $possibleTtls[] = ( $nextCandidate - $year + 3 ) * 365 * 86400 + $timeRemainingInYear;
+ }
+ } else {
+ // this is a leap year, so the next year isn't
+ $possibleTtls[] = $timeRemainingInYear;
+ }
+ }
+
+ if ( $possibleTtls ) {
+ $ttl = min( $possibleTtls );
+ }
+ }
+
return $s;
}
@@ -1427,7 +1549,7 @@ class Language {
*
* Link: http://www.farsiweb.info/jalali/jalali.c
*
- * @param $ts string
+ * @param string $ts
*
* @return string
*/
@@ -1485,7 +1607,7 @@ class Language {
*
* @see http://phpnuke.org/modules.php?name=News&file=article&sid=8234&mode=thread&order=0&thold=0
*
- * @param $ts string
+ * @param string $ts
*
* @return string
*/
@@ -1502,8 +1624,7 @@ 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 ) +
@@ -1516,8 +1637,10 @@ class Language {
$zl = $zjd -1948440 + 10632;
$zn = (int)( ( $zl - 1 ) / 10631 );
$zl = $zl - 10631 * $zn + 354;
- $zj = ( (int)( ( 10985 - $zl ) / 5316 ) ) * ( (int)( ( 50 * $zl ) / 17719 ) ) + ( (int)( $zl / 5670 ) ) * ( (int)( ( 43 * $zl ) / 15238 ) );
- $zl = $zl - ( (int)( ( 30 - $zj ) / 15 ) ) * ( (int)( ( 17719 * $zj ) / 50 ) ) - ( (int)( $zj / 16 ) ) * ( (int)( ( 15238 * $zj ) / 43 ) ) + 29;
+ $zj = ( (int)( ( 10985 - $zl ) / 5316 ) ) * ( (int)( ( 50 * $zl ) / 17719 ) ) +
+ ( (int)( $zl / 5670 ) ) * ( (int)( ( 43 * $zl ) / 15238 ) );
+ $zl = $zl - ( (int)( ( 30 - $zj ) / 15 ) ) * ( (int)( ( 17719 * $zj ) / 50 ) ) -
+ ( (int)( $zj / 16 ) ) * ( (int)( ( 15238 * $zj ) / 43 ) ) + 29;
$zm = (int)( ( 24 * $zl ) / 709 );
$zd = $zl - (int)( ( 709 * $zm ) / 24 );
$zy = 30 * $zn + $zj - 30;
@@ -1536,7 +1659,7 @@ class Language {
* The months are counted from Tishrei = 1. In a leap year, Adar I is 13
* and Adar II is 14. In a non-leap year, Adar is 6.
*
- * @param $ts string
+ * @param string $ts
*
* @return string
*/
@@ -1677,7 +1800,7 @@ class Language {
* Based on Carl Friedrich Gauss algorithm for finding Easter date.
* Used for Hebrew date.
*
- * @param $year int
+ * @param int $year
*
* @return string
*/
@@ -1715,9 +1838,9 @@ class Language {
* http://en.wikipedia.org/wiki/Minguo_calendar
* http://en.wikipedia.org/wiki/Japanese_era_name
*
- * @param $ts String: 14-character timestamp
- * @param $cName String: calender name
- * @return Array: converted year, month, day
+ * @param string $ts 14-character timestamp
+ * @param string $cName Calender name
+ * @return array Converted year, month, day
*/
private static function tsToYear( $ts, $cName ) {
$gy = substr( $ts, 0, 4 );
@@ -1739,7 +1862,10 @@ class Language {
# 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 ) ) ) {
+ if ( ( $gy < 1912 )
+ || ( ( $gy == 1912 ) && ( $gm < 7 ) )
+ || ( ( $gy == 1912 ) && ( $gm == 7 ) && ( $gd < 31 ) )
+ ) {
# Meiji period
$gy_gannen = $gy - 1868 + 1;
$gy_offset = $gy_gannen;
@@ -1753,8 +1879,7 @@ class Language {
( ( $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;
@@ -1766,8 +1891,7 @@ class Language {
( ( $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;
@@ -1794,7 +1918,7 @@ class Language {
/**
* Roman number formatting up to 10000
*
- * @param $num int
+ * @param int $num
*
* @return string
*/
@@ -1803,7 +1927,8 @@ class Language {
array( '', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X' ),
array( '', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC', 'C' ),
array( '', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM', 'M' ),
- array( '', 'M', 'MM', 'MMM', 'MMMM', 'MMMMM', 'MMMMMM', 'MMMMMMM', 'MMMMMMMM', 'MMMMMMMMM', 'MMMMMMMMMM' )
+ array( '', 'M', 'MM', 'MMM', 'MMMM', 'MMMMM', 'MMMMMM', 'MMMMMMM',
+ 'MMMMMMMM', 'MMMMMMMMM', 'MMMMMMMMMM' )
);
$num = intval( $num );
@@ -1824,7 +1949,7 @@ class Language {
/**
* Hebrew Gematria number formatting up to 9999
*
- * @param $num int
+ * @param int $num
*
* @return string
*/
@@ -1887,9 +2012,9 @@ class Language {
/**
* Used by date() and time() to adjust the time output.
*
- * @param $ts Int the time in date('YmdHis') format
- * @param $tz Mixed: adjust the time by this amount (default false, mean we
- * get user timecorrection setting)
+ * @param string $ts The time in date('YmdHis') format
+ * @param mixed $tz Adjust the time by this amount (default false, mean we
+ * get user timecorrection setting)
* @return int
*/
function userAdjust( $ts, $tz = false ) {
@@ -1915,12 +2040,9 @@ class Language {
$data[0] = 'Offset';
}
- $minDiff = 0;
if ( $data[0] == 'System' || $tz == '' ) {
- #  Global offset in minutes.
- if ( isset( $wgLocalTZoffset ) ) {
- $minDiff = $wgLocalTZoffset;
- }
+ # Global offset in minutes.
+ $minDiff = $wgLocalTZoffset;
} elseif ( $data[0] == 'Offset' ) {
$minDiff = intval( $data[1] );
} else {
@@ -1972,9 +2094,9 @@ class Language {
* }
*</code>
*
- * @param $usePrefs Mixed: if true, the user's preference is used
- * if false, the site/language default is used
- * if int/string, assumed to be a format.
+ * @param int|string|bool $usePrefs If true, the user's preference is used
+ * if false, the site/language default is used
+ * if int/string, assumed to be a format.
* @return string
*/
function dateFormat( $usePrefs = true ) {
@@ -2000,8 +2122,8 @@ class Language {
/**
* Get a format string for a given type and preference
- * @param $type string May be date, time or both
- * @param $pref string The format name as it appears in Messages*.php
+ * @param string $type May be date, time or both
+ * @param string $pref The format name as it appears in Messages*.php
*
* @since 1.22 New type 'pretty' that provides a more readable timestamp format
*
@@ -2030,13 +2152,13 @@ class Language {
}
/**
- * @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
- * user configured offset ($timecorrection)
- * @param $format Mixed: true to use user's date format preference
- * @param $timecorrection String|bool the time offset as returned by
- * validateTimeZone() in Special:Preferences
+ * @param string $ts The time format which needs to be turned into a
+ * date('YmdHis') format with wfTimestamp(TS_MW,$ts)
+ * @param bool $adj Whether to adjust the time output according to the
+ * user configured offset ($timecorrection)
+ * @param mixed $format True to use user's date format preference
+ * @param string|bool $timecorrection The time offset as returned by
+ * validateTimeZone() in Special:Preferences
* @return string
*/
function date( $ts, $adj = false, $format = true, $timecorrection = false ) {
@@ -2049,13 +2171,13 @@ class Language {
}
/**
- * @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
- * user configured offset ($timecorrection)
- * @param $format Mixed: true to use user's date format preference
- * @param $timecorrection String|bool the time offset as returned by
- * validateTimeZone() in Special:Preferences
+ * @param string $ts The time format which needs to be turned into a
+ * date('YmdHis') format with wfTimestamp(TS_MW,$ts)
+ * @param bool $adj Whether to adjust the time output according to the
+ * user configured offset ($timecorrection)
+ * @param mixed $format True to use user's date format preference
+ * @param string|bool $timecorrection The time offset as returned by
+ * validateTimeZone() in Special:Preferences
* @return string
*/
function time( $ts, $adj = false, $format = true, $timecorrection = false ) {
@@ -2068,14 +2190,14 @@ class Language {
}
/**
- * @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
- * user configured offset ($timecorrection)
- * @param $format Mixed: what format to return, if it's false output the
- * default one (default true)
- * @param $timecorrection String|bool the time offset as returned by
- * validateTimeZone() in Special:Preferences
+ * @param string $ts The time format which needs to be turned into a
+ * date('YmdHis') format with wfTimestamp(TS_MW,$ts)
+ * @param bool $adj Whether to adjust the time output according to the
+ * user configured offset ($timecorrection)
+ * @param mixed $format What format to return, if it's false output the
+ * default one (default true)
+ * @param string|bool $timecorrection The time offset as returned by
+ * validateTimeZone() in Special:Preferences
* @return string
*/
function timeanddate( $ts, $adj = false, $format = true, $timecorrection = false ) {
@@ -2092,7 +2214,7 @@ class Language {
*
* @since 1.20
*
- * @param integer $seconds The amount of seconds.
+ * @param int $seconds The amount of seconds.
* @param array $chosenIntervals The intervals to enable.
*
* @return string
@@ -2118,14 +2240,23 @@ class Language {
*
* @since 1.20
*
- * @param integer $seconds The amount of seconds.
+ * @param int $seconds The amount of seconds.
* @param array $chosenIntervals The intervals to enable.
*
* @return array
*/
public function getDurationIntervals( $seconds, array $chosenIntervals = array() ) {
if ( empty( $chosenIntervals ) ) {
- $chosenIntervals = array( 'millennia', 'centuries', 'decades', 'years', 'days', 'hours', 'minutes', 'seconds' );
+ $chosenIntervals = array(
+ 'millennia',
+ 'centuries',
+ 'decades',
+ 'years',
+ 'days',
+ 'hours',
+ 'minutes',
+ 'seconds'
+ );
}
$intervals = array_intersect_key( self::$durationIntervals, array_flip( $chosenIntervals ) );
@@ -2149,21 +2280,21 @@ class Language {
/**
* Internal helper function for userDate(), userTime() and userTimeAndDate()
*
- * @param $type String: can be 'date', 'time' or 'both'
- * @param $ts Mixed: the time format which needs to be turned into a
- * date('YmdHis') format with wfTimestamp(TS_MW,$ts)
- * @param $user User object used to get preferences for timezone and format
- * @param $options Array, can contain the following keys:
- * - 'timecorrection': time correction, can have the following values:
- * - true: use user's preference
- * - false: don't use time correction
- * - integer: value of time correction in minutes
- * - 'format': format to use, can have the following values:
- * - true: use user's preference
- * - false: use default preference
- * - string: format to use
+ * @param string $type Can be 'date', 'time' or 'both'
+ * @param string $ts The time format which needs to be turned into a
+ * date('YmdHis') format with wfTimestamp(TS_MW,$ts)
+ * @param User $user User object used to get preferences for timezone and format
+ * @param array $options Array, can contain the following keys:
+ * - 'timecorrection': time correction, can have the following values:
+ * - true: use user's preference
+ * - false: don't use time correction
+ * - int: value of time correction in minutes
+ * - 'format': format to use, can have the following values:
+ * - true: use user's preference
+ * - false: use default preference
+ * - string: format to use
* @since 1.19
- * @return String
+ * @return string
*/
private function internalUserTimeAndDate( $type, $ts, User $user, array $options ) {
$ts = wfTimestamp( TS_MW, $ts );
@@ -2189,20 +2320,20 @@ class Language {
* Get the formatted date for the given timestamp and formatted for
* the given user.
*
- * @param $ts Mixed: the time format which needs to be turned into a
- * date('YmdHis') format with wfTimestamp(TS_MW,$ts)
- * @param $user User object used to get preferences for timezone and format
- * @param $options Array, can contain the following keys:
- * - 'timecorrection': time correction, can have the following values:
- * - true: use user's preference
- * - false: don't use time correction
- * - integer: value of time correction in minutes
- * - 'format': format to use, can have the following values:
- * - true: use user's preference
- * - false: use default preference
- * - string: format to use
+ * @param mixed $ts Mixed: the time format which needs to be turned into a
+ * date('YmdHis') format with wfTimestamp(TS_MW,$ts)
+ * @param User $user User object used to get preferences for timezone and format
+ * @param array $options Array, can contain the following keys:
+ * - 'timecorrection': time correction, can have the following values:
+ * - true: use user's preference
+ * - false: don't use time correction
+ * - int: value of time correction in minutes
+ * - 'format': format to use, can have the following values:
+ * - true: use user's preference
+ * - false: use default preference
+ * - string: format to use
* @since 1.19
- * @return String
+ * @return string
*/
public function userDate( $ts, User $user, array $options = array() ) {
return $this->internalUserTimeAndDate( 'date', $ts, $user, $options );
@@ -2212,20 +2343,20 @@ class Language {
* Get the formatted time for the given timestamp and formatted for
* the given user.
*
- * @param $ts Mixed: the time format which needs to be turned into a
- * date('YmdHis') format with wfTimestamp(TS_MW,$ts)
- * @param $user User object used to get preferences for timezone and format
- * @param $options Array, can contain the following keys:
- * - 'timecorrection': time correction, can have the following values:
- * - true: use user's preference
- * - false: don't use time correction
- * - integer: value of time correction in minutes
- * - 'format': format to use, can have the following values:
- * - true: use user's preference
- * - false: use default preference
- * - string: format to use
+ * @param mixed $ts The time format which needs to be turned into a
+ * date('YmdHis') format with wfTimestamp(TS_MW,$ts)
+ * @param User $user User object used to get preferences for timezone and format
+ * @param array $options Array, can contain the following keys:
+ * - 'timecorrection': time correction, can have the following values:
+ * - true: use user's preference
+ * - false: don't use time correction
+ * - int: value of time correction in minutes
+ * - 'format': format to use, can have the following values:
+ * - true: use user's preference
+ * - false: use default preference
+ * - string: format to use
* @since 1.19
- * @return String
+ * @return string
*/
public function userTime( $ts, User $user, array $options = array() ) {
return $this->internalUserTimeAndDate( 'time', $ts, $user, $options );
@@ -2235,20 +2366,20 @@ class Language {
* Get the formatted date and time for the given timestamp and formatted for
* the given user.
*
- * @param $ts Mixed: the time format which needs to be turned into a
- * date('YmdHis') format with wfTimestamp(TS_MW,$ts)
- * @param $user User object used to get preferences for timezone and format
- * @param $options Array, can contain the following keys:
- * - 'timecorrection': time correction, can have the following values:
- * - true: use user's preference
- * - false: don't use time correction
- * - integer: value of time correction in minutes
- * - 'format': format to use, can have the following values:
- * - true: use user's preference
- * - false: use default preference
- * - string: format to use
+ * @param mixed $ts The time format which needs to be turned into a
+ * date('YmdHis') format with wfTimestamp(TS_MW,$ts)
+ * @param User $user User object used to get preferences for timezone and format
+ * @param array $options Array, can contain the following keys:
+ * - 'timecorrection': time correction, can have the following values:
+ * - true: use user's preference
+ * - false: don't use time correction
+ * - int: value of time correction in minutes
+ * - 'format': format to use, can have the following values:
+ * - true: use user's preference
+ * - false: use default preference
+ * - string: format to use
* @since 1.19
- * @return String
+ * @return string
*/
public function userTimeAndDate( $ts, User $user, array $options = array() ) {
return $this->internalUserTimeAndDate( 'both', $ts, $user, $options );
@@ -2271,13 +2402,16 @@ class Language {
*/
public function getHumanTimestamp( MWTimestamp $ts, MWTimestamp $relativeTo, User $user ) {
$diff = $ts->diff( $relativeTo );
- $diffDay = (bool)( (int)$ts->timestamp->format( 'w' ) - (int)$relativeTo->timestamp->format( 'w' ) );
+ $diffDay = (bool)( (int)$ts->timestamp->format( 'w' ) -
+ (int)$relativeTo->timestamp->format( 'w' ) );
$days = $diff->days ?: (int)$diffDay;
- if ( $diff->invert || $days > 5 && $ts->timestamp->format( 'Y' ) !== $relativeTo->timestamp->format( 'Y' ) ) {
+ if ( $diff->invert || $days > 5
+ && $ts->timestamp->format( 'Y' ) !== $relativeTo->timestamp->format( 'Y' )
+ ) {
// Timestamps are in different years: use full timestamp
// Also do full timestamp for future dates
/**
- * @FIXME Add better handling of future timestamps.
+ * @todo FIXME: Add better handling of future timestamps.
*/
$format = $this->getDateFormatString( 'both', $user->getDatePreference() ?: 'default' );
$ts = $this->sprintfDate( $format, $ts->getTimestamp( TS_MW ) );
@@ -2330,7 +2464,7 @@ class Language {
}
/**
- * @param $key string
+ * @param string $key
* @return array|null
*/
function getMessage( $key ) {
@@ -2345,9 +2479,9 @@ class Language {
}
/**
- * @param $in
- * @param $out
- * @param $string
+ * @param string $in
+ * @param string $out
+ * @param string $string
* @return string
*/
function iconv( $in, $out, $string ) {
@@ -2367,7 +2501,7 @@ class Language {
// callback functions for uc(), lc(), ucwords(), ucwordbreaks()
/**
- * @param $matches array
+ * @param array $matches
* @return mixed|string
*/
function ucwordbreaksCallbackAscii( $matches ) {
@@ -2375,7 +2509,7 @@ class Language {
}
/**
- * @param $matches array
+ * @param array $matches
* @return string
*/
function ucwordbreaksCallbackMB( $matches ) {
@@ -2383,7 +2517,7 @@ class Language {
}
/**
- * @param $matches array
+ * @param array $matches
* @return string
*/
function ucCallback( $matches ) {
@@ -2392,7 +2526,7 @@ class Language {
}
/**
- * @param $matches array
+ * @param array $matches
* @return string
*/
function lcCallback( $matches ) {
@@ -2401,7 +2535,7 @@ class Language {
}
/**
- * @param $matches array
+ * @param array $matches
* @return string
*/
function ucwordsCallbackMB( $matches ) {
@@ -2409,7 +2543,7 @@ class Language {
}
/**
- * @param $matches array
+ * @param array $matches
* @return string
*/
function ucwordsCallbackWiki( $matches ) {
@@ -2420,7 +2554,7 @@ class Language {
/**
* Make a string's first character uppercase
*
- * @param $str string
+ * @param string $str
*
* @return string
*/
@@ -2439,8 +2573,8 @@ class Language {
/**
* Convert a string to uppercase
*
- * @param $str string
- * @param $first bool
+ * @param string $str
+ * @param bool $first
*
* @return string
*/
@@ -2470,7 +2604,7 @@ class Language {
}
/**
- * @param $str string
+ * @param string $str
* @return mixed|string
*/
function lcfirst( $str ) {
@@ -2488,8 +2622,8 @@ class Language {
}
/**
- * @param $str string
- * @param $first bool
+ * @param string $str
+ * @param bool $first
* @return mixed|string
*/
function lc( $str, $first = false ) {
@@ -2518,7 +2652,7 @@ class Language {
}
/**
- * @param $str string
+ * @param string $str
* @return bool
*/
function isMultibyte( $str ) {
@@ -2526,7 +2660,7 @@ class Language {
}
/**
- * @param $str string
+ * @param string $str
* @return mixed|string
*/
function ucwords( $str ) {
@@ -2558,7 +2692,7 @@ class Language {
/**
* capitalize words at word breaks
*
- * @param $str string
+ * @param string $str
* @return mixed
*/
function ucwordbreaks( $str ) {
@@ -2569,7 +2703,8 @@ class Language {
$breaks = "[ \-\(\)\}\{\.,\?!]";
// find first letter after word break
- $replaceRegexp = "/^([a-z]|[\\xc0-\\xff][\\x80-\\xbf]*)|$breaks([a-z]|[\\xc0-\\xff][\\x80-\\xbf]*)/";
+ $replaceRegexp = "/^([a-z]|[\\xc0-\\xff][\\x80-\\xbf]*)|" .
+ "$breaks([a-z]|[\\xc0-\\xff][\\x80-\\xbf]*)/";
if ( function_exists( 'mb_strtoupper' ) ) {
return preg_replace_callback(
@@ -2604,7 +2739,7 @@ class Language {
* uses this function when it should be using a more general normalisation
* function, then fix the caller.
*
- * @param $s string
+ * @param string $s
*
* @return string
*/
@@ -2613,7 +2748,7 @@ class Language {
}
/**
- * @param $s string
+ * @param string $s
* @return string
*/
function checkTitleEncoding( $s ) {
@@ -2650,8 +2785,8 @@ class Language {
* Some languages such as Chinese require word segmentation,
* Specify such segmentation when overridden in derived class.
*
- * @param $string String
- * @return String
+ * @param string $string
+ * @return string
*/
function segmentByWord( $string ) {
return $string;
@@ -2661,8 +2796,8 @@ class Language {
* Some languages have special punctuation need to be normalized.
* Make such changes here.
*
- * @param $string String
- * @return String
+ * @param string $string
+ * @return string
*/
function normalizeForSearch( $string ) {
return self::convertDoubleWidth( $string );
@@ -2672,7 +2807,7 @@ class Language {
* convert double-width roman characters to single-width.
* range: ff00-ff5f ~= 0020-007f
*
- * @param $string string
+ * @param string $string
*
* @return string
*/
@@ -2692,8 +2827,8 @@ class Language {
}
/**
- * @param $string string
- * @param $pattern string
+ * @param string $string
+ * @param string $pattern
* @return string
*/
protected static function insertSpace( $string, $pattern ) {
@@ -2703,7 +2838,7 @@ class Language {
}
/**
- * @param $termsArray array
+ * @param array $termsArray
* @return array
*/
function convertForSearchResult( $termsArray ) {
@@ -2715,7 +2850,7 @@ class Language {
/**
* Get the first character of a string.
*
- * @param $s string
+ * @param string $s
* @return string
*/
function firstChar( $s ) {
@@ -2778,7 +2913,7 @@ class Language {
}
/**
- * @param $s string
+ * @param string $s
* @return string
*/
function recodeForEdit( $s ) {
@@ -2794,7 +2929,7 @@ class Language {
}
/**
- * @param $s string
+ * @param string $s
* @return string
*/
function recodeInput( $s ) {
@@ -2819,7 +2954,7 @@ class Language {
*
* This is language-specific for performance reasons only.
*
- * @param $s string
+ * @param string $s
*
* @return string
*/
@@ -2842,8 +2977,8 @@ class Language {
* The data is cached in process memory. This will go faster if you have the
* FastStringSearch extension.
*
- * @param $file string
- * @param $string string
+ * @param string $file
+ * @param string $string
*
* @throws MWException
* @return string
@@ -2870,7 +3005,7 @@ class Language {
/**
* Return the correct HTML 'dir' attribute value for this language.
- * @return String
+ * @return string
*/
function getDir() {
return $this->isRTL() ? 'rtl' : 'ltr';
@@ -2882,7 +3017,7 @@ class Language {
*
* Should be equivalent to CSS3 'start' text-align value....
*
- * @return String
+ * @return string
*/
function alignStart() {
return $this->isRTL() ? 'right' : 'left';
@@ -2894,7 +3029,7 @@ class Language {
*
* Should be equivalent to CSS3 'end' text-align value....
*
- * @return String
+ * @return string
*/
function alignEnd() {
return $this->isRTL() ? 'left' : 'right';
@@ -2907,7 +3042,7 @@ class Language {
* because it makes the output HTML source code more readable. When
* the output is plain text or can be escaped, getDirMark() should be used.
*
- * @param $opposite Boolean Get the direction mark opposite to your language
+ * @param bool $opposite Get the direction mark opposite to your language
* @return string
* @since 1.20
*/
@@ -2925,7 +3060,7 @@ class Language {
* when the output is plain text or can be escaped. When the output is
* HTML, use getDirMarkEntity() instead.
*
- * @param $opposite Boolean Get the direction mark opposite to your language
+ * @param bool $opposite Get the direction mark opposite to your language
* @return string
*/
function getDirMark( $opposite = false ) {
@@ -2947,7 +3082,8 @@ class Language {
/**
* An arrow, depending on the language direction.
*
- * @param $direction String: the direction of the arrow: forwards (default), backwards, left, right, up, down.
+ * @param string $direction The direction of the arrow: forwards (default),
+ * backwards, left, right, up, down.
* @return string
*/
function getArrow( $direction = 'forwards' ) {
@@ -3000,11 +3136,11 @@ class Language {
/**
* Fill a MagicWord object with data from here
*
- * @param $mw
+ * @param MagicWord $mw
*/
function getMagic( $mw ) {
// Saves a function call
- if ( ! $this->mMagicHookDone ) {
+ if ( !$this->mMagicHookDone ) {
$this->doMagicHook();
}
@@ -3016,7 +3152,7 @@ class Language {
}
if ( !is_array( $rawEntry ) ) {
- error_log( "\"$rawEntry\" is not a valid magic word for \"$mw->mId\"" );
+ wfWarn( "\"$rawEntry\" is not a valid magic word for \"$mw->mId\"" );
} else {
$mw->mCaseSensitive = $rawEntry[0];
$mw->mSynonyms = array_slice( $rawEntry, 1 );
@@ -3026,7 +3162,7 @@ class Language {
/**
* Add magic words to the extension array
*
- * @param $newWords array
+ * @param array $newWords
*/
function addMagicWordsByLang( $newWords ) {
$fallbackChain = $this->getFallbackLanguages();
@@ -3041,6 +3177,7 @@ class Language {
/**
* Get special page names, as an associative array
* case folded alias => real name
+ * @return array
*/
function getSpecialPageAliases() {
// Cache aliases because it may be slow to load them
@@ -3058,7 +3195,7 @@ class Language {
/**
* Italic is unsuitable for some languages
*
- * @param $text String: the text to be emphasized.
+ * @param string $text The text to be emphasized.
* @return string
*/
function emphasize( $text ) {
@@ -3078,15 +3215,13 @@ class Language {
* wfMessage( 'message' )->numParams( $num )->text()
* </code>
*
- * See LanguageGu.php for the Gujarati implementation and
- * $separatorTransformTable on MessageIs.php for
+ * See $separatorTransformTable on MessageIs.php for
* the , => . and . => , implementation.
*
- * @todo check if it's viable to use localeconv() for the decimal
- * separator thing.
- * @param $number Mixed: the string to be formatted, should be an integer
- * or a floating point number.
- * @param $nocommafy Bool: set to true for special numbers like dates
+ * @todo check if it's viable to use localeconv() for the decimal separator thing.
+ * @param int|float $number The string to be formatted, should be an integer
+ * or a floating point number.
+ * @param bool $nocommafy Set to true for special numbers like dates
* @return string
*/
public function formatNum( $number, $nocommafy = false ) {
@@ -3112,7 +3247,7 @@ class Language {
/**
* Front-end for non-commafied formatNum
*
- * @param mixed $number the string to be formatted, should be an integer
+ * @param int|float $number The string to be formatted, should be an integer
* or a floating point number.
* @since 1.21
* @return string
@@ -3122,17 +3257,21 @@ class Language {
}
/**
- * @param $number string
+ * @param string $number
* @return string
*/
- function parseFormattedNumber( $number ) {
+ public function parseFormattedNumber( $number ) {
$s = $this->digitTransformTable();
if ( $s ) {
+ // eliminate empty array values such as ''. (bug 64347)
+ $s = array_filter( $s );
$number = strtr( $number, array_flip( $s ) );
}
$s = $this->separatorTransformTable();
if ( $s ) {
+ // eliminate empty array values such as ''. (bug 64347)
+ $s = array_filter( $s );
$number = strtr( $number, array_flip( $s ) );
}
@@ -3143,7 +3282,7 @@ class Language {
/**
* Adds commas to a given number
* @since 1.19
- * @param $number mixed
+ * @param mixed $number
* @return string
*/
function commafy( $number ) {
@@ -3196,7 +3335,7 @@ class Language {
}
/**
- * @return String
+ * @return string
*/
function digitGroupingPattern() {
return self::$dataCache->getItem( $this->mCode, 'digitGroupingPattern' );
@@ -3222,7 +3361,7 @@ class Language {
* The last two strings are chained with an "and".
* NOTE: This function will only work with standard numeric array keys (0, 1, 2…)
*
- * @param $l Array
+ * @param string[] $l
* @return string
*/
function listToText( array $l ) {
@@ -3251,7 +3390,7 @@ class Language {
/**
* Take a list of strings and build a locale-friendly comma-separated
* list, using the local comma-separator message.
- * @param $list array of strings to put in a comma list
+ * @param string[] $list Array of strings to put in a comma list
* @return string
*/
function commaList( array $list ) {
@@ -3264,7 +3403,7 @@ class Language {
/**
* Take a list of strings and build a locale-friendly semicolon-separated
* list, using the local semicolon-separator message.
- * @param $list array of strings to put in a semicolon list
+ * @param string[] $list Array of strings to put in a semicolon list
* @return string
*/
function semicolonList( array $list ) {
@@ -3276,7 +3415,7 @@ class Language {
/**
* Same as commaList, but separate it with the pipe instead.
- * @param $list array of strings to put in a pipe list
+ * @param string[] $list Array of strings to put in a pipe list
* @return string
*/
function pipeList( array $list ) {
@@ -3296,10 +3435,10 @@ class Language {
*
* If $length is negative, the string will be truncated from the beginning
*
- * @param $string String to truncate
- * @param $length Int: maximum length (including ellipses)
- * @param $ellipsis String to append to the truncated text
- * @param $adjustLength Boolean: Subtract length of ellipsis from $length.
+ * @param string $string String to truncate
+ * @param int $length Maximum length (including ellipses)
+ * @param string $ellipsis String to append to the truncated text
+ * @param bool $adjustLength Subtract length of ellipsis from $length.
* $adjustLength was introduced in 1.18, before that behaved as if false.
* @return string
*/
@@ -3325,11 +3464,13 @@ class Language {
$length -= $eLength;
$string = substr( $string, 0, $length ); // xyz...
$string = $this->removeBadCharLast( $string );
+ $string = rtrim( $string );
$string = $string . $ellipsis;
} else {
$length += $eLength;
$string = substr( $string, $length ); // ...xyz
$string = $this->removeBadCharFirst( $string );
+ $string = ltrim( $string );
$string = $ellipsis . $string;
}
}
@@ -3347,7 +3488,7 @@ class Language {
* Remove bytes that represent an incomplete Unicode character
* at the end of string (e.g. bytes of the char are missing)
*
- * @param $string String
+ * @param string $string
* @return string
*/
protected function removeBadCharLast( $string ) {
@@ -3372,7 +3513,7 @@ class Language {
* Remove bytes that represent an incomplete Unicode character
* at the start of string (e.g. bytes of the char are missing)
*
- * @param $string String
+ * @param string $string
* @return string
*/
protected function removeBadCharFirst( $string ) {
@@ -3512,11 +3653,11 @@ class Language {
* truncateHtml() helper function
* like strcspn() but adds the skipped chars to $ret
*
- * @param $ret
- * @param $text
- * @param $search
- * @param $start
- * @param $len
+ * @param string $ret
+ * @param string $text
+ * @param string $search
+ * @param int $start
+ * @param null|int $len
* @return int
*/
private function truncate_skip( &$ret, $text, $search, $start, $len = null ) {
@@ -3537,10 +3678,10 @@ class Language {
* truncateHtml() helper function
* (a) push or pop $tag from $openTags as needed
* (b) clear $tag value
- * @param &$tag string Current HTML tag name we are looking at
- * @param $tagType int (0-open tag, 1-close tag)
- * @param $lastCh string Character before the '>' that ended this tag
- * @param &$openTags array Open tag stack (not accounting for $tag)
+ * @param string &$tag Current HTML tag name we are looking at
+ * @param int $tagType (0-open tag, 1-close tag)
+ * @param string $lastCh Character before the '>' that ended this tag
+ * @param array &$openTags Open tag stack (not accounting for $tag)
*/
private function truncate_endBracket( &$tag, $tagType, $lastCh, &$openTags ) {
$tag = ltrim( $tag );
@@ -3560,8 +3701,8 @@ class Language {
* Grammatical transformations, needed for inflected languages
* Invoked by putting {{grammar:case|word}} in a message
*
- * @param $word string
- * @param $case string
+ * @param string $word
+ * @param string $case
* @return string
*/
function convertGrammar( $word, $case ) {
@@ -3569,23 +3710,27 @@ class Language {
if ( isset( $wgGrammarForms[$this->getCode()][$case][$word] ) ) {
return $wgGrammarForms[$this->getCode()][$case][$word];
}
+
return $word;
}
/**
* Get the grammar forms for the content language
- * @return array of grammar forms
+ * @return array Array of grammar forms
* @since 1.20
*/
function getGrammarForms() {
global $wgGrammarForms;
- if ( isset( $wgGrammarForms[$this->getCode()] ) && is_array( $wgGrammarForms[$this->getCode()] ) ) {
+ if ( isset( $wgGrammarForms[$this->getCode()] )
+ && is_array( $wgGrammarForms[$this->getCode()] )
+ ) {
return $wgGrammarForms[$this->getCode()];
}
+
return array();
}
/**
* Provides an alternative text depending on specified gender.
- * Usage {{gender:username|masculine|feminine|neutral}}.
+ * Usage {{gender:username|masculine|feminine|unknown}}.
* username is optional, in which case the gender of current user is used,
* but only in (some) interface messages; otherwise default gender is used.
*
@@ -3593,12 +3738,12 @@ class Language {
* given, it will be returned unconditionally. These details are implied by
* the caller and cannot be overridden in subclasses.
*
- * If more than one form is given, the default is to use the neutral one
- * if it is specified, and to use the masculine one otherwise. These
- * details can be overridden in subclasses.
+ * If three forms are given, the default is to use the third (unknown) form.
+ * If fewer than three forms are given, the default is to use the first (masculine) form.
+ * These details can be overridden in subclasses.
*
- * @param $gender string
- * @param $forms array
+ * @param string $gender
+ * @param array $forms
*
* @return string
*/
@@ -3627,8 +3772,8 @@ class Language {
*
* Example: {{plural:{{NUMBEROFARTICLES}}|article|articles}}
*
- * @param $count Integer: non-localized number
- * @param $forms Array: different plural forms
+ * @param int $count Non-localized number
+ * @param array $forms Different plural forms
* @return string Correct form of plural for $count in this language
*/
function convertPlural( $count, $forms ) {
@@ -3654,10 +3799,10 @@ class Language {
* string value returned, otherwise array returned for further consideration
* by CLDR rules or overridden convertPlural().
*
- * @since 1.22.1
+ * @since 1.23
*
- * @param int $count non-localized number
- * @param array $forms different plural forms
+ * @param int $count Non-localized number
+ * @param array $forms Different plural forms
*
* @return array|string
*/
@@ -3665,7 +3810,7 @@ class Language {
foreach ( $forms as $index => $form ) {
if ( preg_match( '/\d+=/i', $form ) ) {
$pos = strpos( $form, '=' );
- if ( substr( $form, 0, $pos ) === (string) $count ) {
+ if ( substr( $form, 0, $pos ) === (string)$count ) {
return substr( $form, $pos + 1 );
}
unset( $forms[$index] );
@@ -3678,8 +3823,8 @@ class Language {
* Checks that convertPlural was given an array and pads it to requested
* amount of forms by copying the last one.
*
- * @param $count Integer: How many forms should there be at least
- * @param $forms Array of forms given to convertPlural
+ * @param array $forms Array of forms given to convertPlural
+ * @param int $count How many forms should there be at least
* @return array Padded array of forms or an exception if not an array
*/
protected function preConvertPlural( /* Array */ $forms, $count ) {
@@ -3696,7 +3841,7 @@ class Language {
* on old expiry lengths recorded in log entries. You'd need to provide the start date to
* match up with it.
*
- * @param $str String: the validated block duration in English
+ * @param string $str The validated block duration in English
* @return string Somehow translated block duration
* @see LanguageFi.php for example implementation
*/
@@ -3741,8 +3886,8 @@ class Language {
* languages like Chinese need to be segmented in order for the diff
* to be of any use
*
- * @param $text String
- * @return String
+ * @param string $text
+ * @return string
*/
public function segmentForDiff( $text ) {
return $text;
@@ -3751,8 +3896,8 @@ class Language {
/**
* and unsegment to show the result
*
- * @param $text String
- * @return String
+ * @param string $text
+ * @return string
*/
public function unsegmentForDiff( $text ) {
return $text;
@@ -3771,7 +3916,7 @@ class Language {
/**
* convert text to all supported variants
*
- * @param $text string
+ * @param string $text
* @return array
*/
public function autoConvertToAllVariants( $text ) {
@@ -3781,7 +3926,7 @@ class Language {
/**
* convert text to different variants of a language.
*
- * @param $text string
+ * @param string $text
* @return string
*/
public function convert( $text ) {
@@ -3791,7 +3936,7 @@ class Language {
/**
* Convert a Title object to a string in the preferred variant
*
- * @param $title Title
+ * @param Title $title
* @return string
*/
public function convertTitle( $title ) {
@@ -3801,7 +3946,7 @@ class Language {
/**
* Convert a namespace index to a string in the preferred variant
*
- * @param $ns int
+ * @param int $ns
* @return string
*/
public function convertNamespace( $ns ) {
@@ -3821,7 +3966,7 @@ class Language {
* Check if the language has the specific variant
*
* @since 1.19
- * @param $variant string
+ * @param string $variant
* @return bool
*/
public function hasVariant( $variant ) {
@@ -3831,7 +3976,7 @@ class Language {
/**
* Put custom tags (e.g. -{ }-) around math to prevent conversion
*
- * @param $text string
+ * @param string $text
* @return string
* @deprecated since 1.22 is no longer used
*/
@@ -3841,8 +3986,8 @@ class Language {
/**
* Perform output conversion on a string, and encode for safe HTML output.
- * @param $text String text to be converted
- * @param $isTitle Bool whether this conversion is for the article title
+ * @param string $text Text to be converted
+ * @param bool $isTitle Whether this conversion is for the article title
* @return string
* @todo this should get integrated somewhere sane
*/
@@ -3851,7 +3996,7 @@ class Language {
}
/**
- * @param $key string
+ * @param string $key
* @return string
*/
public function convertCategoryKey( $key ) {
@@ -3862,7 +4007,7 @@ class Language {
* Get the list of variants supported by this language
* see sample implementation in LanguageZh.php
*
- * @return array an array of language codes
+ * @return array An array of language codes
*/
public function getVariants() {
return $this->mConverter->getVariants();
@@ -3894,33 +4039,18 @@ class Language {
* possible that non-existing link in one variant
* actually exists in another variant. this function
* tries to find it. See e.g. LanguageZh.php
+ * The input parameters may be modified upon return
*
- * @param $link String: the name of the link
- * @param $nt Mixed: the title object of the link
- * @param $ignoreOtherCond Boolean: to disable other conditions when
- * we need to transclude a template or update a category's link
- * @return null the input parameters may be modified upon return
+ * @param string &$link The name of the link
+ * @param Title &$nt The title object of the link
+ * @param bool $ignoreOtherCond To disable other conditions when
+ * we need to transclude a template or update a category's link
*/
public function findVariantLink( &$link, &$nt, $ignoreOtherCond = false ) {
$this->mConverter->findVariantLink( $link, $nt, $ignoreOtherCond );
}
/**
- * If a language supports multiple variants, converts text
- * into an array of all possible variants of the text:
- * 'variant' => text in that variant
- *
- * @deprecated since 1.17 Use autoConvertToAllVariants()
- *
- * @param $text string
- *
- * @return string
- */
- public function convertLinkToAllVariants( $text ) {
- return $this->mConverter->convertLinkToAllVariants( $text );
- }
-
- /**
* returns language specific options used by User::getPageRenderHash()
* for example, the preferred language variant
*
@@ -3949,9 +4079,9 @@ class Language {
* This function is called "markNoConversion" for historical
* reasons.
*
- * @param $text String: text to be used for external link
- * @param $noParse bool: wrap it without confirming it's a real URL first
- * @return string the tagged text
+ * @param string $text Text to be used for external link
+ * @param bool $noParse Wrap it without confirming it's a real URL first
+ * @return string The tagged text
*/
public function markNoConversion( $text, $noParse = false ) {
// Excluding protocal-relative URLs may avoid many false positives.
@@ -3973,9 +4103,21 @@ class Language {
}
/**
+ * A regular expression character set to match legal word-prefixing
+ * characters which should be merged onto a link of the form foo[[bar]].
+ *
+ * @return string
+ */
+ public function linkPrefixCharset() {
+ return self::$dataCache->getItem( $this->mCode, 'linkPrefixCharset' );
+ }
+
+ /**
+ * @deprecated since 1.24, will be removed in 1.25
* @return Language
*/
function getLangObj() {
+ wfDeprecated( __METHOD__, '1.24' );
return $this;
}
@@ -4037,7 +4179,7 @@ class Language {
}
/**
- * @param $code string
+ * @param string $code
*/
public function setCode( $code ) {
$this->mCode = $code;
@@ -4048,17 +4190,14 @@ class Language {
/**
* 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
+ * @param string $prefix Prepend this to the filename
+ * @param string $code Language code
+ * @param string $suffix Append this to the filename
* @throws MWException
* @return string $prefix . $mangledCode . $suffix
*/
public static function getFileName( $prefix = 'Language', $code, $suffix = '.php' ) {
- // Protect against path traversal
- if ( !Language::isValidCode( $code )
- || strcspn( $code, ":/\\\000" ) !== strlen( $code ) )
- {
+ if ( !self::isValidBuiltInCode( $code ) ) {
throw new MWException( "Invalid language code \"$code\"" );
}
@@ -4067,9 +4206,9 @@ class Language {
/**
* 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
+ * @param string $filename $prefix . $languageCode . $suffix
+ * @param string $prefix Prefix before the language code
+ * @param string $suffix Suffix after the language code
* @return string Language code, or false if $prefix or $suffix isn't found
*/
public static function getCodeFromFileName( $filename, $prefix = 'Language', $suffix = '.php' ) {
@@ -4083,7 +4222,7 @@ class Language {
}
/**
- * @param $code string
+ * @param string $code
* @return string
*/
public static function getMessagesFileName( $code ) {
@@ -4094,7 +4233,22 @@ class Language {
}
/**
- * @param $code string
+ * @param string $code
+ * @return string
+ * @since 1.23
+ */
+ public static function getJsonMessagesFileName( $code ) {
+ global $IP;
+
+ if ( !self::isValidBuiltInCode( $code ) ) {
+ throw new MWException( "Invalid language code \"$code\"" );
+ }
+
+ return "$IP/languages/i18n/$code.json";
+ }
+
+ /**
+ * @param string $code
* @return string
*/
public static function getClassFileName( $code ) {
@@ -4105,7 +4259,7 @@ class Language {
/**
* Get the first fallback for a given language.
*
- * @param $code string
+ * @param string $code
*
* @return bool|string
*/
@@ -4123,7 +4277,7 @@ class Language {
* Get the ordered list of fallback languages.
*
* @since 1.19
- * @param $code string Language code
+ * @param string $code Language code
* @return array
*/
public static function getFallbacksFor( $code ) {
@@ -4145,7 +4299,7 @@ class Language {
*
* @since 1.22
* @param string $code Language code
- * @return array array( fallbacks, site fallbacks )
+ * @return array Array( fallbacks, site fallbacks )
*/
public static function getFallbacksIncludingSiteLanguage( $code ) {
global $wgLanguageCode;
@@ -4174,7 +4328,7 @@ class Language {
* WARNING: this may take a long time. If you just need all message *keys*
* but need the *contents* of only a few messages, consider using getMessageKeysFor().
*
- * @param $code string
+ * @param string $code
*
* @return array
*/
@@ -4185,8 +4339,8 @@ class Language {
/**
* Get a message for a given language
*
- * @param $key string
- * @param $code string
+ * @param string $key
+ * @param string $code
*
* @return string
*/
@@ -4199,15 +4353,15 @@ class Language {
* array_keys( Language::getMessagesFor( $code ) )
*
* @since 1.19
- * @param $code string Language code
- * @return array of message keys (strings)
+ * @param string $code Language code
+ * @return array Array of message keys (strings)
*/
public static function getMessageKeysFor( $code ) {
return self::getLocalisationCache()->getSubItemList( $code, 'messages' );
}
/**
- * @param $talk
+ * @param string $talk
* @return mixed
*/
function fixVariableInNamespace( $talk ) {
@@ -4228,7 +4382,7 @@ class Language {
}
/**
- * @param $m string
+ * @param string $m
* @return string
*/
function replaceGrammarInNamespace( $m ) {
@@ -4262,10 +4416,10 @@ class Language {
*
* @todo FIXME: why are we returnings DBMS-dependent strings???
*
- * @param $expiry String: Database expiry String
- * @param $format Bool|Int true to process using language functions, or TS_ constant
+ * @param string $expiry Database expiry String
+ * @param bool|int $format True to process using language functions, or TS_ constant
* to return the expiry in a given timestamp
- * @return String
+ * @return string
* @since 1.18
*/
public function formatExpiry( $expiry, $format = true ) {
@@ -4287,12 +4441,14 @@ class Language {
/**
* @todo Document
- * @param $seconds int|float
- * @param $format Array Optional
- * If $format['avoid'] == 'avoidseconds' - don't mention seconds if $seconds >= 1 hour
- * If $format['avoid'] == 'avoidminutes' - don't mention seconds/minutes if $seconds > 48 hours
- * If $format['noabbrevs'] is true - use 'seconds' and friends instead of 'seconds-abbrev' and friends
- * For backwards compatibility, $format may also be one of the strings 'avoidseconds' or 'avoidminutes'
+ * @param int|float $seconds
+ * @param array $format Optional
+ * If $format['avoid'] === 'avoidseconds': don't mention seconds if $seconds >= 1 hour.
+ * If $format['avoid'] === 'avoidminutes': don't mention seconds/minutes if $seconds > 48 hours.
+ * If $format['noabbrevs'] is true: use 'seconds' and friends instead of 'seconds-abbrev'
+ * and friends.
+ * For backwards compatibility, $format may also be one of the strings 'avoidseconds'
+ * or 'avoidminutes'.
* @return string
*/
function formatTimePeriod( $seconds, $format = array() ) {
@@ -4302,7 +4458,7 @@ class Language {
if ( !isset( $format['avoid'] ) ) {
$format['avoid'] = false;
}
- if ( !isset( $format['noabbrevs' ] ) ) {
+ if ( !isset( $format['noabbrevs'] ) ) {
$format['noabbrevs'] = false;
}
$secondsMsg = wfMessage(
@@ -4386,12 +4542,13 @@ class Language {
/**
* Format a bitrate for output, using an appropriate
- * unit (bps, kbps, Mbps, Gbps, Tbps, Pbps, Ebps, Zbps or Ybps) according to the magnitude in question
+ * unit (bps, kbps, Mbps, Gbps, Tbps, Pbps, Ebps, Zbps or Ybps) according to
+ * the magnitude in question.
*
* This use base 1000. For base 1024 use formatSize(), for another base
- * see formatComputingNumbers()
+ * see formatComputingNumbers().
*
- * @param $bps int
+ * @param int $bps
* @return string
*/
function formatBitrate( $bps ) {
@@ -4399,9 +4556,9 @@ class Language {
}
/**
- * @param $size int Size of the unit
- * @param $boundary int Size boundary (1000, or 1024 in most cases)
- * @param $messageKey string Message key to be uesd
+ * @param int $size Size of the unit
+ * @param int $boundary Size boundary (1000, or 1024 in most cases)
+ * @param string $messageKey Message key to be uesd
* @return string
*/
function formatComputingNumbers( $size, $boundary, $messageKey ) {
@@ -4439,7 +4596,7 @@ class Language {
* This method use base 1024. For base 1000 use formatBitrate(), for
* another base see formatComputingNumbers()
*
- * @param $size int Size to format
+ * @param int $size Size to format
* @return string Plain text (not HTML)
*/
function formatSize( $size ) {
@@ -4449,11 +4606,11 @@ class Language {
/**
* Make a list item, used by various special pages
*
- * @param $page String Page link
- * @param $details String Text between brackets
- * @param $oppositedm Boolean Add the direction mark opposite to your
- * language, to display text properly
- * @return String
+ * @param string $page Page link
+ * @param string $details Text between brackets
+ * @param bool $oppositedm Add the direction mark opposite to your
+ * language, to display text properly
+ * @return string
*/
function specialList( $page, $details, $oppositedm = true ) {
$dirmark = ( $oppositedm ? $this->getDirMark( true ) : '' ) .
@@ -4466,14 +4623,16 @@ class Language {
/**
* Generate (prev x| next x) (20|50|100...) type links for paging
*
- * @param $title Title object to link
- * @param $offset Integer offset parameter
- * @param $limit Integer limit parameter
- * @param $query array|String optional URL query parameter string
- * @param $atend Bool optional param for specified if this is the last page
- * @return String
+ * @param Title $title Title object to link
+ * @param int $offset
+ * @param int $limit
+ * @param array $query Optional URL query parameter string
+ * @param bool $atend Optional param for specified if this is the last page
+ * @return string
*/
- public function viewPrevNext( Title $title, $offset, $limit, array $query = array(), $atend = false ) {
+ public function viewPrevNext( Title $title, $offset, $limit,
+ array $query = array(), $atend = false
+ ) {
// @todo FIXME: Why on earth this needs one message for the text and another one for tooltip?
# Make 'previous' link
@@ -4508,18 +4667,22 @@ class Language {
/**
* Helper function for viewPrevNext() that generates links
*
- * @param $title Title object to link
- * @param $offset Integer offset parameter
- * @param $limit Integer limit parameter
- * @param $query Array extra query parameters
- * @param $link String text to use for the link; will be escaped
- * @param $tooltipMsg String name of the message to use as tooltip
- * @param $class String value of the "class" attribute of the link
- * @return String HTML fragment
- */
- private function numLink( Title $title, $offset, $limit, array $query, $link, $tooltipMsg, $class ) {
+ * @param Title $title Title object to link
+ * @param int $offset
+ * @param int $limit
+ * @param array $query Extra query parameters
+ * @param string $link Text to use for the link; will be escaped
+ * @param string $tooltipMsg Name of the message to use as tooltip
+ * @param string $class Value of the "class" attribute of the link
+ * @return string HTML fragment
+ */
+ private function numLink( Title $title, $offset, $limit, array $query, $link,
+ $tooltipMsg, $class
+ ) {
$query = array( 'limit' => $limit, 'offset' => $offset ) + $query;
- $tooltip = wfMessage( $tooltipMsg )->inLanguage( $this )->title( $title )->numParams( $limit )->text();
+ $tooltip = wfMessage( $tooltipMsg )->inLanguage( $this )->title( $title )
+ ->numParams( $limit )->text();
+
return Html::element( 'a', array( 'href' => $title->getLocalURL( $query ),
'title' => $tooltip, 'class' => $class ), $link );
}
@@ -4592,6 +4755,7 @@ class Language {
/**
* Find the index number of the plural rule appropriate for the given number
+ * @param int $number
* @return int The index number of the plural rule
*/
public function getPluralRuleIndexNumber( $number ) {
@@ -4605,6 +4769,7 @@ class Language {
* For example, if the language is set to Arabic, getPluralType(5) should
* return 'few'.
* @since 1.22
+ * @param int $number
* @return string The name of the plural rule type, e.g. one, two, few, many
*/
public function getPluralRuleType( $number ) {
diff --git a/languages/LanguageConverter.php b/languages/LanguageConverter.php
index 96a71a09..eae77fb4 100644
--- a/languages/LanguageConverter.php
+++ b/languages/LanguageConverter.php
@@ -1,7 +1,5 @@
<?php
/**
- * Contains the LanguageConverter class and ConverterRule class
- *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -26,10 +24,11 @@
* @ingroup Language
*
* @author Zhengzhu Feng <zhengzhu@gmail.com>
- * @maintainers fdcn <fdcn64@gmail.com>, shinjiman <shinjiman@gmail.com>, PhiLiP <philip.npc@gmail.com>
+ * @author fdcn <fdcn64@gmail.com>
+ * @author shinjiman <shinjiman@gmail.com>
+ * @author PhiLiP <philip.npc@gmail.com>
*/
class LanguageConverter {
-
/**
* languages supporting variants
* @since 1.20
@@ -55,7 +54,7 @@ class LanguageConverter {
public $mManualLevel;
/**
- * @var String: memcached key name
+ * @var string Memcached key name
*/
public $mCacheKey;
@@ -70,17 +69,17 @@ class LanguageConverter {
public $mMaxDepth = 10;
public $mVarSeparatorPattern;
- const CACHE_VERSION_KEY = 'VERSION 6';
+ const CACHE_VERSION_KEY = 'VERSION 7';
/**
* Constructor
*
- * @param $langobj Language: 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
+ * @param Language $langobj
+ * @param string $maincode The main language code of this language
+ * @param array $variants The supported variants of this language
+ * @param array $variantfallbacks The fallback language of each variant
+ * @param array $flags Defining the custom strings that maps to the flags
+ * @param array $manualLevel Limit for supported variants
*/
public function __construct( $langobj, $maincode, $variants = array(),
$variantfallbacks = array(), $flags = array(),
@@ -102,8 +101,7 @@ class LanguageConverter {
'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)
+ 'H' => 'H', // add rule for convert code (but no display in placed code)
'N' => 'N' // current variant name
);
$this->mFlags = array_merge( $defaultflags, $flags );
@@ -121,7 +119,7 @@ class LanguageConverter {
* Get all valid variants.
* Call this instead of using $this->mVariants directly.
*
- * @return Array: contains all valid variants
+ * @return array Contains all valid variants
*/
public function getVariants() {
return $this->mVariants;
@@ -134,9 +132,9 @@ class LanguageConverter {
* when zh-sg is preferred but not defined, we will pick zh-hans
* in this case. Right now this is only used by zh.
*
- * @param $variant String: the language code of the variant
- * @return String|array: The code of the fallback language or the
- * main code if there is no fallback
+ * @param string $variant The language code of the variant
+ * @return string|array The code of the fallback language or the
+ * main code if there is no fallback
*/
public function getVariantFallbacks( $variant ) {
if ( isset( $this->mVariantFallbacks[$variant] ) ) {
@@ -147,7 +145,7 @@ class LanguageConverter {
/**
* Get the title produced by the conversion rule.
- * @return String: The converted title text
+ * @return string The converted title text
*/
public function getConvRuleTitle() {
return $this->mConvRuleTitle;
@@ -155,7 +153,7 @@ class LanguageConverter {
/**
* Get preferred language variant.
- * @return String: the preferred language code
+ * @return string The preferred language code
*/
public function getPreferredVariant() {
global $wgDefaultLanguageVariant, $wgUser;
@@ -185,7 +183,7 @@ class LanguageConverter {
/**
* Get default variant.
* This function would not be affected by user's settings
- * @return String: the default variant code
+ * @return string The default variant code
*/
public function getDefaultVariant() {
global $wgDefaultLanguageVariant;
@@ -208,8 +206,8 @@ class LanguageConverter {
/**
* Validate the variant
- * @param $variant String: the variant to validate
- * @return Mixed: returns the variant if it is valid, null otherwise
+ * @param string $variant The variant to validate
+ * @return mixed Returns the variant if it is valid, null otherwise
*/
public function validateVariant( $variant = null ) {
if ( $variant !== null && in_array( $variant, $this->mVariants ) ) {
@@ -221,7 +219,7 @@ class LanguageConverter {
/**
* Get the variant specified in the URL
*
- * @return Mixed: variant if one found, false otherwise.
+ * @return mixed Variant if one found, false otherwise.
*/
public function getURLVariant() {
global $wgRequest;
@@ -237,13 +235,14 @@ class LanguageConverter {
$ret = $wgRequest->getVal( 'uselang' );
}
- return $this->mURLVariant = $this->validateVariant( $ret );
+ $this->mURLVariant = $this->validateVariant( $ret );
+ return $this->mURLVariant;
}
/**
* Determine if the user has a variant set.
*
- * @return Mixed: variant if one found, false otherwise.
+ * @return mixed Variant if one found, false otherwise.
*/
protected function getUserVariant() {
global $wgUser, $wgContLang;
@@ -270,13 +269,14 @@ class LanguageConverter {
$ret = $wgUser->getOption( 'language' );
}
- return $this->mUserVariant = $this->validateVariant( $ret );
+ $this->mUserVariant = $this->validateVariant( $ret );
+ return $this->mUserVariant;
}
/**
* Determine the language variant from the Accept-Language header.
*
- * @return Mixed: variant if one found, false otherwise.
+ * @return mixed Variant if one found, false otherwise.
*/
protected function getHeaderVariant() {
global $wgRequest;
@@ -331,9 +331,9 @@ class LanguageConverter {
* If you want to parse rules, try to use convert() or
* convertTo().
*
- * @param $text String the text to be converted
- * @param $toVariant bool|string the target language code
- * @return String the converted text
+ * @param string $text The text to be converted
+ * @param bool|string $toVariant The target language code
+ * @return string The converted text
*/
public function autoConvert( $text, $toVariant = false ) {
wfProfileIn( __METHOD__ );
@@ -402,9 +402,9 @@ class LanguageConverter {
$startPos = $elementPos + strlen( $element );
// Translate any alt or title attributes inside the matched element
- if ( $element !== '' && preg_match( '/^(<[^>\s]*)\s([^>]*)(.*)$/', $element,
- $elementMatches ) )
- {
+ if ( $element !== ''
+ && preg_match( '/^(<[^>\s]*)\s([^>]*)(.*)$/', $element, $elementMatches )
+ ) {
$attrs = Sanitizer::decodeTagAttributes( $elementMatches[2] );
$changed = false;
foreach ( array( 'title', 'alt' ) as $attrName ) {
@@ -455,9 +455,9 @@ class LanguageConverter {
* Doesn't parse rules or do any of that other stuff, for that use
* convert() or convertTo().
*
- * @param $text String: text to convert
- * @param $variant String: variant language code
- * @return String: translated text
+ * @param string $text Text to convert
+ * @param string $variant Variant language code
+ * @return string Translated text
*/
public function translate( $text, $variant ) {
wfProfileIn( __METHOD__ );
@@ -474,8 +474,8 @@ class LanguageConverter {
/**
* Call translate() to convert text to all valid variants.
*
- * @param $text String: the text to be converted
- * @return Array: variant => converted text
+ * @param string $text The text to be converted
+ * @return array Variant => converted text
*/
public function autoConvertToAllVariants( $text ) {
wfProfileIn( __METHOD__ );
@@ -491,24 +491,9 @@ class LanguageConverter {
}
/**
- * Convert link text to all valid variants.
- * In the first, this function only convert text outside the
- * "-{" "}-" markups. Since the "{" and "}" are not allowed in
- * titles, the text will get all converted always.
- * So I removed this feature and deprecated the function.
- *
- * @param $text String: the text to be converted
- * @return Array: variant => converted text
- * @deprecated since 1.17 Use autoConvertToAllVariants() instead
- */
- public function convertLinkToAllVariants( $text ) {
- return $this->autoConvertToAllVariants( $text );
- }
-
- /**
* Apply manual conversion rules.
*
- * @param $convRule ConverterRule Object of ConverterRule
+ * @param ConverterRule $convRule
*/
protected function applyManualConv( $convRule ) {
// Use syntax -{T|zh-cn:TitleCN; zh-tw:TitleTw}- to custom
@@ -548,8 +533,8 @@ class LanguageConverter {
* Auto convert a Title object to a readable string in the
* preferred variant.
*
- * @param $title Title a object of Title
- * @return String: converted title text
+ * @param Title $title A object of Title
+ * @return string Converted title text
*/
public function convertTitle( $title ) {
$variant = $this->getPreferredVariant();
@@ -566,9 +551,9 @@ class LanguageConverter {
/**
* Get the namespace display name in the preferred variant.
*
- * @param $index int namespace id
- * @param $variant string|null variant code or null for preferred variant
- * @return String: namespace name for display
+ * @param int $index Namespace id
+ * @param string|null $variant Variant code or null for preferred variant
+ * @return string Namespace name for display
*/
public function convertNamespace( $index, $variant = null ) {
if ( $variant === null ) {
@@ -605,8 +590,8 @@ class LanguageConverter {
* -{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
+ * @param string $text Text to be converted
+ * @return string Converted text
*/
public function convert( $text ) {
$variant = $this->getPreferredVariant();
@@ -616,9 +601,9 @@ class LanguageConverter {
/**
* Same as convert() except a extra parameter to custom variant.
*
- * @param $text String: text to be converted
- * @param $variant String: the target variant code
- * @return String: converted text
+ * @param string $text Text to be converted
+ * @param string $variant The target variant code
+ * @return string Converted text
*/
public function convertTo( $text, $variant ) {
global $wgDisableLangConversion;
@@ -634,10 +619,10 @@ class LanguageConverter {
* Recursively convert text on the outside. Allow to use nested
* markups to custom rules.
*
- * @param $text String: text to be converted
- * @param $variant String: the target variant code
- * @param $depth Integer: depth of recursion
- * @return String: converted text
+ * @param string $text Text to be converted
+ * @param string $variant The target variant code
+ * @param int $depth Depth of recursion
+ * @return string Converted text
*/
protected function recursiveConvertTopLevel( $text, $variant, $depth = 0 ) {
$startPos = 0;
@@ -673,13 +658,13 @@ class LanguageConverter {
/**
* Recursively convert text on the inside.
*
- * @param $text String: text to be converted
- * @param $variant String: the target variant code
- * @param $startPos int
- * @param $depth Integer: depth of recursion
+ * @param string $text Text to be converted
+ * @param string $variant The target variant code
+ * @param int $startPos
+ * @param int $depth Depth of recursion
*
* @throws MWException
- * @return String: converted text
+ * @return string Converted text
*/
protected function recursiveConvertRule( $text, $variant, &$startPos, $depth = 0 ) {
// Quick sanity check (no function calls)
@@ -752,12 +737,12 @@ class LanguageConverter {
* If a language supports multiple variants, it is possible that
* non-existing link in one variant actually exists in another variant.
* This function tries to find it. See e.g. LanguageZh.php
+ * The input parameters may be modified upon return
*
- * @param $link String: the name of the link
- * @param $nt Mixed: the title object of the link
- * @param $ignoreOtherCond Boolean: to disable other conditions when
- * we need to transclude a template or update a category's link
- * @return Null, the input parameters may be modified upon return
+ * @param string &$link The name of the link
+ * @param Title &$nt The title object of the link
+ * @param bool $ignoreOtherCond To disable other conditions when
+ * we need to transclude a template or update a category's link
*/
public function findVariantLink( &$link, &$nt, $ignoreOtherCond = false ) {
# If the article has already existed, there is no need to
@@ -766,10 +751,12 @@ class LanguageConverter {
return;
}
- global $wgDisableLangConversion, $wgDisableTitleConversion, $wgRequest,
- $wgUser;
+ global $wgDisableLangConversion, $wgDisableTitleConversion, $wgRequest;
$isredir = $wgRequest->getText( 'redirect', 'yes' );
$action = $wgRequest->getText( 'action' );
+ if ( $action == 'edit' && $wgRequest->getBool( 'redlink' ) ) {
+ $action = 'view';
+ }
$linkconvert = $wgRequest->getText( 'linkconvert', 'yes' );
$disableLinkConversion = $wgDisableLangConversion
|| $wgDisableTitleConversion;
@@ -778,12 +765,11 @@ class LanguageConverter {
$ns = NS_MAIN;
if ( $disableLinkConversion ||
- ( !$ignoreOtherCond &&
- ( $isredir == 'no'
- || $action == 'edit'
- || $action == 'submit'
- || $linkconvert == 'no'
- || $wgUser->getOption( 'noconvertlink' ) == 1 ) ) ) {
+ ( !$ignoreOtherCond &&
+ ( $isredir == 'no'
+ || $action == 'edit'
+ || $action == 'submit'
+ || $linkconvert == 'no' ) ) ) {
return;
}
@@ -827,15 +813,16 @@ class LanguageConverter {
*/
public function getExtraHashOptions() {
$variant = $this->getPreferredVariant();
+
return '!' . $variant;
}
/**
* Guess if a text is written in a variant. This should be implemented in subclasses.
*
- * @param string $text the text to be checked
- * @param string $variant language code of the variant to be checked for
- * @return bool true if $text appears to be written in $variant, false if not
+ * @param string $text The text to be checked
+ * @param string $variant Language code of the variant to be checked for
+ * @return bool True if $text appears to be written in $variant, false if not
*
* @author Nikola Smolenski <smolensk@eunet.rs>
* @since 1.19
@@ -853,13 +840,14 @@ class LanguageConverter {
*/
function loadDefaultTables() {
$name = get_class( $this );
+
throw new MWException( "Must implement loadDefaultTables() method in class $name" );
}
/**
* Load conversion tables either from the cache or the disk.
* @private
- * @param $fromCache Boolean: load from memcached? Defaults to true.
+ * @param bool $fromCache Load from memcached? Defaults to true.
*/
function loadTables( $fromCache = true ) {
global $wgLangConvMemc;
@@ -876,8 +864,7 @@ class LanguageConverter {
$this->mTables = $wgLangConvMemc->get( $this->mCacheKey );
wfProfileOut( __METHOD__ . '-cache' );
}
- if ( !$this->mTables
- || !array_key_exists( self::CACHE_VERSION_KEY, $this->mTables ) ) {
+ 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
@@ -900,7 +887,8 @@ class LanguageConverter {
/**
* Hook for post processing after conversion tables are loaded.
*/
- function postLoadTables() { }
+ function postLoadTables() {
+ }
/**
* Reload the conversion tables.
@@ -911,6 +899,7 @@ class LanguageConverter {
if ( $this->mTables ) {
unset( $this->mTables );
}
+
$this->mTablesLoaded = false;
$this->loadTables( false );
}
@@ -928,9 +917,9 @@ class LanguageConverter {
* To make the tables more manageable, subpages are allowed
* and will be parsed recursively if $recursive == true.
*
- * @param $code String: language code
- * @param $subpage String: subpage name
- * @param $recursive Boolean: parse subpages recursively? Defaults to true.
+ * @param string $code Language code
+ * @param string $subpage Subpage name
+ * @param bool $recursive Parse subpages recursively? Defaults to true.
*
* @return array
*/
@@ -1004,8 +993,7 @@ class LanguageConverter {
continue;
}
$mappings = explode( '}-', $block, 2 );
- $stripped = str_replace( array( "'", '"', '*', '#' ), '',
- $mappings[0] );
+ $stripped = str_replace( array( "'", '"', '*', '#' ), '', $mappings[0] );
$table = StringUtils::explode( ';', $stripped );
foreach ( $table as $t ) {
$m = explode( '=>', $t, 3 );
@@ -1038,9 +1026,9 @@ class LanguageConverter {
* Enclose a string with the "no conversion" tag. This is used by
* various functions in the Parser.
*
- * @param $text String: text to be tagged for no conversion
- * @param $noParse Boolean: unused
- * @return String: the tagged text
+ * @param string $text Text to be tagged for no conversion
+ * @param bool $noParse Unused
+ * @return string The tagged text
*/
public function markNoConversion( $text, $noParse = false ) {
# don't mark if already marked
@@ -1056,7 +1044,7 @@ class LanguageConverter {
* Convert the sorting key for category links. This should make different
* keys that are variants of each other map to the same key.
*
- * @param $key string
+ * @param string $key
*
* @return string
*/
@@ -1069,16 +1057,16 @@ class LanguageConverter {
* MediaWiki:Conversiontable* is updated.
* @private
*
- * @param $page WikiPage object
- * @param $user Object: User object for the current user
- * @param $content Content: new page content
- * @param $summary String: edit summary of the edit
- * @param $isMinor Boolean: was the edit marked as minor?
- * @param $isWatch Boolean: did the user watch this page or not?
- * @param $section
- * @param $flags int Bitfield
- * @param $revision Object: new Revision object or null
- * @return Boolean: true
+ * @param WikiPage $page
+ * @param User $user User object for the current user
+ * @param Content $content New page content
+ * @param string $summary Edit summary of the edit
+ * @param bool $isMinor Was the edit marked as minor?
+ * @param null $isWatch Unused.
+ * @param null $section Unused.
+ * @param int $flags Bitfield
+ * @param Revision|null $revision New Revision object or null
+ * @return bool True
*/
function OnPageContentSaveComplete( $page, $user, $content, $summary, $isMinor,
$isWatch, $section, $flags, $revision ) {
@@ -1100,9 +1088,9 @@ class LanguageConverter {
* Armour rendered math against conversion.
* Escape special chars in parsed math text. (in most cases are img elements)
*
- * @param $text String: text to armour against conversion
- * @return String: armoured text where { and } have been converted to
- * &#123; and &#125;
+ * @param string $text Text to armour against conversion
+ * @return string Armoured text where { and } have been converted to
+ * &#123; and &#125;
* @deprecated since 1.22 is no longer used
*/
public function armourMath( $text ) {
@@ -1114,6 +1102,7 @@ class LanguageConverter {
/**
* Get the cached separator pattern for ConverterRule::parseRules()
+ * @return string
*/
function getVarSeparatorPattern() {
if ( is_null( $this->mVarSeparatorPattern ) ) {
@@ -1141,485 +1130,3 @@ class LanguageConverter {
return $this->mVarSeparatorPattern;
}
}
-
-/**
- * Parser for rules of language conversion , parse rules in -{ }- tag.
- * @ingroup Language
- * @author fdcn <fdcn64@gmail.com>, PhiLiP <philip.npc@gmail.com>
- */
-class ConverterRule {
- public $mText; // original text in -{text}-
- public $mConverter; // LanguageConverter object
- public $mRuleDisplay = '';
- public $mRuleTitle = false;
- public $mRules = '';// string : the text of the rules
- public $mRulesAction = 'none';
- public $mFlags = array();
- public $mVariantFlags = array();
- public $mConvTable = array();
- public $mBidtable = array();// array of the translation in each variant
- public $mUnidtable = array();// array of the translation in each variant
-
- /**
- * Constructor
- *
- * @param $text String: the text between -{ and }-
- * @param $converter LanguageConverter object
- */
- public function __construct( $text, $converter ) {
- $this->mText = $text;
- $this->mConverter = $converter;
- }
-
- /**
- * Check if variants array in convert array.
- *
- * @param $variants Array or string: variant language code
- * @return String: translated text
- */
- 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() {
- $text = $this->mText;
- $flags = array();
- $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;
- }
- }
- $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( '+' => true, 'H' => true );
- if ( isset( $flags['T'] ) ) {
- $temp['T'] = true;
- }
- if ( isset( $flags['D'] ) ) {
- $temp['D'] = true;
- }
- $flags = $temp;
- } else {
- if ( isset( $flags['A'] ) ) {
- $flags['+'] = true;
- $flags['S'] = true;
- }
- if ( isset( $flags['D'] ) ) {
- unset( $flags['S'] );
- }
- // 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();
- }
- }
- $this->mVariantFlags = $variantFlags;
- $this->mRules = $text;
- $this->mFlags = $flags;
- }
-
- /**
- * Generate conversion table.
- * @private
- */
- function parseRules() {
- $rules = $this->mRules;
- $bidtable = array();
- $unidtable = array();
- $variants = $this->mConverter->mVariants;
- $varsep_pattern = $this->mConverter->getVarSeparatorPattern();
-
- // Split according to $varsep_pattern, but ignore semicolons from HTML entities
- $rules = preg_replace( '/(&[#a-zA-Z0-9]+);/', "$1\x01", $rules );
- $choice = preg_split( $varsep_pattern, $rules );
- $choice = str_replace( "\x01", ';', $choice );
-
- 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 ) ) {
- $bidtable[$v] = $to;
- } 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 ( !isset( $this->mConverter->mVariantNames[$v] ) ) {
- $bidtable = array();
- $unidtable = array();
- break;
- }
- }
- $this->mBidtable = $bidtable;
- $this->mUnidtable = $unidtable;
- }
-
- /**
- * @private
- *
- * @return string
- */
- 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";
- }
- }
- return $text;
- }
-
- /**
- * Parse rules conversion.
- * @private
- *
- * @param $variant
- *
- * @return string
- */
- function getRuleConvertedStr( $variant ) {
- $bidtable = $this->mBidtable;
- $unidtable = $this->mUnidtable;
-
- if ( count( $bidtable ) + count( $unidtable ) == 0 ) {
- return $this->mRules;
- } else {
- // display current variant in bidirectional array
- $disp = $this->getTextInBidtable( $variant );
- // or display current variant in fallbacks
- if ( !$disp ) {
- $disp = $this->getTextInBidtable(
- $this->mConverter->getVariantFallbacks( $variant ) );
- }
- // or display current variant in unidirectional array
- 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 );
- $disp = $disp[0];
- } else {
- $disp = array_values( $unidtable );
- $disp = array_values( $disp[0] );
- $disp = $disp[0];
- }
- }
- return $disp;
- }
- }
-
- /**
- * Similar to getRuleConvertedStr(), but this prefers to use original
- * page title if $variant === $this->mConverter->mMainLanguageCode
- * and may return false in this case (so this title conversion rule
- * will be ignored and the original title is shown).
- *
- * @since 1.22
- * @param $variant The variant code to display page title in
- * @return String|false The converted title or false if just page name
- */
- function getRuleConvertedTitle( $variant ) {
- if ( $variant === $this->mConverter->mMainLanguageCode ) {
- // If a string targeting exactly this variant is set,
- // use it. Otherwise, just return false, so the real
- // page name can be shown (and because variant === main,
- // there'll be no further automatic conversion).
- $disp = $this->getTextInBidtable( $variant );
- if ( $disp ) {
- return $disp;
- }
- if ( array_key_exists( $variant, $this->mUnidtable ) ) {
- $disp = array_values( $this->mUnidtable[$variant] );
- $disp = $disp[0];
- }
- // Assigned above or still false.
- return $disp;
- } else {
- return $this->getRuleConvertedStr( $variant );
- }
- }
-
- /**
- * Generate conversion table for all text.
- * @private
- */
- 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 ) {
- /* for bidirectional array
- fill in the missing variants, if any,
- with fallbacks */
- if ( !isset( $bidtable[$v] ) ) {
- $variantFallbacks =
- $this->mConverter->getVariantFallbacks( $v );
- $vf = $this->getTextInBidtable( $variantFallbacks );
- if ( $vf ) {
- $bidtable[$v] = $vf;
- }
- }
-
- 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];
- }
- if ( $manLevel[$vo] == 'bidirectional' ) {
- $this->mConvTable[$vo][$bidtable[$v]] = $bidtable[$vo];
- }
- }
- $vmarked[] = $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.
- * @param $variant String: variant language code
- */
- public function parse( $variant = null ) {
- if ( !$variant ) {
- $variant = $this->mConverter->getPreferredVariant();
- }
-
- $this->parseFlags();
- $flags = $this->mFlags;
-
- // convert to specified variant
- // syntax: -{zh-hans;zh-hant[;...]|<text to convert>}-
- 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,
- // then we check its fallback variants.
- $variantFallbacks =
- $this->mConverter->getVariantFallbacks( $variant );
- if ( is_array( $variantFallbacks ) ) {
- foreach ( $variantFallbacks as $variantFallback ) {
- // if current variant's fallback exist in flags
- if ( isset( $this->mVariantFlags[$variantFallback] ) ) {
- // then convert <text to convert> to fallback language
- $this->mRules =
- $this->mConverter->autoConvert( $this->mRules,
- $variantFallback );
- break;
- }
- }
- }
- }
- $this->mFlags = $flags = array( 'R' => true );
- }
-
- 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 ( !$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 ) {
- $this->mBidtable[$v] = $rules;
- }
- } 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->getRuleConvertedTitle( $variant );
- $this->mRuleDisplay = '';
- break;
- default:
- // ignore unknown flags (but see error case below)
- }
- }
- if ( $this->mRuleDisplay === false ) {
- $this->mRuleDisplay = '<span class="error">'
- . wfMessage( 'converter-manual-rule-error' )->inContentLanguage()->escaped()
- . '</span>';
- }
-
- $this->generateConvTable();
- }
-
- /**
- * @todo FIXME: code this function :)
- */
- public function hasRules() {
- // TODO:
- }
-
- /**
- * Get display text on markup -{...}-
- * @return string
- */
- public function getDisplay() {
- return $this->mRuleDisplay;
- }
-
- /**
- * Get converted title.
- * @return string
- */
- public function getTitle() {
- return $this->mRuleTitle;
- }
-
- /**
- * Return how deal with conversion rules.
- * @return string
- */
- public function getRulesAction() {
- return $this->mRulesAction;
- }
-
- /**
- * Get conversion table. (bidirectional and unidirectional
- * conversion table)
- * @return array
- */
- public function getConvTable() {
- return $this->mConvTable;
- }
-
- /**
- * Get conversion rules string.
- * @return string
- */
- public function getRules() {
- return $this->mRules;
- }
-
- /**
- * Get conversion flags.
- * @return array
- */
- public function getFlags() {
- return $this->mFlags;
- }
-}
diff --git a/languages/Names.php b/languages/Names.php
index 929c513d..90046765 100644
--- a/languages/Names.php
+++ b/languages/Names.php
@@ -33,7 +33,7 @@
* Some writing systems require some line-height fixes. This includes
* most Indic scripts, like Devanagari.
* If you are adding support for such a language, add it also to
- * the relevant section in skins/common/shared.css.
+ * the relevant section in shared.css.
*
* @ingroup Language
*/
@@ -47,11 +47,12 @@
'als' => 'Alemannisch', # Alemannic -- not a valid code, for compatibility. See gsw.
'am' => 'አማርኛ', # Amharic
'an' => 'aragonés', # Aragonese
- 'ang' => 'Ænglisc', # Old English (Bug 23283)
+ 'ang' => 'Ænglisc', # Old English, bug 23283
'anp' => 'अङ्गिका', # Angika
'ar' => 'العربية', # Arabic
'arc' => 'ܐܪܡܝܐ', # Aramaic
'arn' => 'mapudungun', # Mapuche, Mapudungu, Araucanian (Araucano)
+ 'arq' => 'جازايرية', # Algerian Spoken Arabic
'ary' => 'Maġribi', # Moroccan Spoken Arabic
'arz' => 'مصرى', # Egyptian Spoken Arabic
'as' => 'অসমীয়া', # Assamese
@@ -70,9 +71,9 @@
'bcl' => 'Bikol Central', # Bikol: Central Bicolano language
'be' => 'беларуская', # Belarusian normative
'be-tarask' => "беларуская (тарашкевіца)\xE2\x80\x8E", # Belarusian in Taraskievica orthography
- 'be-x-old' => "беларуская (тарашкевіца)\xE2\x80\x8E", # Belarusian in Taraskievica orthography; compat link
+ 'be-x-old' => "беларуская (тарашкевіца)\xE2\x80\x8E", # (be-tarask compat)
'bg' => 'български', # Bulgarian
- 'bh' => 'भोजपुरी', # Bihari macro language. Falls back to Bhojpuri (bho). The name actually says "Bhojpuri".
+ 'bh' => 'भोजपुरी', # Bihari macro language. Falls back to Bhojpuri (bho)
'bho' => 'भोजपुरी', # Bhojpuri
'bi' => 'Bislama', # Bislama
'bjn' => 'Bahasa Banjar', # Banjarese
@@ -102,9 +103,9 @@
'crh' => 'qırımtatarca', # Crimean Tatar (multiple scripts - defaults to Latin)
'crh-latn' => "qırımtatarca (Latin)\xE2\x80\x8E", # Crimean Tatar (Latin)
'crh-cyrl' => "къырымтатарджа (Кирилл)\xE2\x80\x8E", # Crimean Tatar (Cyrillic)
- 'cs' => 'česky', # Czech
+ 'cs' => 'čeština', # Czech
'csb' => 'kaszëbsczi', # Cassubian
- 'cu' => 'словѣ́ньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ', # Old Church Slavonic (ancient language)
+ 'cu' => 'словѣньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ', # Old Church Slavonic (ancient language)
'cv' => 'Чӑвашла', # Chuvash
'cy' => 'Cymraeg', # Welsh
'da' => 'dansk', # Danish
@@ -151,6 +152,7 @@
'gl' => 'galego', # Galician
'glk' => 'گیلکی', # Gilaki
'gn' => 'Avañe\'ẽ', # Guaraní, Paraguayan
+ 'gom-latn' => 'Konknni', # Goan Konkani (Latin script)
'got' => '𐌲𐌿𐍄𐌹𐍃𐌺', # Gothic
'grc' => 'Ἀρχαία ἑλληνικὴ', # Ancient Greek
'gsw' => 'Alemannisch', # Alemannic
@@ -166,6 +168,7 @@
'hil' => 'Ilonggo', # Hiligaynon
'ho' => 'Hiri Motu', # Hiri Motu
'hr' => 'hrvatski', # Croatian
+ 'hrx' => 'Hunsrik', # Riograndenser Hunsrückisch
'hsb' => 'hornjoserbsce', # Upper Sorbian
'ht' => 'Kreyòl ayisyen', # Haitian Creole French
'hu' => 'magyar', # Hungarian
@@ -177,14 +180,14 @@
'ig' => 'Igbo', # Igbo
'ii' => 'ꆇꉙ', # Sichuan Yi
'ik' => 'Iñupiak', # Inupiak (Inupiatun, Northwest Alaska / Inupiatun, North Alaskan)
- 'ike-cans' => 'ᐃᓄᒃᑎᑐᑦ', # Inuktitut, Eastern Canadian/Eastern Canadian "Eskimo"/"Eastern Arctic Eskimo"/Inuit (Unified Canadian Aboriginal Syllabics)
+ 'ike-cans' => 'ᐃᓄᒃᑎᑐᑦ', # Inuktitut, Eastern Canadian (Unified Canadian Aboriginal Syllabics)
'ike-latn' => 'inuktitut', # Inuktitut, Eastern Canadian (Latin script)
'ilo' => 'Ilokano', # Ilokano
'inh' => 'ГӀалгӀай', # Ingush
'io' => 'Ido', # Ido
'is' => 'íslenska', # Icelandic
'it' => 'italiano', # Italian
- 'iu' => 'ᐃᓄᒃᑎᑐᑦ/inuktitut', # Inuktitut (macro language - do no localise, see ike/ikt - falls back to ike-cans)
+ 'iu' => 'ᐃᓄᒃᑎᑐᑦ/inuktitut', # Inuktitut (macro language, see ike/ikt, falls back to ike-cans)
'ja' => '日本語', # Japanese
'jam' => 'Patois', # Jamaican Creole English
'jbo' => 'Lojban', # Lojban
@@ -240,12 +243,13 @@
'lmo' => 'lumbaart', # Lombard
'ln' => 'lingála', # Lingala
'lo' => 'ລາວ', # Laotian
+ 'lrc' => 'لوری', # Northern Luri
'loz' => 'Silozi', # Lozi
'lt' => 'lietuvių', # Lithuanian
'ltg' => 'latgaļu', # Latgalian
'lus' => 'Mizo ţawng', # Mizo/Lushai
'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
+ 'lzh' => '文言', # Literary Chinese, bug 8217
'lzz' => 'Lazuri', # Laz
'mai' => 'मैथिली', # Maithili
'map-bms' => 'Basa Banyumasan', # Banyumasan
@@ -269,8 +273,8 @@
'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
+ 'nah' => 'Nāhuatl', # Nahuatl (not in ISO 639-3)
+ 'nan' => 'Bân-lâm-gú', # Min-nan, bug 8217
'nap' => 'Napulitano', # Neapolitan, bug 43793
'nb' => "norsk bokmål", # Norwegian (Bokmal)
'nds' => 'Plattdüütsch', # Low German ''or'' Low Saxon
@@ -291,7 +295,7 @@
'oc' => 'occitan', # Occitan
'om' => 'Oromoo', # Oromo
'or' => 'ଓଡ଼ିଆ', # Oriya
- 'os' => 'Ирон', # Ossetic -- fixed per bug 29091
+ 'os' => 'Ирон', # Ossetic, bug 29091
'pa' => 'ਪੰਜਾਬੀ', # Eastern Punjabi (Gurmukhi script) (pan)
'pag' => 'Pangasinan', # Pangasinan
'pam' => 'Kapampangan', # Pampanga
@@ -311,7 +315,7 @@
'pt' => 'português', # Portuguese
'pt-br' => 'português do Brasil', # Brazilian Portuguese
'qu' => 'Runa Simi', # Southern Quechua
- 'qug' => 'Runa shimi', # Kichwa/Northern Quechua (one of the codes it covers; temporarily used until Kichwa has its own)
+ 'qug' => 'Runa shimi', # Kichwa/Northern Quechua (temporarily used until Kichwa has its own)
'rgn' => 'Rumagnôl', # Romagnol
'rif' => 'Tarifit', # Tarifit
'rm' => 'rumantsch', # Raeto-Romance
@@ -389,8 +393,9 @@
'tt-latn' => 'tatarça', # Tatar (Latin script)
'tum' => 'chiTumbuka', # Tumbuka
'tw' => 'Twi', # Twi, (FIXME!)
- 'ty' => 'Reo Mā`ohi', # Tahitian
+ 'ty' => 'reo tahiti', # Tahitian
'tyv' => 'тыва дыл', # Tyvan
+ 'tzm' => 'ⵜⴰⵎⴰⵣⵉⵖⵜ', # Tamazight
'udm' => 'удмурт', # Udmurt
'ug' => 'ئۇيغۇرچە / Uyghurche', # Uyghur (multiple scripts - defaults to Arabic)
'ug-arab' => 'ئۇيغۇرچە', # Uyghur (Arabic script) (default)
@@ -411,12 +416,12 @@
'war' => 'Winaray', # Waray-Waray
'wo' => 'Wolof', # Wolof
'wuu' => '吴语', # Wu Chinese
- 'xal' => 'хальмг', # Kalmyk-Oirat (Kalmuk, Kalmuck, Kalmack, Qalmaq, Kalmytskii Jazyk, Khal:mag, Oirat, Volga Oirat, European Oirat, Western Mongolian)
+ 'xal' => 'хальмг', # Kalmyk-Oirat
'xh' => 'isiXhosa', # Xhosan
'xmf' => 'მარგალური', # Mingrelian
'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
+ 'yue' => '粵語', # Cantonese
'za' => 'Vahcuengh', # Zhuang
'zea' => 'Zeêuws', # Zeeuws/Zeaws
'zh' => '中文', # (Zhōng Wén) - Chinese
diff --git a/languages/classes/LanguageAr.php b/languages/classes/LanguageAr.php
index 553ff077..858a7be8 100644
--- a/languages/classes/LanguageAr.php
+++ b/languages/classes/LanguageAr.php
@@ -36,7 +36,7 @@ class LanguageAr extends Language {
* @todo FIXME: This is language-specific for now only to avoid the negative
* performance impact of enabling it for all languages.
*
- * @param $s string
+ * @param string $s
*
* @return string
*/
diff --git a/languages/classes/LanguageAz.php b/languages/classes/LanguageAz.php
index 48f70e85..2199467d 100644
--- a/languages/classes/LanguageAz.php
+++ b/languages/classes/LanguageAz.php
@@ -29,7 +29,7 @@
class LanguageAz extends Language {
/**
- * @param $string string
+ * @param string $string
* @return mixed|string
*/
function ucfirst( $string ) {
diff --git a/languages/classes/LanguageBe_tarask.php b/languages/classes/LanguageBe_tarask.php
index 05b9550f..ac593801 100644
--- a/languages/classes/LanguageBe_tarask.php
+++ b/languages/classes/LanguageBe_tarask.php
@@ -30,14 +30,16 @@
* @ingroup Language
* @see http://be-x-old.wikipedia.org/wiki/Project_talk:LanguageBe_tarask.php
*/
+// @codingStandardsIgnoreStart Ignore class name is not in camel caps format error
class LanguageBe_tarask extends Language {
+ // @codingStandardsIgnoreEnd
/**
* The Belarusian language uses apostrophe sign,
* but the characters used for this could be both U+0027 and U+2019.
* This function unifies apostrophe sign in search index values
* to enable seach using both apostrophe signs.
*
- * @param $string string
+ * @param string $string
*
* @return string
*/
@@ -60,7 +62,7 @@ class LanguageBe_tarask extends Language {
* Four-digit number should be without group commas (spaces)
* So "1 234 567", "12 345" but "1234"
*
- * @param $_ string
+ * @param string $_
*
* @return string
*/
diff --git a/languages/classes/LanguageBg.php b/languages/classes/LanguageBg.php
index d735c7a0..a592d025 100644
--- a/languages/classes/LanguageBg.php
+++ b/languages/classes/LanguageBg.php
@@ -31,7 +31,7 @@ class LanguageBg extends Language {
* ISO number formatting: 123 456 789,99.
* Avoid tripple grouping by numbers with whole part up to 4 digits.
*
- * @param $_ string
+ * @param string $_
*
* @return string
*/
diff --git a/languages/classes/LanguageBs.php b/languages/classes/LanguageBs.php
index 3da7711e..de9c7dce 100644
--- a/languages/classes/LanguageBs.php
+++ b/languages/classes/LanguageBs.php
@@ -27,16 +27,14 @@
* @ingroup Language
*/
class LanguageBs extends Language {
-
-
/**
* Convert from the nominative form of a noun to some other case
* Invoked with {{GRAMMAR:case|word}}
*
* Cases: genitiv, dativ, akuzativ, vokativ, instrumental, lokativ
*
- * @param $word string
- * @param $case string
+ * @param string $word
+ * @param string $case
*
* @return string
*/
@@ -54,6 +52,8 @@ class LanguageBs extends Language {
break;
}
- return $word; # this will return the original value for 'nominativ' (nominative) and all undefined case values
+ # this will return the original value for 'nominativ' (nominative)
+ # and all undefined case values.
+ return $word;
}
}
diff --git a/languages/classes/LanguageCu.php b/languages/classes/LanguageCu.php
index 60cf2b1a..650f1ba6 100644
--- a/languages/classes/LanguageCu.php
+++ b/languages/classes/LanguageCu.php
@@ -27,23 +27,24 @@
* @ingroup Language
*/
class LanguageCu extends Language {
-
/**
* Convert from the nominative form of a noun to some other case
* Invoked with {{grammar:case|word}}
*
- * @param $word string
- * @param $case string
+ * @param string $word
+ * @param string $case
* @return string
*/
function convertGrammar( $word, $case ) {
global $wgGrammarForms;
+
if ( isset( $wgGrammarForms['сu'][$case][$word] ) ) {
return $wgGrammarForms['сu'][$case][$word];
}
- # These rules are not perfect, but they are currently only used for site names so it doesn't
- # matter if they are wrong sometimes. Just add a special case for your site name if necessary.
+ # These rules are not perfect, but they are currently only used for
+ # site names so it doesn't matter if they are wrong sometimes. Just add
+ # a special case for your site name if necessary.
# join and array_slice instead mb_substr
$ar = array();
@@ -51,7 +52,9 @@ class LanguageCu extends Language {
if ( !preg_match( "/[a-zA-Z_]/us", $word ) ) {
switch ( $case ) {
case 'genitive': # родительный падеж
- if ( ( join( '', array_slice( $ar[0], -4 ) ) == 'вики' ) || ( join( '', array_slice( $ar[0], -4 ) ) == 'Вики' ) ) {
+ if ( ( join( '', array_slice( $ar[0], -4 ) ) == 'вики' )
+ || ( join( '', array_slice( $ar[0], -4 ) ) == 'Вики' )
+ ) {
} elseif ( join( '', array_slice( $ar[0], -2 ) ) == 'ї' ) {
$word = join( '', array_slice( $ar[0], 0, -2 ) ) . 'їѩ';
}
@@ -61,6 +64,7 @@ class LanguageCu extends Language {
break;
}
}
+
return $word;
}
}
diff --git a/languages/classes/LanguageDsb.php b/languages/classes/LanguageDsb.php
index 975157f4..2a21307e 100644
--- a/languages/classes/LanguageDsb.php
+++ b/languages/classes/LanguageDsb.php
@@ -28,13 +28,12 @@
* @ingroup Language
*/
class LanguageDsb extends Language {
-
/**
* Convert from the nominative form of a noun to some other case
* Invoked with {{grammar:case|word}}
*
- * @param $word string
- * @param $case string
+ * @param string $word
+ * @param string $case
* @return string
*/
function convertGrammar( $word, $case ) {
@@ -49,9 +48,10 @@ class LanguageDsb extends Language {
case 'lokatiw': # lokatiw
$word = 'wo ' . $word;
break;
- }
+ }
- return $word; # this will return the original value for 'nominatiw' (nominativ) and all undefined case values
+ # this will return the original value for 'nominatiw' (nominativ) and
+ # all undefined case values.
+ return $word;
}
-
}
diff --git a/languages/classes/LanguageEo.php b/languages/classes/LanguageEo.php
index 0e2d8b4a..15fc8c03 100644
--- a/languages/classes/LanguageEo.php
+++ b/languages/classes/LanguageEo.php
@@ -54,9 +54,9 @@ class LanguageEo extends Language {
* editor behavior; the original server-side translation system dates to 2002-2003
* when many browsers with really bad Unicode support were still in use.
*
- * @param string $in input character set
- * @param string $out output character set
- * @param string $string text to be converted
+ * @param string $in Input character set
+ * @param string $out Output character set
+ * @param string $string Text to be converted
* @return string
*/
function iconv( $in, $out, $string ) {
@@ -74,7 +74,7 @@ class LanguageEo extends Language {
}
/**
- * @param $matches array
+ * @param array $matches
* @return string
*/
function strrtuxCallback( $matches ) {
@@ -91,7 +91,7 @@ class LanguageEo extends Language {
}
/**
- * @param $matches array
+ * @param array $matches
* @return string
*/
function strrtxuCallback( $matches ) {
diff --git a/languages/classes/LanguageEs.php b/languages/classes/LanguageEs.php
index f55c2e43..098148f7 100644
--- a/languages/classes/LanguageEs.php
+++ b/languages/classes/LanguageEs.php
@@ -29,7 +29,7 @@
class LanguageEs extends Language {
/**
- * @param $_ string
+ * @param string $_
* @return string
*/
function commafy( $_ ) {
diff --git a/languages/classes/LanguageEt.php b/languages/classes/LanguageEt.php
index 1a9f286f..6425a533 100644
--- a/languages/classes/LanguageEt.php
+++ b/languages/classes/LanguageEt.php
@@ -30,7 +30,7 @@ class LanguageEt extends Language {
/**
* Avoid grouping whole numbers between 0 to 9999
*
- * @param $_ string
+ * @param string $_
*
* @return string
*/
diff --git a/languages/classes/LanguageFi.php b/languages/classes/LanguageFi.php
index ee1d1b52..2379caca 100644
--- a/languages/classes/LanguageFi.php
+++ b/languages/classes/LanguageFi.php
@@ -28,13 +28,12 @@
* @ingroup Language
*/
class LanguageFi extends Language {
-
/**
* Convert from the nominative form of a noun to some other case
* Invoked with {{grammar:case|word}}
*
- * @param $word string
- * @param $case string
+ * @param string $word
+ * @param string $case
* @return string
*/
function convertGrammar( $word, $case ) {
@@ -85,20 +84,23 @@ class LanguageFi extends Language {
}
/**
- * @param $str string
- * @param $forContent bool
+ * @param string $str
+ * @param bool $forContent
* @return string
*/
function translateBlockExpiry( $str, $forContent = false ) {
/*
'ago', 'now', 'today', 'this', 'next',
- 'first', 'third', 'fourth', 'fifth', 'sixth', 'seventh', 'eighth', 'ninth', 'tenth', 'eleventh', 'twelfth',
+ 'first', 'third', 'fourth', 'fifth', 'sixth', 'seventh', 'eighth', 'ninth',
+ 'tenth', 'eleventh', 'twelfth',
'tomorrow', 'yesterday'
- $months = 'january:tammikuu,february:helmikuu,march:maaliskuu,april:huhtikuu,may:toukokuu,june:kesäkuu,' .
- 'july:heinäkuu,august:elokuu,september:syyskuu,october:lokakuu,november:marraskuu,december:joulukuu,' .
- 'jan:tammikuu,feb:helmikuu,mar:maaliskuu,apr:huhtikuu,jun:kesäkuu,jul:heinäkuu,aug:elokuu,sep:syyskuu,'.
- 'oct:lokakuu,nov:marraskuu,dec:joulukuu,sept:syyskuu';
+ $months = 'january:tammikuu,february:helmikuu,march:maaliskuu,april:huhtikuu,' .
+ 'may:toukokuu,june:kesäkuu,july:heinäkuu,august:elokuu,september:syyskuu,' .
+ 'october:lokakuu,november:marraskuu,december:joulukuu,' .
+ 'jan:tammikuu,feb:helmikuu,mar:maaliskuu,apr:huhtikuu,jun:kesäkuu,' .
+ 'jul:heinäkuu,aug:elokuu,sep:syyskuu,oct:lokakuu,nov:marraskuu,' .
+ dec:joulukuu,sept:syyskuu';
*/
$weekds = array(
'monday' => 'maanantai',
diff --git a/languages/classes/LanguageGa.php b/languages/classes/LanguageGa.php
index 339ad4de..38c50d2e 100644
--- a/languages/classes/LanguageGa.php
+++ b/languages/classes/LanguageGa.php
@@ -32,8 +32,8 @@ class LanguageGa extends Language {
* Convert day names
* Invoked with {{GRAMMAR:transformation|word}}
*
- * @param $word string
- * @param $case string
+ * @param string $word
+ * @param string $case
* @return string
*/
function convertGrammar( $word, $case ) {
diff --git a/languages/classes/LanguageGan.php b/languages/classes/LanguageGan.php
index d81574d1..a012f594 100644
--- a/languages/classes/LanguageGan.php
+++ b/languages/classes/LanguageGan.php
@@ -28,27 +28,26 @@ require_once __DIR__ . '/LanguageZh.php';
* @ingroup Language
*/
class GanConverter extends LanguageConverter {
-
/**
- * @param $langobj Language
- * @param $maincode string
- * @param $variants array
- * @param $variantfallbacks array
- * @param $flags array
- * @param $manualLevel array
+ * @param Language $langobj
+ * @param string $maincode
+ * @param array $variants
+ * @param array $variantfallbacks
+ * @param array $flags
+ * @param array $manualLevel
*/
function __construct( $langobj, $maincode,
- $variants = array(),
- $variantfallbacks = array(),
- $flags = array(),
- $manualLevel = array() ) {
+ $variants = array(),
+ $variantfallbacks = array(),
+ $flags = array(),
+ $manualLevel = array() ) {
$this->mDescCodeSep = ':';
$this->mDescVarSep = ';';
parent::__construct( $langobj, $maincode,
- $variants,
- $variantfallbacks,
- $flags,
- $manualLevel );
+ $variants,
+ $variantfallbacks,
+ $flags,
+ $manualLevel );
$names = array(
'gan' => '原文',
'gan-hans' => '简体',
@@ -67,8 +66,8 @@ class GanConverter extends LanguageConverter {
}
/**
- * @param $key string
- * @return String
+ * @param string $key
+ * @return string
*/
function convertCategoryKey( $key ) {
return $this->autoConvert( $key, 'gan' );
@@ -82,7 +81,6 @@ class GanConverter extends LanguageConverter {
* @ingroup Language
*/
class LanguageGan extends LanguageZh {
-
function __construct() {
global $wgHooks;
parent::__construct();
@@ -98,9 +96,9 @@ class LanguageGan extends LanguageZh {
);
$this->mConverter = new GanConverter( $this, 'gan',
- $variants, $variantfallbacks,
- array(),
- $ml );
+ $variants, $variantfallbacks,
+ array(),
+ $ml );
$wgHooks['PageContentSaveComplete'][] = $this->mConverter;
}
@@ -108,9 +106,9 @@ class LanguageGan extends LanguageZh {
/**
* word segmentation
*
- * @param $string string
- * @param $autoVariant string
- * @return String
+ * @param string $string
+ * @param string $autoVariant
+ * @return string
*/
function normalizeForSearch( $string, $autoVariant = 'gan-hans' ) {
// LanguageZh::normalizeForSearch
diff --git a/languages/classes/LanguageHe.php b/languages/classes/LanguageHe.php
index 03919886..a6aaf6db 100644
--- a/languages/classes/LanguageHe.php
+++ b/languages/classes/LanguageHe.php
@@ -35,8 +35,8 @@ class LanguageHe extends Language {
* Available cases:
* "prefixed" (or "תחילית") - when the word has a prefix
*
- * @param $word String: the word to convert
- * @param $case String: the case
+ * @param string $word The word to convert
+ * @param string $case The case
*
* @return string
*/
diff --git a/languages/classes/LanguageHsb.php b/languages/classes/LanguageHsb.php
index 5623f3ce..a862d42e 100644
--- a/languages/classes/LanguageHsb.php
+++ b/languages/classes/LanguageHsb.php
@@ -27,13 +27,12 @@
* @ingroup Language
*/
class LanguageHsb extends Language {
-
/**
* Convert from the nominative form of a noun to some other case
* Invoked with {{grammar:case|word}}
*
- * @param $word string
- * @param $case string
+ * @param string $word
+ * @param string $case
* @return string
*/
function convertGrammar( $word, $case ) {
@@ -49,9 +48,10 @@ class LanguageHsb extends Language {
case 'lokatiw': # lokatiw
$word = 'wo ' . $word;
break;
- }
+ }
- return $word; # this will return the original value for 'nominatiw' (nominativ) and all undefined case values
+ # this will return the original value for 'nominatiw' (nominativ) and
+ # all undefined case values.
+ return $word;
}
-
}
diff --git a/languages/classes/LanguageHu.php b/languages/classes/LanguageHu.php
index 1f4d45c0..bbf3b055 100644
--- a/languages/classes/LanguageHu.php
+++ b/languages/classes/LanguageHu.php
@@ -29,8 +29,8 @@
class LanguageHu extends Language {
/**
- * @param $word string
- * @param $case
+ * @param string $word
+ * @param string $case
* @return string
*/
function convertGrammar( $word, $case ) {
diff --git a/languages/classes/LanguageHy.php b/languages/classes/LanguageHy.php
index 24068296..b7767eb3 100644
--- a/languages/classes/LanguageHy.php
+++ b/languages/classes/LanguageHy.php
@@ -33,8 +33,8 @@ class LanguageHy extends Language {
* Convert from the nominative form of a noun to some other case
* Invoked with {{grammar:case|word}}
*
- * @param $word string
- * @param $case string
+ * @param string $word
+ * @param string $case
* @return string
*/
function convertGrammar( $word, $case ) {
@@ -82,7 +82,7 @@ class LanguageHy extends Language {
/**
* Armenian numeric format is "12 345,67" but "1234,56"
*
- * @param $_ string
+ * @param string $_
*
* @return string
*/
diff --git a/languages/classes/LanguageIu.php b/languages/classes/LanguageIu.php
index abd2e7c8..db3a22ca 100644
--- a/languages/classes/LanguageIu.php
+++ b/languages/classes/LanguageIu.php
@@ -36,26 +36,27 @@ require_once __DIR__ . '/../LanguageConverter.php';
* @ingroup Language
*/
class IuConverter extends LanguageConverter {
-
protected $mDoContentConvert;
+
public $mToLatin = array(
- 'ᐦ' => 'h', 'ᐃ' => 'i', 'ᐄ' => 'ii', 'ᐅ' => 'u', 'ᐆ' => 'uu', 'ᐊ' => 'a', 'ᐋ' => 'aa',
- 'ᑉ' => 'p', 'ᐱ' => 'pi', 'ᐲ' => 'pii', 'ᐳ' => 'pu', 'ᐴ' => 'puu', 'ᐸ' => 'pa', 'ᐹ' => 'paa',
- 'ᑦ' => 't', 'ᑎ' => 'ti', 'ᑏ' => 'tii', 'ᑐ' => 'tu', 'ᑑ' => 'tuu', 'ᑕ' => 'ta', 'ᑖ' => 'taa',
- 'ᒃ' => 'k', 'ᑭ' => 'ki', 'ᑮ' => 'kii', 'ᑯ' => 'ku', 'ᑰ' => 'kuu', 'ᑲ' => 'ka', 'ᑳ' => 'kaa',
- 'ᖅᒃ' => 'qq', 'ᖅᑭ' => 'qqi', 'ᖅᑮ' => 'qqii', 'ᖅᑯ' => 'qqu', 'ᖅᑰ' => 'ᖅqquu', 'ᖅᑲ' => 'qqa', 'ᖅᑳ' => 'qqaa',
- 'ᒡ' => 'g', 'ᒋ' => 'gi', 'ᒌ' => 'gii', 'ᒍ' => 'gu', 'ᒎ' => 'guu', 'ᒐ' => 'ga', 'ᒑ' => 'gaa',
- 'ᒻ' => 'm', 'ᒥ' => 'mi', 'ᒦ' => 'mii', 'ᒧ' => 'mu', 'ᒨ' => 'muu', 'ᒪ' => 'ma', 'ᒫ' => 'maa',
- 'ᓐ' => 'n', 'ᓂ' => 'ni', 'ᓃ' => 'nii', 'ᓄ' => 'nu', 'ᓅ' => 'nuu', 'ᓇ' => 'na', 'ᓈ' => 'naa',
- 'ᔅ' => 's', 'ᓯ' => 'si', 'ᓰ' => 'sii', 'ᓱ' => 'su', 'ᓲ' => 'suu', 'ᓴ' => 'sa', 'ᓵ' => 'saa',
- 'ᓪ' => 'l', 'ᓕ' => 'li', 'ᓖ' => 'lii', 'ᓗ' => 'lu', 'ᓘ' => 'luu', 'ᓚ' => 'la', 'ᓛ' => 'laa',
- 'ᔾ' => 'j', 'ᔨ' => 'ji', 'ᔩ' => 'jii', 'ᔪ' => 'ju', 'ᔫ' => 'juu', 'ᔭ' => 'ja', 'ᔮ' => 'jaa',
- 'ᕝ' => 'v', 'ᕕ' => 'vi', 'ᕖ' => 'vii', 'ᕗ' => 'vu', 'ᕘ' => 'vuu', 'ᕙ' => 'va', 'ᕚ' => 'vaa',
- 'ᕐ' => 'r', 'ᕆ' => 'ri', 'ᕇ' => 'rii', 'ᕈ' => 'ru', 'ᕉ' => 'ruu', 'ᕋ' => 'ra', 'ᕌ' => 'raa',
- 'ᖅ' => 'q', 'ᕿ' => 'qi', 'ᖀ' => 'qii', 'ᖁ' => 'qu', 'ᖂ' => 'quu', 'ᖃ' => 'qa', 'ᖄ' => 'qaa',
- 'ᖕ' => 'ng', 'ᖏ' => 'ngi', 'ᖐ' => 'ngii', 'ᖑ' => 'ngu', 'ᖒ' => 'nguu', 'ᖓ' => 'nga', 'ᖔ' => 'ngaa',
- 'ᖖ' => 'nng', 'ᙱ' => 'nngi', 'ᙲ' => 'nngii', 'ᙳ' => 'nngu', 'ᙴ' => 'nnguu', 'ᙵ' => 'nnga', 'ᙶ' => 'nngaa',
- 'ᖦ' => 'ɫ', 'ᖠ' => 'ɫi', 'ᖡ' => 'ɫii', 'ᖢ' => 'ɫu', 'ᖣ' => 'ɫuu', 'ᖤ' => 'ɫa', 'ᖥ' => 'ɫaa',
+ 'ᐦ' => 'h', 'ᐃ' => 'i', 'ᐄ' => 'ii', 'ᐅ' => 'u', 'ᐆ' => 'uu', 'ᐊ' => 'a', 'ᐋ' => 'aa',
+ 'ᑉ' => 'p', 'ᐱ' => 'pi', 'ᐲ' => 'pii', 'ᐳ' => 'pu', 'ᐴ' => 'puu', 'ᐸ' => 'pa', 'ᐹ' => 'paa',
+ 'ᑦ' => 't', 'ᑎ' => 'ti', 'ᑏ' => 'tii', 'ᑐ' => 'tu', 'ᑑ' => 'tuu', 'ᑕ' => 'ta', 'ᑖ' => 'taa',
+ 'ᒃ' => 'k', 'ᑭ' => 'ki', 'ᑮ' => 'kii', 'ᑯ' => 'ku', 'ᑰ' => 'kuu', 'ᑲ' => 'ka', 'ᑳ' => 'kaa',
+ 'ᖅᒃ' => 'qq', 'ᖅᑭ' => 'qqi', 'ᖅᑮ' => 'qqii', 'ᖅᑯ' => 'qqu', 'ᖅᑰ' => 'ᖅqquu', 'ᖅᑲ' => 'qqa',
+ 'ᖅᑳ' => 'qqaa', 'ᒡ' => 'g', 'ᒋ' => 'gi', 'ᒌ' => 'gii', 'ᒍ' => 'gu', 'ᒎ' => 'guu',
+ 'ᒐ' => 'ga', 'ᒑ' => 'gaa', 'ᒻ' => 'm', 'ᒥ' => 'mi', 'ᒦ' => 'mii', 'ᒧ' => 'mu', 'ᒨ' => 'muu',
+ 'ᒪ' => 'ma', 'ᒫ' => 'maa', 'ᓐ' => 'n', 'ᓂ' => 'ni', 'ᓃ' => 'nii', 'ᓄ' => 'nu', 'ᓅ' => 'nuu',
+ 'ᓇ' => 'na', 'ᓈ' => 'naa', 'ᔅ' => 's', 'ᓯ' => 'si', 'ᓰ' => 'sii', 'ᓱ' => 'su', 'ᓲ' => 'suu',
+ 'ᓴ' => 'sa', 'ᓵ' => 'saa', 'ᓪ' => 'l', 'ᓕ' => 'li', 'ᓖ' => 'lii', 'ᓗ' => 'lu', 'ᓘ' => 'luu',
+ 'ᓚ' => 'la', 'ᓛ' => 'laa', 'ᔾ' => 'j', 'ᔨ' => 'ji', 'ᔩ' => 'jii', 'ᔪ' => 'ju', 'ᔫ' => 'juu',
+ 'ᔭ' => 'ja', 'ᔮ' => 'jaa', 'ᕝ' => 'v', 'ᕕ' => 'vi', 'ᕖ' => 'vii', 'ᕗ' => 'vu', 'ᕘ' => 'vuu',
+ 'ᕙ' => 'va', 'ᕚ' => 'vaa', 'ᕐ' => 'r', 'ᕆ' => 'ri', 'ᕇ' => 'rii', 'ᕈ' => 'ru', 'ᕉ' => 'ruu',
+ 'ᕋ' => 'ra', 'ᕌ' => 'raa', 'ᖅ' => 'q', 'ᕿ' => 'qi', 'ᖀ' => 'qii', 'ᖁ' => 'qu', 'ᖂ' => 'quu',
+ 'ᖃ' => 'qa', 'ᖄ' => 'qaa', 'ᖕ' => 'ng', 'ᖏ' => 'ngi', 'ᖐ' => 'ngii', 'ᖑ' => 'ngu',
+ 'ᖒ' => 'nguu', 'ᖓ' => 'nga', 'ᖔ' => 'ngaa', 'ᖖ' => 'nng', 'ᙱ' => 'nngi', 'ᙲ' => 'nngii',
+ 'ᙳ' => 'nngu', 'ᙴ' => 'nnguu', 'ᙵ' => 'nnga', 'ᙶ' => 'nngaa', 'ᖦ' => 'ɫ', 'ᖠ' => 'ɫi',
+ 'ᖡ' => 'ɫii', 'ᖢ' => 'ɫu', 'ᖣ' => 'ɫuu', 'ᖤ' => 'ɫa', 'ᖥ' => 'ɫaa',
);
public $mUpperToLowerCaseLatin = array(
@@ -68,23 +69,24 @@ class IuConverter extends LanguageConverter {
);
public $mToSyllabics = array(
- 'h' => 'ᐦ', 'i' => 'ᐃ', 'ii' => 'ᐄ', 'u' => 'ᐅ', 'uu' => 'ᐆ', 'a' => 'ᐊ', 'aa' => 'ᐋ',
- 'p' => 'ᑉ', 'pi' => 'ᐱ', 'pii' => 'ᐲ', 'pu' => 'ᐳ', 'puu' => 'ᐴ', 'pa' => 'ᐸ', 'paa' => 'ᐹ',
- 't' => 'ᑦ', 'ti' => 'ᑎ', 'tii' => 'ᑏ', 'tu' => 'ᑐ', 'tuu' => 'ᑑ', 'ta' => 'ᑕ', 'taa' => 'ᑖ',
- 'k' => 'ᒃ', 'ki' => 'ᑭ', 'kii' => 'ᑮ', 'ku' => 'ᑯ', 'kuu' => 'ᑰ', 'ka' => 'ᑲ', 'kaa' => 'ᑳ',
- 'g' => 'ᒡ', 'gi' => 'ᒋ', 'gii' => 'ᒌ', 'gu' => 'ᒍ', 'guu' => 'ᒎ', 'ga' => 'ᒐ', 'gaa' => 'ᒑ',
- 'm' => 'ᒻ', 'mi' => 'ᒥ', 'mii' => 'ᒦ', 'mu' => 'ᒧ', 'muu' => 'ᒨ', 'ma' => 'ᒪ', 'maa' => 'ᒫ',
- 'n' => 'ᓐ', 'ni' => 'ᓂ', 'nii' => 'ᓃ', 'nu' => 'ᓄ', 'nuu' => 'ᓅ', 'na' => 'ᓇ', 'naa' => 'ᓈ',
- 's' => 'ᔅ', 'si' => 'ᓯ', 'sii' => 'ᓰ', 'su' => 'ᓱ', 'suu' => 'ᓲ', 'sa' => 'ᓴ', 'saa' => 'ᓵ',
- 'l' => 'ᓪ', 'li' => 'ᓕ', 'lii' => 'ᓖ', 'lu' => 'ᓗ', 'luu' => 'ᓘ', 'la' => 'ᓚ', 'laa' => 'ᓛ',
- 'j' => 'ᔾ', 'ji' => 'ᔨ', 'jii' => 'ᔩ', 'ju' => 'ᔪ', 'juu' => 'ᔫ', 'ja' => 'ᔭ', 'jaa' => 'ᔮ',
- 'v' => 'ᕝ', 'vi' => 'ᕕ', 'vii' => 'ᕖ', 'vu' => 'ᕗ', 'vuu' => 'ᕘ', 'va' => 'ᕙ', 'vaa' => 'ᕚ',
- 'r' => 'ᕐ', 'ri' => 'ᕆ', 'rii' => 'ᕇ', 'ru' => 'ᕈ', 'ruu' => 'ᕉ', 'ra' => 'ᕋ', 'raa' => 'ᕌ',
- 'qq' => 'ᖅᒃ', 'qqi' => 'ᖅᑭ', 'qqii' => 'ᖅᑮ', 'qqu' => 'ᖅᑯ', 'qquu' => 'ᖅᑰ', 'qqa' => 'ᖅᑲ', 'qqaa' => 'ᖅᑳ',
- 'q' => 'ᖅ', 'qi' => 'ᕿ', 'qii' => 'ᖀ', 'qu' => 'ᖁ', 'quu' => 'ᖂ', 'qa' => 'ᖃ', 'qaa' => 'ᖄ',
- 'ng' => 'ᖕ', 'ngi' => 'ᖏ', 'ngii' => 'ᖐ', 'ngu' => 'ᖑ', 'nguu' => 'ᖒ', 'nga' => 'ᖓ', 'ngaa' => 'ᖔ',
- 'nng' => 'ᖖ', 'nngi' => 'ᙱ', 'nngii' => 'ᙲ', 'nngu' => 'ᙳ', 'nnguu' => 'ᙴ', 'nnga' => 'ᙵ', 'nngaa' => 'ᙶ',
- 'ɫ' => 'ᖦ', 'ɫi' => 'ᖠ', 'ɫii' => 'ᖡ', 'ɫu' => 'ᖢ', 'ɫuu' => 'ᖣ', 'ɫa' => 'ᖤ', 'ɫaa' => 'ᖥ',
+ 'h' => 'ᐦ', 'i' => 'ᐃ', 'ii' => 'ᐄ', 'u' => 'ᐅ', 'uu' => 'ᐆ', 'a' => 'ᐊ', 'aa' => 'ᐋ',
+ 'p' => 'ᑉ', 'pi' => 'ᐱ', 'pii' => 'ᐲ', 'pu' => 'ᐳ', 'puu' => 'ᐴ', 'pa' => 'ᐸ', 'paa' => 'ᐹ',
+ 't' => 'ᑦ', 'ti' => 'ᑎ', 'tii' => 'ᑏ', 'tu' => 'ᑐ', 'tuu' => 'ᑑ', 'ta' => 'ᑕ', 'taa' => 'ᑖ',
+ 'k' => 'ᒃ', 'ki' => 'ᑭ', 'kii' => 'ᑮ', 'ku' => 'ᑯ', 'kuu' => 'ᑰ', 'ka' => 'ᑲ', 'kaa' => 'ᑳ',
+ 'g' => 'ᒡ', 'gi' => 'ᒋ', 'gii' => 'ᒌ', 'gu' => 'ᒍ', 'guu' => 'ᒎ', 'ga' => 'ᒐ', 'gaa' => 'ᒑ',
+ 'm' => 'ᒻ', 'mi' => 'ᒥ', 'mii' => 'ᒦ', 'mu' => 'ᒧ', 'muu' => 'ᒨ', 'ma' => 'ᒪ', 'maa' => 'ᒫ',
+ 'n' => 'ᓐ', 'ni' => 'ᓂ', 'nii' => 'ᓃ', 'nu' => 'ᓄ', 'nuu' => 'ᓅ', 'na' => 'ᓇ', 'naa' => 'ᓈ',
+ 's' => 'ᔅ', 'si' => 'ᓯ', 'sii' => 'ᓰ', 'su' => 'ᓱ', 'suu' => 'ᓲ', 'sa' => 'ᓴ', 'saa' => 'ᓵ',
+ 'l' => 'ᓪ', 'li' => 'ᓕ', 'lii' => 'ᓖ', 'lu' => 'ᓗ', 'luu' => 'ᓘ', 'la' => 'ᓚ', 'laa' => 'ᓛ',
+ 'j' => 'ᔾ', 'ji' => 'ᔨ', 'jii' => 'ᔩ', 'ju' => 'ᔪ', 'juu' => 'ᔫ', 'ja' => 'ᔭ', 'jaa' => 'ᔮ',
+ 'v' => 'ᕝ', 'vi' => 'ᕕ', 'vii' => 'ᕖ', 'vu' => 'ᕗ', 'vuu' => 'ᕘ', 'va' => 'ᕙ', 'vaa' => 'ᕚ',
+ 'r' => 'ᕐ', 'ri' => 'ᕆ', 'rii' => 'ᕇ', 'ru' => 'ᕈ', 'ruu' => 'ᕉ', 'ra' => 'ᕋ', 'raa' => 'ᕌ',
+ 'qq' => 'ᖅᒃ', 'qqi' => 'ᖅᑭ', 'qqii' => 'ᖅᑮ', 'qqu' => 'ᖅᑯ', 'qquu' => 'ᖅᑰ', 'qqa' => 'ᖅᑲ',
+ 'qqaa' => 'ᖅᑳ', 'q' => 'ᖅ', 'qi' => 'ᕿ', 'qii' => 'ᖀ', 'qu' => 'ᖁ', 'quu' => 'ᖂ',
+ 'qa' => 'ᖃ', 'qaa' => 'ᖄ', 'ng' => 'ᖕ', 'ngi' => 'ᖏ', 'ngii' => 'ᖐ', 'ngu' => 'ᖑ',
+ 'nguu' => 'ᖒ', 'nga' => 'ᖓ', 'ngaa' => 'ᖔ', 'nng' => 'ᖖ', 'nngi' => 'ᙱ', 'nngii' => 'ᙲ',
+ 'nngu' => 'ᙳ', 'nnguu' => 'ᙴ', 'nnga' => 'ᙵ', 'nngaa' => 'ᙶ', 'ɫ' => 'ᖦ', 'ɫi' => 'ᖠ',
+ 'ɫii' => 'ᖡ', 'ɫu' => 'ᖢ', 'ɫuu' => 'ᖣ', 'ɫa' => 'ᖤ', 'ɫaa' => 'ᖥ',
);
function loadDefaultTables() {
@@ -102,8 +104,8 @@ class IuConverter extends LanguageConverter {
* update: delete all rule parsing because it's not used
* currently, and just produces a couple of bugs
*
- * @param $rule string
- * @param $flags array
+ * @param string $rule
+ * @param array $flags
* @return array
*/
function parseManualRule( $rule, $flags = array() ) {
@@ -123,12 +125,13 @@ class IuConverter extends LanguageConverter {
/**
* Do not convert content on talk pages
*
- * @param $text string
- * @param $parser Parser
+ * @param string $text
+ * @param Parser $parser
* @return string
*/
function parserConvert( $text, &$parser ) {
- $this->mDoContentConvert = !( is_object( $parser->getTitle() ) && $parser->getTitle()->isTalkPage() );
+ $this->mDoContentConvert = !( is_object( $parser->getTitle() )
+ && $parser->getTitle()->isTalkPage() );
return parent::parserConvert( $text, $parser );
}
@@ -139,9 +142,9 @@ class IuConverter extends LanguageConverter {
* names as they were
* - do not try to find variants for usernames
*
- * @param $link string
- * @param $nt Title
- * @param $ignoreOtherCond bool
+ * @param string &$link
+ * @param Title &$nt
+ * @param bool $ignoreOtherCond
*/
function findVariantLink( &$link, &$nt, $ignoreOtherCond = false ) {
// check for user namespace
@@ -160,30 +163,10 @@ class IuConverter extends LanguageConverter {
}
/**
- * An ugly function wrapper for parsing Image titles
- * (to prevent image name conversion)
- *
- * @param $text string
- * @param $toVariant bool
- *
- * @return string
- */
- function autoConvert( $text, $toVariant = false ) {
- global $wgTitle;
- if ( is_object( $wgTitle ) && $wgTitle->getNamespace() == NS_FILE ) {
- $imagename = $wgTitle->getNsText();
- if ( preg_match( "/^$imagename:/", $text ) ) {
- return $text;
- }
- }
- return parent::autoConvert( $text, $toVariant );
- }
-
- /**
* It translates text into variant
*
- * @param $text string
- * @param $toVariant bool
+ * @param string $text
+ * @param bool $toVariant
*
* @return string
*/
@@ -215,7 +198,7 @@ class LanguageIu extends Language {
$variants = array( 'iu', 'ike-cans', 'ike-latn' );
$variantfallbacks = array(
- 'iu' => 'ike-cans',
+ 'iu' => 'ike-cans',
'ike-cans' => 'iu',
'ike-latn' => 'iu',
);
diff --git a/languages/classes/LanguageJa.php b/languages/classes/LanguageJa.php
index 9c6314c5..043b1554 100644
--- a/languages/classes/LanguageJa.php
+++ b/languages/classes/LanguageJa.php
@@ -29,7 +29,7 @@
class LanguageJa extends Language {
/**
- * @param $string string
+ * @param string $string
* @return string
*/
function segmentByWord( $string ) {
@@ -53,7 +53,7 @@ class LanguageJa extends Language {
* Italic is not appropriate for Japanese script
* Unfortunately most browsers do not recognise this, and render <em> as italic
*
- * @param $text string
+ * @param string $text
* @return string
*/
function emphasize( $text ) {
diff --git a/languages/classes/LanguageKaa.php b/languages/classes/LanguageKaa.php
index 6203b4ba..eab08fe3 100644
--- a/languages/classes/LanguageKaa.php
+++ b/languages/classes/LanguageKaa.php
@@ -33,8 +33,8 @@ class LanguageKaa extends Language {
/**
* Cases: genitive, dative, accusative, locative, ablative, comitative + possessive forms
*
- * @param $word string
- * @param $case string
+ * @param string $word
+ * @param string $case
*
* @return string
*/
@@ -50,7 +50,7 @@ class LanguageKaa extends Language {
/**
* It fixes issue with ucfirst for transforming 'i' to 'İ'
*
- * @param $string string
+ * @param string $string
*
* @return string
*/
@@ -65,7 +65,7 @@ class LanguageKaa extends Language {
/**
* It fixes issue with lcfirst for transforming 'I' to 'ı'
*
- * @param $string string
+ * @param string $string
*
* @return mixed|string
*/
@@ -80,7 +80,7 @@ class LanguageKaa extends Language {
/**
* Avoid grouping whole numbers between 0 to 9999
*
- * @param $_ string
+ * @param string $_
*
* @return string
*/
diff --git a/languages/classes/LanguageKk.php b/languages/classes/LanguageKk.php
index f96b0d92..1a098180 100644
--- a/languages/classes/LanguageKk.php
+++ b/languages/classes/LanguageKk.php
@@ -38,15 +38,14 @@ define( 'H_HAMZA', 'ٴ' ); # U+0674 ARABIC LETTER HIGH HAMZA
* @ingroup Language
*/
class KkConverter extends LanguageConverter {
-
protected $mCyrl2Latn, $mLatn2Cyrl, $mCyLa2Arab;
/**
- * @param $langobj Language
- * @param $maincode string
- * @param $variants array
- * @param $variantfallbacks array
- * @param $flags array
+ * @param Language $langobj
+ * @param string $maincode
+ * @param array $variants
+ * @param array $variantfallbacks
+ * @param array $flags
*/
function __construct( $langobj, $maincode,
$variants = array(),
@@ -227,8 +226,8 @@ class KkConverter extends LanguageConverter {
* update: delete all rule parsing because it's not used
* currently, and just produces a couple of bugs
*
- * @param $rule string
- * @param $flags array
+ * @param string $rule
+ * @param array $flags
* @return array
*/
function parseManualRule( $rule, $flags = array() ) {
@@ -251,8 +250,8 @@ class KkConverter extends LanguageConverter {
* names as they were
* - do not try to find variants for usernames
*
- * @param $link string
- * @param $nt Title
+ * @param string &$link
+ * @param Title &$nt
* @param bool $ignoreOtherCond
*/
function findVariantLink( &$link, &$nt, $ignoreOtherCond = false ) {
@@ -272,30 +271,10 @@ class KkConverter extends LanguageConverter {
}
/**
- * An ugly function wrapper for parsing Image titles
- * (to prevent image name conversion)
- *
- * @param $text string
- * @param $toVariant bool
- *
- * @return string
- */
- function autoConvert( $text, $toVariant = false ) {
- global $wgTitle;
- if ( is_object( $wgTitle ) && $wgTitle->getNamespace() == NS_FILE ) {
- $imagename = $wgTitle->getNsText();
- if ( preg_match( "/^$imagename:/", $text ) ) {
- return $text;
- }
- }
- return parent::autoConvert( $text, $toVariant );
- }
-
- /**
* It translates text into variant
*
- * @param $text string
- * @param $toVariant string
+ * @param string $text
+ * @param string $toVariant
*
* @return string
*/
@@ -326,20 +305,28 @@ class KkConverter extends LanguageConverter {
// disable conversion variables like $1, $2...
$varsfix = '\$[0-9]';
- $matches = preg_split( '/' . $varsfix . '[^' . $letters . ']+/u', $text, -1, PREG_SPLIT_OFFSET_CAPTURE );
+ $matches = preg_split(
+ '/' . $varsfix . '[^' . $letters . ']+/u',
+ $text,
+ -1,
+ PREG_SPLIT_OFFSET_CAPTURE
+ );
+
$mstart = 0;
$ret = '';
+
foreach ( $matches as $m ) {
$ret .= substr( $text, $mstart, $m[1] -$mstart );
$ret .= $this->regsConverter( $m[0], $toVariant );
$mstart = $m[1] + strlen( $m[0] );
}
+
return $ret;
}
/**
- * @param $text string
- * @param $toVariant string
+ * @param string $text
+ * @param string $toVariant
* @return mixed|string
*/
function regsConverter( $text, $toVariant ) {
@@ -350,9 +337,9 @@ class KkConverter extends LanguageConverter {
switch ( $toVariant ) {
case 'kk-arab':
case 'kk-cn':
- $letters = KK_C_LC . KK_C_UC/*.KK_L_LC.KK_L_UC*/;
- $front = 'әөүіӘӨҮІ'/*.'äöüiÄÖÜİ'*/;
- $excludes = 'еэгғкқЕЭГҒКҚ'/*.'eégğkqEÉGĞKQ'*/;
+ $letters = KK_C_LC . KK_C_UC; /*.KK_L_LC.KK_L_UC*/
+ $front = 'әөүіӘӨҮІ'; /*.'äöüiÄÖÜİ'*/
+ $excludes = 'еэгғкқЕЭГҒКҚ'; /*.'eégğkqEÉGĞKQ'*/
// split text to words
$matches = preg_split( '/[\b\s\-\.:]+/', $text, -1, PREG_SPLIT_OFFSET_CAPTURE );
$mstart = 0;
@@ -362,7 +349,9 @@ class KkConverter extends LanguageConverter {
// is matched the word to front vowels?
// exclude a words matched to е, э, г, к, к, қ,
// them should be without hamza
- if ( preg_match( '/[' . $front . ']/u', $m[0] ) && !preg_match( '/[' . $excludes . ']/u', $m[0] ) ) {
+ if ( preg_match( '/[' . $front . ']/u', $m[0] )
+ && !preg_match( '/[' . $excludes . ']/u', $m[0] )
+ ) {
$ret .= preg_replace( '/[' . $letters . ']+/u', H_HAMZA . '$0', $m[0] );
} else {
$ret .= $m[0];
@@ -395,13 +384,12 @@ class KkConverter extends LanguageConverter {
}
/**
- * @param $key string
- * @return String
+ * @param string $key
+ * @return string
*/
function convertCategoryKey( $key ) {
return $this->autoConvert( $key, 'kk' );
}
-
}
/**
@@ -411,7 +399,6 @@ class KkConverter extends LanguageConverter {
* @ingroup Language
*/
class LanguageKk extends LanguageKk_cyrl {
-
function __construct() {
global $wgHooks;
parent::__construct();
@@ -435,7 +422,7 @@ class LanguageKk extends LanguageKk_cyrl {
/**
* It fixes issue with ucfirst for transforming 'i' to 'İ'
*
- * @param $string string
+ * @param string $string
*
* @return string
*/
@@ -452,7 +439,7 @@ class LanguageKk extends LanguageKk_cyrl {
/**
* It fixes issue with lcfirst for transforming 'I' to 'ı'
*
- * @param $string string
+ * @param string $string
*
* @return string
*/
@@ -467,8 +454,8 @@ class LanguageKk extends LanguageKk_cyrl {
}
/**
- * @param $word string
- * @param $case string
+ * @param string $word
+ * @param string $case
* @return string
*/
function convertGrammar( $word, $case ) {
diff --git a/languages/classes/LanguageKk_cyrl.php b/languages/classes/LanguageKk_cyrl.php
index 5a7bbf36..22fe4289 100644
--- a/languages/classes/LanguageKk_cyrl.php
+++ b/languages/classes/LanguageKk_cyrl.php
@@ -26,15 +26,16 @@
*
* @ingroup Language
*/
+// @codingStandardsIgnoreStart Ignore class name is not in camel caps format error
class LanguageKk_cyrl extends Language {
-
+ // @codingStandardsIgnoreEnd
# Convert from the nominative form of a noun to some other case
# Invoked with {{GRAMMAR:case|word}}
/**
* Cases: genitive, dative, accusative, locative, ablative, comitative + possessive forms
*
- * @param $word string
- * @param $case string
+ * @param string $word
+ * @param string $case
*
* @return string
*/
@@ -203,7 +204,10 @@ class LanguageKk_cyrl extends Language {
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
$word = $word . "тан";
}
- } elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Sonants ) || in_array( $wordEnding, $Sibilants ) ) {
+ } elseif ( in_array( $wordEnding, $allVowels )
+ || in_array( $wordEnding, $Sonants )
+ || in_array( $wordEnding, $Sibilants )
+ ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
$word = $word . "ден";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
@@ -237,7 +241,10 @@ class LanguageKk_cyrl extends Language {
case "comitative": # kömektes
if ( in_array( $wordEnding, $Consonants ) ) {
$word = $word . "пен";
- } elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Nasals ) || in_array( $wordEnding, $Sonants ) ) {
+ } elseif ( in_array( $wordEnding, $allVowels )
+ || in_array( $wordEnding, $Nasals )
+ || in_array( $wordEnding, $Sonants )
+ ) {
$word = $word . "мен";
} elseif ( in_array( $wordEnding, $Sibilants ) ) {
$word = $word . "бен";
@@ -247,7 +254,10 @@ class LanguageKk_cyrl extends Language {
case "possessive comitative": # täweldık + kömektes
if ( in_array( $wordEnding, $Consonants ) ) {
$word = $word . "пенен";
- } elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Nasals ) || in_array( $wordEnding, $Sonants ) ) {
+ } elseif ( in_array( $wordEnding, $allVowels )
+ || in_array( $wordEnding, $Nasals )
+ || in_array( $wordEnding, $Sonants )
+ ) {
$word = $word . "менен";
} elseif ( in_array( $wordEnding, $Sibilants ) ) {
$word = $word . "бенен";
@@ -259,8 +269,8 @@ class LanguageKk_cyrl extends Language {
}
/**
- * @param $word string
- * @param $case string
+ * @param string $word
+ * @param string $case
* @return string
*/
function convertGrammarKk_latn( $word, $case ) {
@@ -428,7 +438,10 @@ class LanguageKk_cyrl extends Language {
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
$word = $word . "tan";
}
- } elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Sonants ) || in_array( $wordEnding, $Sibilants ) ) {
+ } elseif ( in_array( $wordEnding, $allVowels )
+ || in_array( $wordEnding, $Sonants )
+ || in_array( $wordEnding, $Sibilants )
+ ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
$word = $word . "den";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
@@ -462,7 +475,10 @@ class LanguageKk_cyrl extends Language {
case "comitative": # kömektes
if ( in_array( $wordEnding, $Consonants ) ) {
$word = $word . "pen";
- } elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Nasals ) || in_array( $wordEnding, $Sonants ) ) {
+ } elseif ( in_array( $wordEnding, $allVowels )
+ || in_array( $wordEnding, $Nasals )
+ || in_array( $wordEnding, $Sonants )
+ ) {
$word = $word . "men";
} elseif ( in_array( $wordEnding, $Sibilants ) ) {
$word = $word . "ben";
@@ -472,7 +488,10 @@ class LanguageKk_cyrl extends Language {
case "possessive comitative": # täweldık + kömektes
if ( in_array( $wordEnding, $Consonants ) ) {
$word = $word . "penen";
- } elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Nasals ) || in_array( $wordEnding, $Sonants ) ) {
+ } elseif ( in_array( $wordEnding, $allVowels )
+ || in_array( $wordEnding, $Nasals )
+ || in_array( $wordEnding, $Sonants )
+ ) {
$word = $word . "menen";
} elseif ( in_array( $wordEnding, $Sibilants ) ) {
$word = $word . "benen";
@@ -484,8 +503,8 @@ class LanguageKk_cyrl extends Language {
}
/**
- * @param $word string
- * @param $case string
+ * @param string $word
+ * @param string $case
* @return string
*/
function convertGrammarKk_arab( $word, $case ) {
@@ -653,7 +672,10 @@ class LanguageKk_cyrl extends Language {
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
$word = $word . "تان";
}
- } elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Sonants ) || in_array( $wordEnding, $Sibilants ) ) {
+ } elseif ( in_array( $wordEnding, $allVowels )
+ || in_array( $wordEnding, $Sonants )
+ || in_array( $wordEnding, $Sibilants )
+ ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
$word = $word . "دەن";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
@@ -687,7 +709,10 @@ class LanguageKk_cyrl extends Language {
case "comitative": # kömektes
if ( in_array( $wordEnding, $Consonants ) ) {
$word = $word . "پەن";
- } elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Nasals ) || in_array( $wordEnding, $Sonants ) ) {
+ } elseif ( in_array( $wordEnding, $allVowels )
+ || in_array( $wordEnding, $Nasals )
+ || in_array( $wordEnding, $Sonants )
+ ) {
$word = $word . "مەن";
} elseif ( in_array( $wordEnding, $Sibilants ) ) {
$word = $word . "بەن";
@@ -697,7 +722,10 @@ class LanguageKk_cyrl extends Language {
case "possessive comitative": # täweldık + kömektes
if ( in_array( $wordEnding, $Consonants ) ) {
$word = $word . "پەنەن";
- } elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Nasals ) || in_array( $wordEnding, $Sonants ) ) {
+ } elseif ( in_array( $wordEnding, $allVowels )
+ || in_array( $wordEnding, $Nasals )
+ || in_array( $wordEnding, $Sonants )
+ ) {
$word = $word . "مەنەن";
} elseif ( in_array( $wordEnding, $Sibilants ) ) {
$word = $word . "بەنەن";
@@ -709,8 +737,8 @@ class LanguageKk_cyrl extends Language {
}
/**
- * @param $word string
- * @param $allVowels array
+ * @param string $word
+ * @param array $allVowels
* @return array
*/
function lastLetter( $word, $allVowels ) {
@@ -727,7 +755,7 @@ class LanguageKk_cyrl extends Language {
$lastLetter[0] = $ar[count( $ar ) - 1];
// Find the last vowel in the word
- $lastLetter[1] = NULL;
+ $lastLetter[1] = null;
foreach ( $wordReversed as $xvalue ) {
foreach ( $allVowels as $yvalue ) {
if ( strcmp( $xvalue, $yvalue ) == 0 ) {
@@ -737,7 +765,7 @@ class LanguageKk_cyrl extends Language {
continue;
}
}
- if ( $lastLetter[1] !== NULL ) {
+ if ( $lastLetter[1] !== null ) {
break;
} else {
continue;
@@ -750,7 +778,7 @@ class LanguageKk_cyrl extends Language {
/**
* Avoid grouping whole numbers between 0 to 9999
*
- * @param $_ string
+ * @param string $_
*
* @return string
*/
diff --git a/languages/classes/LanguageKm.php b/languages/classes/LanguageKm.php
index 71d67a76..1e0bb004 100644
--- a/languages/classes/LanguageKm.php
+++ b/languages/classes/LanguageKm.php
@@ -30,7 +30,7 @@
class LanguageKm extends Language {
/**
- * @param $_ string
+ * @param string $_
* @return string
*/
function commafy( $_ ) {
diff --git a/languages/classes/LanguageKsh.php b/languages/classes/LanguageKsh.php
index d25ce714..6b6c95d1 100644
--- a/languages/classes/LanguageKsh.php
+++ b/languages/classes/LanguageKsh.php
@@ -28,7 +28,7 @@
* @ingroup Language
*/
class LanguageKsh extends Language {
- static $familygender = array(
+ private static $familygender = array(
// Do not add male wiki families, since that's the default.
// No need add neuter wikis having names ending in -wiki.
'wikipedia' => 'f',
@@ -83,8 +83,8 @@ class LanguageKsh extends Language {
* Contents of the leftmost table column can be copied and pasted as
* "case" values.
*
- * @param $word String
- * @param $case String
+ * @param string $word
+ * @param string $case
*
* @return string
*/
@@ -168,7 +168,7 @@ class LanguageKsh extends Language {
/**
* Avoid grouping whole numbers between 0 to 9999
*
- * @param $_ string
+ * @param string $_
*
* @return string
*/
@@ -183,8 +183,8 @@ class LanguageKsh extends Language {
/**
* Handle cases of (1, other, 0) or (1, other)
*
- * @param $count int
- * @param $forms array
+ * @param int $count
+ * @param array $forms
*
* @return string
*/
diff --git a/languages/classes/LanguageKu.php b/languages/classes/LanguageKu.php
index 75ac1c77..1fdebc27 100644
--- a/languages/classes/LanguageKu.php
+++ b/languages/classes/LanguageKu.php
@@ -127,7 +127,8 @@ class KuConverter extends LanguageConverter {
' O' => 'ئۆ ',
' U' => 'ئو ',
' Û' => 'ئوو ',
- # eyn erstmal deaktivieren, einfache Anführungsstriche sind einfach zu häufig, um sie als eyn zu interpretieren
+ # eyn erstmal deaktivieren, einfache Anführungsstriche sind einfach zu
+ # häufig, um sie als eyn zu interpretieren.
# '\'' => 'ع',
/* # deactivated for now, breaks links i.e. in header of Special:Recentchanges :-(
@@ -159,9 +160,9 @@ class KuConverter extends LanguageConverter {
* names as they were
* - do not try to find variants for usernames
*
- * @param $link string
- * @param $nt Title
- * @param $ignoreOtherCond bool
+ * @param string &$link
+ * @param Title &$nt
+ * @param bool $ignoreOtherCond
*/
function findVariantLink( &$link, &$nt, $ignoreOtherCond = false ) {
// check for user namespace
@@ -180,31 +181,11 @@ class KuConverter extends LanguageConverter {
}
/**
- * An ugly function wrapper for parsing Image titles
- * (to prevent image name conversion)
- *
- * @param $text string
- * @param $toVariant bool
- *
- * @return string
- */
- function autoConvert( $text, $toVariant = false ) {
- global $wgTitle;
- if ( is_object( $wgTitle ) && $wgTitle->getNamespace() == NS_FILE ) {
- $imagename = $wgTitle->getNsText();
- if ( preg_match( "/^$imagename:/", $text ) ) {
- return $text;
- }
- }
- return parent::autoConvert( $text, $toVariant );
- }
-
- /**
* It translates text into variant, specials:
* - ommiting roman numbers
*
- * @param $text string
- * @param $toVariant bool
+ * @param string $text
+ * @param bool $toVariant
*
* @throws MWException
* @return string
diff --git a/languages/classes/LanguageKu_ku.php b/languages/classes/LanguageKu_ku.php
index 2381de53..e745965a 100644
--- a/languages/classes/LanguageKu_ku.php
+++ b/languages/classes/LanguageKu_ku.php
@@ -26,12 +26,13 @@
*
* @ingroup Language
*/
+// @codingStandardsIgnoreStart Ignore class name is not in camel caps format error
class LanguageKu_ku extends Language {
-
+ // @codingStandardsIgnoreEnd
/**
* Avoid grouping whole numbers between 0 to 9999
*
- * @param $_ string
+ * @param string $_
*
* @return string
*/
diff --git a/languages/classes/LanguageLa.php b/languages/classes/LanguageLa.php
index 9c778782..e2dea1d9 100644
--- a/languages/classes/LanguageLa.php
+++ b/languages/classes/LanguageLa.php
@@ -35,8 +35,8 @@ class LanguageLa extends Language {
*
* Cases: genitive, accusative, ablative
*
- * @param $word string
- * @param $case string
+ * @param string $word
+ * @param string $case
*
* @return string
*/
diff --git a/languages/classes/LanguageMl.php b/languages/classes/LanguageMl.php
index ec3ea541..cd39378b 100644
--- a/languages/classes/LanguageMl.php
+++ b/languages/classes/LanguageMl.php
@@ -37,7 +37,7 @@ class LanguageMl extends Language {
* @todo FIXME: This is language-specific for now only to avoid the negative
* performance impact of enabling it for all languages.
*
- * @param $s string
+ * @param string $s
*
* @return string
*/
diff --git a/languages/classes/LanguageMy.php b/languages/classes/LanguageMy.php
index 1d117dd6..236ae4f5 100644
--- a/languages/classes/LanguageMy.php
+++ b/languages/classes/LanguageMy.php
@@ -30,7 +30,7 @@
class LanguageMy extends Language {
/**
- * @param $_ string
+ * @param string $_
* @return string
*/
function commafy( $_ ) {
diff --git a/languages/classes/LanguageOs.php b/languages/classes/LanguageOs.php
index f37e2d54..dbf4cceb 100644
--- a/languages/classes/LanguageOs.php
+++ b/languages/classes/LanguageOs.php
@@ -49,8 +49,8 @@ class LanguageOs extends Language {
* Then result word is: word + 'й' + case ending for cases != allative or comitative
* and word + case ending for allative or comitative. Ending of allative case here is 'æ'.
*
- * @param $word string
- * @param $case string
+ * @param string $word
+ * @param string $case
* @return string
*/
function convertGrammar( $word, $case ) {
@@ -67,7 +67,6 @@ class LanguageOs extends Language {
# Variable for ending
$ending = '';
-
# CHecking if the $word is in plural form
if ( preg_match( '/тæ$/u', $word ) ) {
$word = mb_substr( $word, 0, -1 );
diff --git a/languages/classes/LanguagePl.php b/languages/classes/LanguagePl.php
index 8e286c94..e0bf0690 100644
--- a/languages/classes/LanguagePl.php
+++ b/languages/classes/LanguagePl.php
@@ -28,7 +28,7 @@
*/
class LanguagePl extends Language {
/**
- * @param $_ string
+ * @param string $_
* @return string
*/
function commafy( $_ ) {
diff --git a/languages/classes/LanguageQqx.php b/languages/classes/LanguageQqx.php
index 9d92834d..1ee398de 100644
--- a/languages/classes/LanguageQqx.php
+++ b/languages/classes/LanguageQqx.php
@@ -32,7 +32,7 @@
*/
class LanguageQqx extends Language {
/**
- * @param $key string
+ * @param string $key
* @return string
*/
function getMessage( $key ) {
diff --git a/languages/classes/LanguageRu.php b/languages/classes/LanguageRu.php
index d3ac1d22..226e313e 100644
--- a/languages/classes/LanguageRu.php
+++ b/languages/classes/LanguageRu.php
@@ -34,8 +34,8 @@ class LanguageRu extends Language {
* Convert from the nominative form of a noun to some other case
* Invoked with {{grammar:case|word}}
*
- * @param $word string
- * @param $case string
+ * @param string $word
+ * @param string $case
* @return string
*/
function convertGrammar( $word, $case ) {
@@ -65,6 +65,8 @@ class LanguageRu extends Language {
$word = join( '', array_slice( $chars[0], 0, -2 ) ) . 'тей';
} elseif ( join( '', array_slice( $chars[0], -2 ) ) === 'ды' ) {
$word = join( '', array_slice( $chars[0], 0, -2 ) ) . 'дов';
+ } elseif ( join( '', array_slice( $chars[0], -1 ) ) === 'д' ) {
+ $word = join( '', array_slice( $chars[0], 0, -1 ) ) . 'да';
} elseif ( join( '', array_slice( $chars[0], -3 ) ) === 'ник' ) {
$word = join( '', array_slice( $chars[0], 0, -3 ) ) . 'ника';
} elseif ( join( '', array_slice( $chars[0], -3 ) ) === 'ные' ) {
@@ -91,6 +93,8 @@ class LanguageRu extends Language {
$word = join( '', array_slice( $chars[0], 0, -2 ) ) . 'тях';
} elseif ( join( '', array_slice( $chars[0], -2 ) ) === 'ды' ) {
$word = join( '', array_slice( $chars[0], 0, -2 ) ) . 'дах';
+ } elseif ( join( '', array_slice( $chars[0], -1 ) ) === 'д' ) {
+ $word = join( '', array_slice( $chars[0], 0, -1 ) ) . 'де';
} elseif ( join( '', array_slice( $chars[0], -3 ) ) === 'ник' ) {
$word = join( '', array_slice( $chars[0], 0, -3 ) ) . 'нике';
} elseif ( join( '', array_slice( $chars[0], -3 ) ) === 'ные' ) {
@@ -108,7 +112,7 @@ class LanguageRu extends Language {
* See manual of style at http://ru.wikipedia.org/wiki/Википедия:Оформление_статей
* So "1 234 567", "12 345" but "1234"
*
- * @param $_ string
+ * @param string $_
*
* @return string
*/
diff --git a/languages/classes/LanguageShi.php b/languages/classes/LanguageShi.php
index f4180cb8..105a3af7 100644
--- a/languages/classes/LanguageShi.php
+++ b/languages/classes/LanguageShi.php
@@ -36,7 +36,6 @@ require_once __DIR__ . '/../LanguageConverter.php';
* @ingroup Language
*/
class ShiConverter extends LanguageConverter {
-
protected $mDoContentConvert;
public $mToLatin = array(
@@ -81,8 +80,8 @@ class ShiConverter extends LanguageConverter {
* update: delete all rule parsing because it's not used
* currently, and just produces a couple of bugs
*
- * @param $rule string
- * @param $flags array
+ * @param string $rule
+ * @param array $flags
* @return array
*/
function parseManualRule( $rule, $flags = array() ) {
@@ -102,12 +101,13 @@ class ShiConverter extends LanguageConverter {
/**
* Do not convert content on talk pages
*
- * @param $text string
- * @param $parser Parser
+ * @param string $text
+ * @param Parser $parser
* @return string
*/
function parserConvert( $text, &$parser ) {
- $this->mDoContentConvert = !( is_object( $parser->getTitle() ) && $parser->getTitle()->isTalkPage() );
+ $this->mDoContentConvert = !( is_object( $parser->getTitle() )
+ && $parser->getTitle()->isTalkPage() );
return parent::parserConvert( $text, $parser );
}
@@ -118,9 +118,9 @@ class ShiConverter extends LanguageConverter {
* names as they were
* - do not try to find variants for usernames
*
- * @param $link string
- * @param $nt Title
- * @param $ignoreOtherCond bool
+ * @param string &$link
+ * @param Title &$nt
+ * @param bool $ignoreOtherCond
*/
function findVariantLink( &$link, &$nt, $ignoreOtherCond = false ) {
// check for user namespace
@@ -139,30 +139,10 @@ class ShiConverter extends LanguageConverter {
}
/**
- * An ugly function wrapper for parsing Image titles
- * (to prevent image name conversion)
- *
- * @param $text string
- * @param $toVariant bool
- *
- * @return string
- */
- function autoConvert( $text, $toVariant = false ) {
- global $wgTitle;
- if ( is_object( $wgTitle ) && $wgTitle->getNamespace() == NS_FILE ) {
- $imagename = $wgTitle->getNsText();
- if ( preg_match( "/^$imagename:/", $text ) ) {
- return $text;
- }
- }
- return parent::autoConvert( $text, $toVariant );
- }
-
- /**
* It translates text into variant
*
- * @param $text string
- * @param $toVariant string
+ * @param string $text
+ * @param string $toVariant
*
* @return string
*/
diff --git a/languages/classes/LanguageSl.php b/languages/classes/LanguageSl.php
index 06c75c95..25fc9631 100644
--- a/languages/classes/LanguageSl.php
+++ b/languages/classes/LanguageSl.php
@@ -32,8 +32,8 @@ class LanguageSl extends Language {
/**
* Cases: rodilnik, dajalnik, tožilnik, mestnik, orodnik
*
- * @param $word string
- * @param $case string
+ * @param string $word
+ * @param string $case
*
* @return string
*/
@@ -52,7 +52,8 @@ class LanguageSl extends Language {
break;
}
- return $word; # this will return the original value for 'imenovalnik' (nominativ) and all undefined case values
+ # this will return the original value for 'imenovalnik' (nominativ) and
+ # all undefined case values.
+ return $word;
}
-
}
diff --git a/languages/classes/LanguageSr.php b/languages/classes/LanguageSr.php
index 76cd8229..bdf1ec41 100644
--- a/languages/classes/LanguageSr.php
+++ b/languages/classes/LanguageSr.php
@@ -34,35 +34,35 @@ require_once __DIR__ . '/../LanguageConverter.php';
*/
class SrConverter extends LanguageConverter {
public $mToLatin = array(
- 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd',
- 'ђ' => 'đ', 'е' => 'e', 'ж' => 'ž', 'з' => 'z', 'и' => 'i',
- 'ј' => 'j', 'к' => 'k', 'л' => 'l', 'љ' => 'lj', 'м' => 'm',
- 'н' => 'n', 'њ' => 'nj', 'о' => 'o', 'п' => 'p', 'р' => 'r',
- 'с' => 's', 'т' => 't', 'ћ' => 'ć', 'у' => 'u', 'ф' => 'f',
- 'х' => 'h', 'ц' => 'c', 'ч' => 'č', 'џ' => 'dž', 'ш' => 'š',
-
- 'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D',
- 'Ђ' => 'Đ', 'Е' => 'E', 'Ж' => 'Ž', 'З' => 'Z', 'И' => 'I',
- 'Ј' => 'J', 'К' => 'K', 'Л' => 'L', 'Љ' => 'Lj', 'М' => 'M',
- 'Н' => 'N', 'Њ' => 'Nj', 'О' => 'O', 'П' => 'P', 'Р' => 'R',
- 'С' => 'S', 'Т' => 'T', 'Ћ' => 'Ć', 'У' => 'U', 'Ф' => 'F',
- 'Х' => 'H', 'Ц' => 'C', 'Ч' => 'Č', 'Џ' => 'Dž', 'Ш' => 'Š',
+ 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd',
+ 'ђ' => 'đ', 'е' => 'e', 'ж' => 'ž', 'з' => 'z', 'и' => 'i',
+ 'ј' => 'j', 'к' => 'k', 'л' => 'l', 'љ' => 'lj', 'м' => 'm',
+ 'н' => 'n', 'њ' => 'nj', 'о' => 'o', 'п' => 'p', 'р' => 'r',
+ 'с' => 's', 'т' => 't', 'ћ' => 'ć', 'у' => 'u', 'ф' => 'f',
+ 'х' => 'h', 'ц' => 'c', 'ч' => 'č', 'џ' => 'dž', 'ш' => 'š',
+
+ 'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D',
+ 'Ђ' => 'Đ', 'Е' => 'E', 'Ж' => 'Ž', 'З' => 'Z', 'И' => 'I',
+ 'Ј' => 'J', 'К' => 'K', 'Л' => 'L', 'Љ' => 'Lj', 'М' => 'M',
+ 'Н' => 'N', 'Њ' => 'Nj', 'О' => 'O', 'П' => 'P', 'Р' => 'R',
+ 'С' => 'S', 'Т' => 'T', 'Ћ' => 'Ć', 'У' => 'U', 'Ф' => 'F',
+ 'Х' => 'H', 'Ц' => 'C', 'Ч' => 'Č', 'Џ' => 'Dž', 'Ш' => 'Š',
);
public $mToCyrillics = array(
- 'a' => 'а', 'b' => 'б', 'c' => 'ц', 'č' => 'ч', 'ć' => 'ћ',
- 'd' => 'д', 'dž' => 'џ', 'đ' => 'ђ', 'e' => 'е', 'f' => 'ф',
- 'g' => 'г', 'h' => 'х', 'i' => 'и', 'j' => 'ј', 'k' => 'к',
+ 'a' => 'а', 'b' => 'б', 'c' => 'ц', 'č' => 'ч', 'ć' => 'ћ',
+ 'd' => 'д', 'dž' => 'џ', 'đ' => 'ђ', 'e' => 'е', 'f' => 'ф',
+ 'g' => 'г', 'h' => 'х', 'i' => 'и', 'j' => 'ј', 'k' => 'к',
'l' => 'л', 'lj' => 'љ', 'm' => 'м', 'n' => 'н', 'nj' => 'њ',
- 'o' => 'о', 'p' => 'п', 'r' => 'р', 's' => 'с', 'š' => 'ш',
- 't' => 'т', 'u' => 'у', 'v' => 'в', 'z' => 'з', 'ž' => 'ж',
+ 'o' => 'о', 'p' => 'п', 'r' => 'р', 's' => 'с', 'š' => 'ш',
+ 't' => 'т', 'u' => 'у', 'v' => 'в', 'z' => 'з', 'ž' => 'ж',
- 'A' => 'А', 'B' => 'Б', 'C' => 'Ц', 'Č' => 'Ч', 'Ć' => 'Ћ',
- 'D' => 'Д', 'Dž' => 'Џ', 'Đ' => 'Ђ', 'E' => 'Е', 'F' => 'Ф',
- 'G' => 'Г', 'H' => 'Х', 'I' => 'И', 'J' => 'Ј', 'K' => 'К',
+ 'A' => 'А', 'B' => 'Б', 'C' => 'Ц', 'Č' => 'Ч', 'Ć' => 'Ћ',
+ 'D' => 'Д', 'Dž' => 'Џ', 'Đ' => 'Ђ', 'E' => 'Е', 'F' => 'Ф',
+ 'G' => 'Г', 'H' => 'Х', 'I' => 'И', 'J' => 'Ј', 'K' => 'К',
'L' => 'Л', 'LJ' => 'Љ', 'M' => 'М', 'N' => 'Н', 'NJ' => 'Њ',
- 'O' => 'О', 'P' => 'П', 'R' => 'Р', 'S' => 'С', 'Š' => 'Ш',
- 'T' => 'Т', 'U' => 'У', 'V' => 'В', 'Z' => 'З', 'Ž' => 'Ж',
+ 'O' => 'О', 'P' => 'П', 'R' => 'Р', 'S' => 'С', 'Š' => 'Ш',
+ 'T' => 'Т', 'U' => 'У', 'V' => 'В', 'Z' => 'З', 'Ž' => 'Ж',
'DŽ' => 'Џ', 'd!ž' => 'дж', 'D!ž' => 'Дж', 'D!Ž' => 'ДЖ',
'Lj' => 'Љ', 'l!j' => 'лј', 'L!j' => 'Лј', 'L!J' => 'ЛЈ',
@@ -84,8 +84,8 @@ class SrConverter extends LanguageConverter {
* update: delete all rule parsing because it's not used
* currently, and just produces a couple of bugs
*
- * @param $rule string
- * @param $flags array
+ * @param string $rule
+ * @param array $flags
* @return array
*/
function parseManualRule( $rule, $flags = array() ) {
@@ -108,9 +108,9 @@ class SrConverter extends LanguageConverter {
* names as they were
* - do not try to find variants for usernames
*
- * @param $link string
- * @param $nt Title
- * @param $ignoreOtherCond bool
+ * @param string &$link
+ * @param Title &$nt
+ * @param bool $ignoreOtherCond
*/
function findVariantLink( &$link, &$nt, $ignoreOtherCond = false ) {
// check for user namespace
@@ -129,31 +129,11 @@ class SrConverter extends LanguageConverter {
}
/**
- * An ugly function wrapper for parsing Image titles
- * (to prevent image name conversion)
- *
- * @param $text string
- * @param $toVariant bool
- *
- * @return string
- */
- function autoConvert( $text, $toVariant = false ) {
- global $wgTitle;
- if ( is_object( $wgTitle ) && $wgTitle->getNamespace() == NS_FILE ) {
- $imagename = $wgTitle->getNsText();
- if ( preg_match( "/^$imagename:/", $text ) ) {
- return $text;
- }
- }
- return parent::autoConvert( $text, $toVariant );
- }
-
- /**
* It translates text into variant, specials:
* - ommiting roman numbers
*
- * @param $text string
- * @param $toVariant string
+ * @param string $text
+ * @param string $toVariant
*
* @throws MWException
* @return string
@@ -190,9 +170,9 @@ class SrConverter extends LanguageConverter {
* Guess if a text is written in Cyrillic or Latin.
* Overrides LanguageConverter::guessVariant()
*
- * @param string $text The text to be checked
- * @param string $variant Language code of the variant to be checked for
- * @return bool true if $text appears to be written in $variant
+ * @param string $text The text to be checked
+ * @param string $variant Language code of the variant to be checked for
+ * @return bool True if $text appears to be written in $variant
*
* @author Nikola Smolenski <smolensk@eunet.rs>
* @since 1.19
diff --git a/languages/classes/LanguageTr.php b/languages/classes/LanguageTr.php
index 887f05c8..8431c3ff 100644
--- a/languages/classes/LanguageTr.php
+++ b/languages/classes/LanguageTr.php
@@ -21,7 +21,6 @@
* @ingroup Language
*/
-
/**
* Turkish (Türkçe)
*
@@ -35,7 +34,7 @@
class LanguageTr extends Language {
/**
- * @param $string string
+ * @param string $string
* @return string
*/
function ucfirst( $string ) {
@@ -47,7 +46,7 @@ class LanguageTr extends Language {
}
/**
- * @param $string string
+ * @param string $string
* @return mixed|string
*/
function lcfirst( $string ) {
diff --git a/languages/classes/LanguageTyv.php b/languages/classes/LanguageTyv.php
index fc1e8a81..429d0a62 100644
--- a/languages/classes/LanguageTyv.php
+++ b/languages/classes/LanguageTyv.php
@@ -33,8 +33,8 @@ class LanguageTyv extends Language {
* Grammatical transformations, needed for inflected languages
* Invoked by putting {{grammar:case|word}} in a message
*
- * @param $word string
- * @param $case string
+ * @param string $word
+ * @param string $case
* @return string
*/
function convertGrammar( $word, $case ) {
@@ -44,7 +44,8 @@ class LanguageTyv extends Language {
}
// Set up some constants...
- $allVowels = array( "е", "и", "э", "ө", "ү", "а", "ё", "о", "у", "ы", "ю", "я", "a", "e", "i", "o", "ö", "u", "ü", "y" );
+ $allVowels = array( "е", "и", "э", "ө", "ү", "а", "ё", "о", "у", "ы",
+ "ю", "я", "a", "e", "i", "o", "ö", "u", "ü", "y" );
$frontVowels = array( "е", "и", "э", "ө", "ү", "e", "i", "ö", "ü" );
$backVowels = array( "а", "ё", "о", "у", "ы", "ю", "я", "a", "o", "u", "y" );
$unroundFrontVowels = array( "е", "и", "э", "e", "i" );
@@ -53,7 +54,8 @@ class LanguageTyv extends Language {
$roundBackVowels = array( "ё", "о", "у", "ю", "o", "u" );
//$voicedPhonemes = array( "д", "б", "з", "ж", "г", "d", "b", "z", "g" );
$unvoicedPhonemes = array( "т", "п", "с", "ш", "к", "ч", "х", "t", "p", "s", "k", "x" );
- $directiveUnvoicedStems = array( "т", "п", "с", "ш", "к", "ч", "х", "л", "м", "н", "ң", "t", "p", "s", "k", "x", "l", "m", "n", "ŋ" );
+ $directiveUnvoicedStems = array( "т", "п", "с", "ш", "к", "ч", "х", "л",
+ "м", "н", "ң", "t", "p", "s", "k", "x", "l", "m", "n", "ŋ" );
$directiveVoicedStems = array( "д", "б", "з", "ж", "г", "р", "й", "d", "b", "z", "g", "r", "j" );
//$allSonants = array("л", "м", "н", "ң", "р", "й");
@@ -62,11 +64,14 @@ class LanguageTyv extends Language {
//Put the word in a form we can play with since we're using UTF-8
preg_match_all( '/./us', $word, $ar );
- $wordEnding = $ar[0][count( $ar[0] ) - 1]; // Here's the last letter in the word
- $wordReversed = array_reverse( $ar[0] ); // Here's an array with the order of the letters in the word reversed so we can find a match quicker *shrug*
+ // Here's the last letter in the word
+ $wordEnding = $ar[0][count( $ar[0] ) - 1];
+ // Here's an array with the order of the letters in the word reversed so
+ // we can find a match quicker. *shrug*
+ $wordReversed = array_reverse( $ar[0] );
// Find the last vowel in the word
- $wordLastVowel = NULL;
+ $wordLastVowel = null;
foreach ( $wordReversed as $xvalue ) {
foreach ( $allVowels as $yvalue ) {
if ( strcmp( $xvalue, $yvalue ) == 0 ) {
@@ -76,7 +81,7 @@ class LanguageTyv extends Language {
continue;
}
}
- if ( $wordLastVowel !== NULL ) {
+ if ( $wordLastVowel !== null ) {
break;
} else {
continue;
diff --git a/languages/classes/LanguageUk.php b/languages/classes/LanguageUk.php
index 08041a92..5215da02 100644
--- a/languages/classes/LanguageUk.php
+++ b/languages/classes/LanguageUk.php
@@ -32,8 +32,8 @@ class LanguageUk extends Language {
* Convert from the nominative form of a noun to some other case
* Invoked with {{grammar:case|word}}
*
- * @param $word string
- * @param $case string
+ * @param string $word
+ * @param string $case
* @return string
*/
function convertGrammar( $word, $case ) {
@@ -51,7 +51,9 @@ class LanguageUk extends Language {
if ( !preg_match( "/[a-zA-Z_]/us", $word ) ) {
switch ( $case ) {
case 'genitive': # родовий відмінок
- if ( ( join( '', array_slice( $ar[0], -4 ) ) == 'вікі' ) || ( join( '', array_slice( $ar[0], -4 ) ) == 'Вікі' ) ) {
+ if ( ( join( '', array_slice( $ar[0], -4 ) ) == 'вікі' )
+ || ( join( '', array_slice( $ar[0], -4 ) ) == 'Вікі' )
+ ) {
} elseif ( join( '', array_slice( $ar[0], -1 ) ) == 'ь' ) {
$word = join( '', array_slice( $ar[0], 0, -1 ) ) . 'я';
} elseif ( join( '', array_slice( $ar[0], -2 ) ) == 'ія' ) {
@@ -70,7 +72,9 @@ class LanguageUk extends Language {
# stub
break;
case 'accusative': # знахідний відмінок
- if ( ( join( '', array_slice( $ar[0], -4 ) ) == 'вікі' ) || ( join( '', array_slice( $ar[0], -4 ) ) == 'Вікі' ) ) {
+ if ( ( join( '', array_slice( $ar[0], -4 ) ) == 'вікі' )
+ || ( join( '', array_slice( $ar[0], -4 ) ) == 'Вікі' )
+ ) {
} elseif ( join( '', array_slice( $ar[0], -2 ) ) == 'ія' ) {
$word = join( '', array_slice( $ar[0], 0, -2 ) ) . 'ію';
}
@@ -89,7 +93,7 @@ class LanguageUk extends Language {
/**
* Ukrainian numeric format is "12 345,67" but "1234,56"
*
- * @param $_ string
+ * @param string $_
*
* @return string
*/
diff --git a/languages/classes/LanguageUz.php b/languages/classes/LanguageUz.php
index aa3e4f24..985de68e 100644
--- a/languages/classes/LanguageUz.php
+++ b/languages/classes/LanguageUz.php
@@ -54,7 +54,8 @@ class UzConverter extends LanguageConverter {
'ф' => 'f', 'Ф' => 'F',
'ц' => 'c', 'Ц' => 'C',
'ў' => 'oʻ', 'Ў' => 'Oʻ',
- 'ц' => 'ts', 'Ц' => 'Ts', // note: at the beginning of a word and right after a consonant, only "s" is used
+ // note: at the beginning of a word and right after a consonant, only "s" is used
+ 'ц' => 'ts', 'Ц' => 'Ts',
'қ' => 'q', 'Қ' => 'Q',
'ё' => 'yo', 'Ё' => 'Yo',
'ю' => 'yu', 'Ю' => 'Yu',
@@ -69,9 +70,9 @@ class UzConverter extends LanguageConverter {
'a' => 'а', 'A' => 'А',
'b' => 'б', 'B' => 'Б',
'd' => 'д', 'D' => 'Д',
- 'e' => 'е', 'E' => 'Е',
- ' e' => ' э', ' E' => ' Э', // "э" is used at the beginning of a word instead of "e"
- 'ye' => 'е', 'Ye' => 'Е',
+ // at the beginning of a word and after a vowel, "э" is used instead of "e"
+ // (see regex below)
+ 'e' => 'э', 'E' => 'Э',
'f' => 'ф', 'F' => 'Ф',
'g' => 'г', 'G' => 'Г',
'g‘' => 'ғ', 'G‘' => 'Ғ', 'gʻ' => 'ғ', 'Gʻ' => 'Ғ',
@@ -112,6 +113,18 @@ class UzConverter extends LanguageConverter {
);
}
+ function translate( $text, $toVariant ) {
+ if ( $toVariant == 'uz-cyrl' ) {
+ $text = str_replace( 'ye', 'е', $text );
+ $text = str_replace( 'Ye', 'Е', $text );
+ $text = str_replace( 'YE', 'Е', $text );
+ // "е" after consonants, otherwise "э" (see above)
+ $text = preg_replace( '/([BVGDJZYKLMNPRSTFXCWQʻ‘H])E/u', '$1Е', $text );
+ $text = preg_replace( '/([bvgdjzyklmnprstfxcwqʻ‘h])e/ui', '$1е', $text );
+ }
+ return parent::translate( $text, $toVariant );
+ }
+
}
/**
diff --git a/languages/classes/LanguageWa.php b/languages/classes/LanguageWa.php
index e5f7438f..98d138db 100644
--- a/languages/classes/LanguageWa.php
+++ b/languages/classes/LanguageWa.php
@@ -36,10 +36,10 @@ class LanguageWa extends Language {
* "<day> di <monthname>" for months starting by a consoun, and
* "<day> d' <monthname>" for months starting with a vowel
*
- * @param $ts string
- * @param $adj bool
- * @param $format bool
- * @param $tc bool
+ * @param string $ts
+ * @param bool $adj
+ * @param bool $format
+ * @param bool $tc
* @return string
*/
function date( $ts, $adj = false, $format = true, $tc = false ) {
@@ -85,10 +85,10 @@ class LanguageWa extends Language {
}
/**
- * @param $ts string
- * @param $adj bool
- * @param $format bool
- * @param $tc bool
+ * @param string $ts
+ * @param bool $adj
+ * @param bool $format
+ * @param bool $tc
* @return string
*/
function timeanddate( $ts, $adj = false, $format = true, $tc = false ) {
diff --git a/languages/classes/LanguageYue.php b/languages/classes/LanguageYue.php
index aef52151..3293cc64 100644
--- a/languages/classes/LanguageYue.php
+++ b/languages/classes/LanguageYue.php
@@ -40,7 +40,7 @@ class LanguageYue extends Language {
* for now just treat each character as a word.
* @todo FIXME: Only do this for Han characters...
*
- * @param $string string
+ * @param string $string
* @return string
*/
function segmentByWord( $string ) {
@@ -50,7 +50,7 @@ class LanguageYue extends Language {
}
/**
- * @param $string
+ * @param string $string
* @return string
*/
function normalizeForSearch( $string ) {
diff --git a/languages/classes/LanguageZh.php b/languages/classes/LanguageZh.php
index d4130183..67f8769b 100644
--- a/languages/classes/LanguageZh.php
+++ b/languages/classes/LanguageZh.php
@@ -28,14 +28,13 @@ require_once __DIR__ . '/LanguageZh_hans.php';
* @ingroup Language
*/
class ZhConverter extends LanguageConverter {
-
/**
- * @param $langobj Language
- * @param $maincode string
- * @param $variants array
- * @param $variantfallbacks array
- * @param $flags array
- * @param $manualLevel array
+ * @param Language $langobj
+ * @param string $maincode
+ * @param array $variants
+ * @param array $variantfallbacks
+ * @param array $flags
+ * @param array $manualLevel
*/
function __construct( $langobj, $maincode,
$variants = array(),
@@ -88,8 +87,8 @@ class ZhConverter extends LanguageConverter {
}
/**
- * @param $key string
- * @return String
+ * @param string $key
+ * @return string
*/
function convertCategoryKey( $key ) {
return $this->autoConvert( $key, 'zh' );
@@ -103,12 +102,22 @@ class ZhConverter extends LanguageConverter {
* @ingroup Language
*/
class LanguageZh extends LanguageZh_hans {
-
function __construct() {
global $wgHooks;
+
parent::__construct();
- $variants = array( 'zh', 'zh-hans', 'zh-hant', 'zh-cn', 'zh-hk', 'zh-mo', 'zh-my', 'zh-sg', 'zh-tw' );
+ $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' ),
@@ -138,7 +147,7 @@ class LanguageZh extends LanguageZh_hans {
/**
* this should give much better diff info
*
- * @param $text string
+ * @param string $text
* @return string
*/
function segmentForDiff( $text ) {
@@ -146,7 +155,7 @@ class LanguageZh extends LanguageZh_hans {
}
/**
- * @param $text string
+ * @param string $text
* @return string
*/
function unsegmentForDiff( $text ) {
@@ -156,9 +165,9 @@ class LanguageZh extends LanguageZh_hans {
/**
* auto convert to zh-hans and normalize special characters.
*
- * @param $string String
- * @param $autoVariant String, default to 'zh-hans'
- * @return String
+ * @param string $string
+ * @param string $autoVariant Defaults to 'zh-hans'
+ * @return string
*/
function normalizeForSearch( $string, $autoVariant = 'zh-hans' ) {
wfProfileIn( __METHOD__ );
@@ -176,7 +185,7 @@ class LanguageZh extends LanguageZh_hans {
}
/**
- * @param $termsArray array
+ * @param array $termsArray
* @return array
*/
function convertForSearchResult( $termsArray ) {
@@ -187,4 +196,3 @@ class LanguageZh extends LanguageZh_hans {
return $ret;
}
}
-
diff --git a/languages/classes/LanguageZh_hans.php b/languages/classes/LanguageZh_hans.php
index 3851c8fe..6483d90b 100644
--- a/languages/classes/LanguageZh_hans.php
+++ b/languages/classes/LanguageZh_hans.php
@@ -26,8 +26,9 @@
*
* @ingroup Language
*/
+// @codingStandardsIgnoreStart Ignore class name is not in camel caps format error
class LanguageZh_hans extends Language {
-
+ // @codingStandardsIgnoreEnd
/**
* @return bool
*/
@@ -40,7 +41,7 @@ class LanguageZh_hans extends Language {
* for now just treat each character as a word.
* @todo FIXME: Only do this for Han characters...
*
- * @param $string string
+ * @param string $string
*
* @return string
*/
@@ -51,7 +52,7 @@ class LanguageZh_hans extends Language {
}
/**
- * @param $s
+ * @param string $s
* @return string
*/
function normalizeForSearch( $s ) {
@@ -71,7 +72,7 @@ class LanguageZh_hans extends Language {
*
* @since 1.21
*
- * @param integer $seconds The amount of seconds.
+ * @param int $seconds The amount of seconds.
* @param array $chosenIntervals The intervals to enable.
*
* @return string
diff --git a/languages/i18n/ab.json b/languages/i18n/ab.json
new file mode 100644
index 00000000..aae2255e
--- /dev/null
+++ b/languages/i18n/ab.json
@@ -0,0 +1,158 @@
+{
+ "@metadata": {
+ "authors": [
+ "Comp1089",
+ "Mzhiba",
+ "Temuri rajavi",
+ "ОйЛ"
+ ]
+ },
+ "sunday": "амҽыш",
+ "monday": "ашәахь",
+ "tuesday": "аҩаш",
+ "wednesday": "ахаш",
+ "thursday": "аҧшьаш",
+ "friday": "ахәуаш",
+ "saturday": "асабш",
+ "january": "ажьырныҳәа",
+ "february": "жәабран",
+ "march": "хәажәкыр",
+ "april": "мшаҧы",
+ "may_long": "лаҵара",
+ "june": "рашәара",
+ "july": "ҧхынгәы",
+ "august": "нанҳәа",
+ "september": "цәыббра",
+ "october": "жьҭаара",
+ "november": "абҵара",
+ "december": "ҧхынҷкәын",
+ "january-gen": "ажьырныҳәа",
+ "february-gen": "жәабран",
+ "march-gen": "хәажәкыра",
+ "april-gen": "мшаҧы",
+ "may-gen": "лаҵара",
+ "june-gen": "рашәара",
+ "july-gen": "ҧхынгәы",
+ "august-gen": "нанҳәа",
+ "september-gen": "цәыббра",
+ "october-gen": "жьҭаара",
+ "november-gen": "абҵара",
+ "december-gen": "ҧхынҷкәын",
+ "jan": "ажь",
+ "feb": "жәа",
+ "mar": "хәа",
+ "apr": "мша",
+ "may": "лаҵ",
+ "jun": "раш",
+ "jul": "ҧхг",
+ "aug": "нан",
+ "sep": "цәы",
+ "oct": "жьҭ",
+ "nov": "абҵ",
+ "dec": "ҧхҷ",
+ "pagecategories": "{{PLURAL:$1|1=Акатегориа|Акатегориақәа}}",
+ "article": "Адаҟьа",
+ "mytalk": "Сахцәажәара",
+ "navigation": "Анавигациа",
+ "qbfind": "Аҧшаара",
+ "qbedit": "Ариашара",
+ "qbpageoptions": "Ари адаҟьа",
+ "vector-action-move": "Ахьӡ аҧсахра",
+ "vector-view-create": "Арҿиара",
+ "vector-view-edit": "Ариашамҭа",
+ "vector-view-history": "Аҭоурых",
+ "vector-view-view": "Аҧхьара",
+ "vector-view-viewsource": "Ахәаҧшра",
+ "help": "Ацхыраара",
+ "search": "Аҧшаара",
+ "searchbutton": "Аҧшаара",
+ "searcharticle": "Адаҟьа",
+ "history": "Аҭоурых",
+ "history_short": "Аҭоурых",
+ "printableversion": "Акьыҧхьразы аверсиа",
+ "permalink": "Еисымшатәи ахьарҧш",
+ "edit": "Ариашамҭа",
+ "create": "Арҿиара",
+ "create-this-page": "Ариашара ари адаҟьа",
+ "newpage": "Адаҟьа Ҿыц",
+ "talkpagelinktext": "Ахцәажәара",
+ "specialpage": "Цастәи адаҟьа",
+ "talk": "Ахцәажәара",
+ "toolbox": "Амаҵыругақәа",
+ "otherlanguages": "Абызшәақәа",
+ "lastmodifiedat": "Ацыхәтәантәи аҧсахрақәа абри адаҟьа аҟны: $2, $1.",
+ "jumptonavigation": "Анавигациа",
+ "jumptosearch": "Аҧшаара",
+ "aboutsite": "{{SITENAME}} иазкны",
+ "currentevents": "Ииасуа ахҭысқәа",
+ "mainpage": "Ихадоу Адаҟьа",
+ "mainpage-description": "Ихадоу адаҟьа",
+ "privacy": "Аконфиденциалтә аполитика",
+ "privacypage": "Project: Аконфиденциалтә аполитика",
+ "youhavenewmessages": "Уара $1 уауит ($2).",
+ "editsection": "ариашамҭа",
+ "editold": "ариашара",
+ "editlink": "ариашара",
+ "nstab-main": "Адаҟьа",
+ "nstab-user": "Алахәыла",
+ "nstab-special": "Цастәи адаҟьа",
+ "nstab-image": "Афаил",
+ "nstab-template": "Ашаблон",
+ "nstab-help": "Ацхыраара",
+ "nstab-category": "Акатегориа",
+ "viewsource": "Ахәаҧшра",
+ "login": "Урдырра",
+ "nav-login-createaccount": "Урдырра / Арегистрациара",
+ "userlogin": "Урдырра/Арегистрациара",
+ "logout": "Асеанс дәылҵра",
+ "userlogout": "Асеанс дәылҵра",
+ "loginlanguagelabel": "Абызшәа: $1",
+ "summary": "Описание изменений:",
+ "savearticle": "Адаҟьа ахьчара",
+ "editing": "Ариашамҭа: $1",
+ "searchresults-title": "Аҧшаара «$1»",
+ "preferences": "Архиарақәа",
+ "mypreferences": "Архиарақәа",
+ "searchresultshead": "Аҧшаара",
+ "uid": "Алахәыла ID:",
+ "yourlanguage": "Абызшәа:",
+ "prefs-signature": "Анапынҵамҭа",
+ "group-user": "Алахәылацәа",
+ "group-user-member": "{{GENDER:$1|алахәыла}}",
+ "grouppage-sysop": "{{ns:project}}:Администраторцәа",
+ "recentchanges": "Арҽеира ҿыцқәа",
+ "recentchanges-legend-newpage": "$1 — адаҟьа ҿыц",
+ "newpageletter": "Ҿ",
+ "recentchangeslinked": "Еимадоу ариашарақәа",
+ "recentchangeslinked-feed": "Еимадоу ариашарақәа",
+ "recentchangeslinked-toolbox": "Еимадоу ариашарақәа",
+ "upload": "Афаил аҭагалара",
+ "filehist-user": "Алахәыла",
+ "randompage": "Машәырлатәи аҩымҭа",
+ "brokenredirects-edit": "ариашамҭа",
+ "newpages-username": "Алахәыла:",
+ "move": "Ахьӡ аҧсахра",
+ "movethispage": "Ахьӡ аҧсахра ари адаҟьа",
+ "specialloguserlabel": "Алахәыла:",
+ "alphaindexline": "$1 ... $2",
+ "linksearch-ok": "Аҧшаара",
+ "watchlist": "Ашклаҧшра асна",
+ "mywatchlist": "Ашклаҧшра асна",
+ "restriction-edit": "Ариашамҭа",
+ "mycontris": "Салагала",
+ "contribsub2": "Алагала $1 ($2)",
+ "sp-contributions-talk": "ахцәажәара",
+ "sp-contributions-submit": "Аҧшаара",
+ "whatlinkshere": "Арахьтәи ахьарҧшқәа",
+ "whatlinkshere-page": "Адаҟьа:",
+ "contribslink": "алагала",
+ "movearticle": "Ахьӡ аҧсахра:",
+ "allmessages-language": "Абызшәа:",
+ "ilsubmit": "Аҧшаара",
+ "watchlistall2": "зегьы",
+ "namespacesall": "зегьы",
+ "monthsall": "зегьы",
+ "fileduplicatesearch-submit": "Аҧшаара",
+ "specialpages": "Цастәи адаҟьақәа",
+ "specialpages-group-login": "Урдырра / Арегистрациара"
+}
diff --git a/languages/i18n/ace.json b/languages/i18n/ace.json
new file mode 100644
index 00000000..f9e54ae2
--- /dev/null
+++ b/languages/i18n/ace.json
@@ -0,0 +1,1212 @@
+{
+ "@metadata": {
+ "authors": [
+ "Abi Azkia",
+ "Andri.h",
+ "Ayie7791",
+ "Ezagren",
+ "Fadli Idris",
+ "Meno25",
+ "Rachmat.Wahidi",
+ "Sayed Muddasir",
+ "Si Gam Acèh",
+ "아라"
+ ]
+ },
+ "tog-underline": "Bôh garéh yup peunawôt:",
+ "tog-hideminor": "Peusom neuandam bacut bak neuubah barô",
+ "tog-hidepatrolled": "Peusom neuandam teurunda bak neuubah barô",
+ "tog-newpageshidepatrolled": "Peusom laman teurunda nibak dapeuta ôn barô",
+ "tog-extendwatchlist": "Peuhah dapeuta keunalön keu peuleumah ban dum neuubah, kön nyang barô mantöng",
+ "tog-usenewrc": "Peusaho neuandam bak neuleumah neuubah barô ngön dapeuta keunalön meunurôt ôn",
+ "tog-numberheadings": "Bôh numbôi nan keudroë",
+ "tog-showtoolbar": "Peuleumah bateuëng alat andam",
+ "tog-editondblclick": "Andam laman ngön duwa gö teugön",
+ "tog-editsectiononrightclick": "Peujeuët andam bideueng ngön teugön blah uneun bak nan bideueng",
+ "tog-watchcreations": "Tamah laman nyang lôn peugöt u dapeuta keunalön",
+ "tog-watchdefault": "Tamah laman nyang lôn-andam u dapeuta keunalon",
+ "tog-watchmoves": "Tamah laman nyang lôn peupinah u dapeuta keunalon",
+ "tog-watchdeletion": "Tamah laman nyang lôn sampôh u dapeuta keunalon",
+ "tog-minordefault": "Bôh tanda mandum neuandam sibagoe neuandam bacut ngön baku",
+ "tog-previewontop": "Peuleumah hasé yôh goh plôk andam",
+ "tog-previewonfirst": "Peuleumah hasé bak neuandam phôn",
+ "tog-enotifwatchlistpages": "Peu'ék surat-e keu lôn meunyo saboh halaman nyang lôn kalon meuubah",
+ "tog-enotifusertalkpages": "Peu'ek keu lôn surat-e meunyo ôn marit lôn meuubah",
+ "tog-enotifminoredits": "Peu'ék cit surat-e keu lôn bak neuubah ubit",
+ "tog-enotifrevealaddr": "Peuleumah alamat surat-e lôn bak neubrithèë surat-e",
+ "tog-shownumberswatching": "Peuleumah jumeulah ureueng kalon",
+ "tog-oldsig": "Tanda jaroe jinoe:",
+ "tog-fancysig": "Peujeuet tanda jaroe sibagoe naseukah wiki (hana hubông keudroe)",
+ "tog-uselivepreview": "Ngui peuleumah hasé langsông (baci)",
+ "tog-forceeditsummary": "Peuingat lôn meunyo plôk neuringkaih neuandam mantöng soh",
+ "tog-watchlisthideown": "Peusöm nyang lôn andam nibak dapeuta keunalön",
+ "tog-watchlisthidebots": "Peusöm nyang teuandam nibak dapeuta keunalön",
+ "tog-watchlisthideminor": "Peusom Andam Bacut bak dapeuta keunalön",
+ "tog-watchlisthideliu": "Peusom andam ureuëng ngui nyang tamöng nibak dapeuta keunalön",
+ "tog-watchlisthideanons": "Peusöm andam ureuëng ngui hana taturi nibak dapeuta keunalön",
+ "tog-watchlisthidepatrolled": "Peusom neuandam teukawai bak dapeuta keunalön",
+ "tog-ccmeonemails": "Peu'ék keu lôn seunalén surat-e nyang lôn peu'ék keu ureueng la'én",
+ "tog-diffonly": "Bek peuleumah asoë laman di yup beunida neuandam",
+ "tog-showhiddencats": "Peuleumah kawan teusom",
+ "tog-norollbackdiff": "Bek peudeuh beunida 'oh lheueh geupeuriwang",
+ "tog-useeditwarning": "Neupeuingat lôn meunyö meukubah ôn andam ngön hana teukeubah",
+ "tog-prefershttps": "Sabé neungui seunambông teulindông meunyö neutamöng log",
+ "underline-always": "Sabé",
+ "underline-never": "H'an tom",
+ "underline-default": "Kulét atawa ngön peuhah wèb teupasang",
+ "editfont-style": "Gaya seunurat komputer bak plôk andam",
+ "editfont-default": "Bawaan penjelajah web",
+ "editfont-monospace": "Haraih Monospace",
+ "editfont-sansserif": "Haraih Sans-serif",
+ "editfont-serif": "Haraih Serif",
+ "sunday": "Aleuhad",
+ "monday": "Seulanyan",
+ "tuesday": "Seulasa",
+ "wednesday": "Rabu",
+ "thursday": "Hamèh",
+ "friday": "Jeumeu'at",
+ "saturday": "Sabtu",
+ "sun": "Aleu",
+ "mon": "Seun",
+ "tue": "Seul",
+ "wed": "Rab",
+ "thu": "Ham",
+ "fri": "Jum",
+ "sat": "Sab",
+ "january": "Buleuën Sa",
+ "february": "Buleuën Duwa",
+ "march": "Buleuën Lhèë",
+ "april": "Buleuën Peuët",
+ "may_long": "Buleuën Limöng",
+ "june": "Buleuën Nam",
+ "july": "Buleuën Tujôh",
+ "august": "Buleuën Lapan",
+ "september": "Buleuën Sikureuëng",
+ "october": "Buleuën Siplôh",
+ "november": "Buleuën Siblaih",
+ "december": "Buleuën Duwa Blaih",
+ "january-gen": "Buleuën Sa",
+ "february-gen": "Buleuën Duwa",
+ "march-gen": "Buleuën Lhèë",
+ "april-gen": "Buleuën Peuët",
+ "may-gen": "Buleuën Limöng",
+ "june-gen": "Buleuën Nam",
+ "july-gen": "Buleuën Tujôh",
+ "august-gen": "Buleuën Lapan",
+ "september-gen": "Buleuën Sikureuëng",
+ "october-gen": "Buleuën Siplôh",
+ "november-gen": "Buleuën Siblaih",
+ "december-gen": "Buleuën Duwa Blaih",
+ "jan": "Sa",
+ "feb": "Duwa",
+ "mar": "Lhèë",
+ "apr": "Peuët",
+ "may": "Limöng",
+ "jun": "Nam",
+ "jul": "Tujôh",
+ "aug": "Lapan",
+ "sep": "Sikureuëng",
+ "oct": "Siplôh",
+ "nov": "Siblaih",
+ "dec": "Duwa Blaih",
+ "january-date": "$1 Buleuën Sa",
+ "february-date": "$1 Buleuën Duwa",
+ "march-date": "$1 Buleuën Lhèë",
+ "april-date": "$1 Buleuën Peuët",
+ "may-date": "$1 Buleuën Limong",
+ "june-date": "$1 Buleuën Nam",
+ "july-date": "$1 Buleuën Tujôh",
+ "august-date": "$1 Buleuën Lapan",
+ "september-date": "$1 Buleuën Sikureuëng",
+ "october-date": "$1 Buleuën Siplôh",
+ "november-date": "$1 Buleuën Siblaih",
+ "december-date": "$1 Buleuën Duwa Blaih",
+ "pagecategories": "{{PLURAL:$1|Kawan}}",
+ "category_header": "Teunuléh lam kawan \"$1\"",
+ "subcategories": "Aneuk kawan",
+ "category-media-header": "Peukakaih lam kawan \"$1\"",
+ "category-empty": "''Kawan nyoë jinoë hat hana halaman atawa media.''",
+ "hidden-categories": "{{PLURAL:$1|Kawan teusom|Kawan teusom}}",
+ "hidden-category-category": "Kawan teusom",
+ "category-subcat-count": "{{PLURAL:$2|Kawan nyoë cit na saboh yupkawan nyoë.|Kawan nyoë na {{PLURAL:$1|yupkawan|$1 yupkawan}} nyoë, dari ban dum $2.}}",
+ "category-subcat-count-limited": "Kawan nyoë na {{PLURAL:$1|aneuk kawan|$1 aneuk kawan}} lagèë di yup.",
+ "category-article-count": "{{PLURAL:$2|Kawan nyoë cit na saboh ôn nyoë.|Kawan nyoë na {{PLURAL:$1|ôn|$1 ôn }}, dari ban dum $2.}}",
+ "category-article-count-limited": "Kawan nyoë na {{PLURAL:$1|saboh halaman|$1 halaman}} lagèë di yup.",
+ "category-file-count": "{{PLURAL:$2|Kawan nyoë cit na beureukaih nyoë sagay.|{{PLURAL:$1|beureukaih|$1 beureukaih}} nyoë na lam kawan nyoë, nibak ban dum $2.}}",
+ "category-file-count-limited": "Kawan nyoe na {{PLURAL:$1|beureukaih|$1 beureukaih}} lagèë di yup.",
+ "listingcontinuesabbrev": "samb.",
+ "index-category": "Laman nyang geuindex",
+ "noindex-category": "Laman nyang hana geuindex",
+ "broken-file-category": "Laman ngön gamba reulöh",
+ "about": "Bhaih",
+ "article": "Teunuléh",
+ "newwindow": "(peuhah bak tingkap barô)",
+ "cancel": "Peubateuë",
+ "moredotdotdot": "Lom...",
+ "morenotlisted": "Dapeuta nyoe hana leungkap",
+ "mypage": "Laman",
+ "mytalk": "Marit",
+ "anontalk": "Peugah haba IP nyoë.",
+ "navigation": "Keumudoë",
+ "and": "&#32;ngön",
+ "qbfind": "Mita",
+ "qbbrowse": "Lop",
+ "qbedit": "Andam",
+ "qbpageoptions": "Laman nyoe",
+ "qbmyoptions": "Laman lôn",
+ "faq": "Teunanyöng Umom",
+ "faqpage": "Project:FAQ",
+ "actions": "Buët",
+ "namespaces": "Ruweuëng nan",
+ "variants": "Ragam",
+ "navigation-heading": "Menu navigasi",
+ "errorpagetitle": "Seunalah",
+ "returnto": "Gisa u $1.",
+ "tagline": "Nibak {{SITENAME}}",
+ "help": "Beunantu",
+ "search": "Mita",
+ "searchbutton": "Mita",
+ "go": "Jak u",
+ "searcharticle": "Jak u",
+ "history": "Riwayat laman",
+ "history_short": "Riwayat",
+ "updatedmarker": "geuubah yôh seunaweue keuneulheueh lôn phôn kön",
+ "printableversion": "Seunalén rakam",
+ "permalink": "Peunawôt teutap",
+ "print": "Rakam",
+ "view": "Beuët",
+ "view-foreign": "Eu bak $1",
+ "edit": "Andam",
+ "edit-local": "Andam deskripsi lokal",
+ "create": "Peugöt",
+ "create-local": "Tamah deskripsi lokal",
+ "editthispage": "Andam laman nyoë",
+ "create-this-page": "Peugöt laman nyoë",
+ "delete": "Sampôh",
+ "deletethispage": "Sampôh laman nyoë",
+ "undeletethispage": "Bèk neusampôh laman nyoë",
+ "undelete_short": "Bateuë sampôh {{PLURAL:$1|one edit|$1 edits}}",
+ "viewdeleted_short": "Eu {{PLURAL:$1|saboh neuandam|$1 neuandam}} nyang geusampôh",
+ "protect": "Peulindông",
+ "protect_change": "ubah",
+ "protectthispage": "Peulindông laman nyoë",
+ "unprotect": "Gantoë neulindông",
+ "unprotectthispage": "Gantoë neulindông laman nyoë",
+ "newpage": "Laman barô",
+ "talkpage": "Peugah haba bhah laman nyoë",
+ "talkpagelinktext": "Marit",
+ "specialpage": "Laman kusuih",
+ "personaltools": "Peukakaih droë",
+ "articlepage": "Eu asoë laman",
+ "talk": "Marit",
+ "views": "Seuneudeuih",
+ "toolbox": "Alat",
+ "userpage": "Eu laman ureuëng ngui",
+ "projectpage": "Eu laman buët",
+ "imagepage": "Eu laman beureukaih",
+ "mediawikipage": "Eu laman peusan sistem",
+ "templatepage": "Eu laman seunaleuëk",
+ "viewhelppage": "Eu laman beunantu",
+ "categorypage": "Eu laman kawan",
+ "viewtalkpage": "Eu laman marit",
+ "otherlanguages": "Bahsa la’én",
+ "redirectedfrom": "(Geupeupinah nibak $1)",
+ "redirectpagesub": "Laman peuninah",
+ "lastmodifiedat": "Laman nyoë seuneulheuëh geuubah bak $1 poh $2.",
+ "viewcount": "Laman nyoë ka geusaweuë {{PLURAL:$1|sigo|$sigo}}.<br />",
+ "protectedpage": "Laman teupeulindông",
+ "jumpto": "Grôp u:",
+ "jumptonavigation": "keumudoë",
+ "jumptosearch": "mita",
+ "view-pool-error": "Meu'ah, server teungöh sibôk jinoe\nLe that ureueng nyang meuh'eut jak eu laman nyoe\nNeuprèh si'at yôh goh neubaci lom\n\n$1",
+ "generic-pool-error": "Meu'ah, server teungöh peunoh jinoë.\nRamè that ureuëng ngui nyang eu laman nyoë.\nNeuprèh sijamong sigoh neuci lom.",
+ "pool-timeout": "Liwat watèë prèh gunci",
+ "pool-queuefull": "Seunapat neuprèh peunoh",
+ "pool-errorunknown": "Salah hana meukön",
+ "aboutsite": "Bhaih {{SITENAME}}",
+ "aboutpage": "Project:Bhaih",
+ "copyright": "Asoë na meunurôt $1 keucuali meunyö na hay la'én nyang geupeugah",
+ "copyrightpage": "{{ns:project}}:Hak karang",
+ "currentevents": "Haba barô",
+ "currentevents-url": "Project:Haba barô",
+ "disclaimers": "Beunantah",
+ "disclaimerpage": "Project:Beunantah umom",
+ "edithelp": "Bantu andam",
+ "mainpage": "Ôn Keuë",
+ "mainpage-description": "Ôn Keuë",
+ "policy-url": "Project:Neuatô",
+ "portal": "Meusapat",
+ "portal-url": "Project:Meusapat",
+ "privacy": "Jaga rahsia",
+ "privacypage": "Project:Jaga rahsia",
+ "badaccess": "Salah khut/hak tamöng",
+ "badaccess-group0": "Droeneuh hana geupeuidin keu neupeulaku buët nyang neulakèë",
+ "badaccess-groups": "Buët nyang neulakèë geupeubatah keu ureuëng ngui lam {{PLURAL:$2|kawan|salah saboh nibak kawan}}: $1.",
+ "versionrequired": "Peureulèë MediaWiki vèrsi $1",
+ "versionrequiredtext": "MediaWiki versi $1 geupeureulèë keu neungui laman nyoë. Neu'eu [[Special:Version|on versi]]",
+ "ok": "Ka göt",
+ "retrievedfrom": "Geurumpok nibak \"$1\"",
+ "youhavenewmessages": "Droëneuh na $1 ($2).",
+ "youhavenewmessagesfromusers": "Droeneuh na $1 nibak {{PLURAL:$3|ureueng nguy la'en|$3 ureueng nguy}} ($2).",
+ "youhavenewmessagesmanyusers": "Droeneuh na $1 nibak ureueng nguy la'en ($2)",
+ "newmessageslinkplural": "{{PLURAL:$1|saboh peusan barô|999=peusan barô}}",
+ "newmessagesdifflinkplural": "{{PLURAL:$1|neuubah|999=neuubah}} seuneulheuëh",
+ "youhavenewmessagesmulti": "Droëneuh na padum boh peusan barô bak $1",
+ "editsection": "andam",
+ "editold": "andam",
+ "viewsourceold": "Eu nè",
+ "editlink": "andam",
+ "viewsourcelink": "eu nè",
+ "editsectionhint": "Andam bideuëng: $1",
+ "toc": "Asoë",
+ "showtoc": "peuleumah",
+ "hidetoc": "peusom",
+ "collapsible-collapse": "Peuubeut",
+ "collapsible-expand": "Peuluwaih",
+ "thisisdeleted": "Eu atawa peuriwang $1?",
+ "viewdeleted": "Eu $1?",
+ "restorelink": "$1 {{PLURAL:$1|neuandam|neuandam}} nyang ka geusampoh",
+ "feedlinks": "Umpeuën:",
+ "feed-invalid": "Jeunèh neulakèë umpeuën hana paih",
+ "feed-unavailable": "Umpeuën sindikasi hana",
+ "site-rss-feed": "Umpeuën RSS $1",
+ "site-atom-feed": "Umpeuën Atôm $1",
+ "page-rss-feed": "Umpeuën RSS \"$1\"",
+ "page-atom-feed": "Umpeuën Atom \"$1\"",
+ "red-link-title": "$1 (laman hana)",
+ "sort-descending": "Peuurôt tren",
+ "sort-ascending": "Peuurôt ék",
+ "nstab-main": "Laman",
+ "nstab-user": "Ureuëng ngui",
+ "nstab-media": "Laman media",
+ "nstab-special": "Laman kusuih",
+ "nstab-project": "Laman buët",
+ "nstab-image": "Beureukaih",
+ "nstab-mediawiki": "Peusan",
+ "nstab-template": "Seunaleuëk",
+ "nstab-help": "Beunantu",
+ "nstab-category": "Kawan",
+ "nosuchaction": "Hana buët nyan",
+ "nosuchactiontext": "Buët nyang geulakèë lé URL nyan hana sah. Droeneuh kadang salah neukeutik URL, atawa neuseutöt saboh neuhubông nyang hana beutôi. Hai nyoë kadang jeuët keu lageuëm saboh bug bak alat leumiëk nyang geungui lé {{SITENAME}}.",
+ "nosuchspecialpage": "Hana laman kusuih lagèë nyan",
+ "nospecialpagetext": "<strong>Droeneuh ka neulakèë laman kusuih nyang hana sah.</strong>\nDapeuta laman kusuih nyang sah jeuet neu'eu bak [[Special:SpecialPages|{{int:specialpages}}]].",
+ "error": "Seunalah",
+ "databaseerror": "Kesalahan basis data",
+ "databaseerror-text": "Saboh salah bak nè data ka teujadi. Nyoë meuhat na nyang han paih bak peukakaih droëneuh",
+ "databaseerror-textcl": "Teunanyöng basis data teungöh kacho",
+ "databaseerror-query": "Teunanyöng: $1",
+ "databaseerror-function": "Guna: $1",
+ "databaseerror-error": "Salah: $1",
+ "laggedslavemode": "Peuneugah: Laman nyoë kadang hana neuubah barô",
+ "readonly": "Basis data geurôk",
+ "enterlockreason": "Pasoë dalèh neurôk ngön pajan jeuët geupeuhah",
+ "readonlytext": "Basis data hat nyoë geurôk keu teunamöng barô ngön geunantoë la'én, kadang keu peulara basis data rutin, lheuëh nyan barô lagèë biasa teuma.\n\nUreueng urôh nyang rôk nyoe geupeutaba jeuneulaih nyoe: $1",
+ "missing-article": "Basis data hana jiteumèë naseukah nibak laman nyang sipatôtjih na, nyakni \"$1\" $2.\n\nHai nyoë kayém jipeusabab lé peunawôt useuëng u laman nyang ka geusampôh.\n\nMeunyö kön nyoë sababjih, droëneuh kadang ka neuteumeung saboh ''bug'' lam peukakaih leumiëk.\nNeutulông bri thèë hai nyoë keu salah sidroë [[Special:ListUsers/sysop|ureuëng urôih]], ngön neupeugah alamat URL-jih.",
+ "missingarticle-rev": "(revisi#: $1)",
+ "missingarticle-diff": "(Bida: $1, $2)",
+ "readonly_lag": "Basis data ka geurôk otomatis silawét basis data sekunder teungöh geupeusinkron ngön basis data utama",
+ "internalerror": "Salah bak dalam",
+ "internalerror_info": "Salah bak dalam: $1",
+ "filecopyerror": "H'an jeuet salén beureukaih \"$1\" u \"$2\".",
+ "filerenameerror": "H'an jeuët bôh nan beureukaih \"$1\" u \"$2\".",
+ "filedeleteerror": "H'an jeuët sampôh beureukaih \"$1\".",
+ "directorycreateerror": "H'an jeuet peugöt direktori \"$1\".",
+ "filenotfound": "Beureukaih \"$1\" hana meurumpök.",
+ "unexpected": "Yum hana geuharap: \"$1\"=\"$2\".",
+ "formerror": "Reulöh: H'an jeuet peu'ék formulir.",
+ "badarticleerror": "Buet nyoe h'an jeuët geupeulaku bak laman nyoe.",
+ "cannotdelete": "Laman atawa beureukaih \"$1\" h'an jeuët geusampôh.\nKadang ka na soe sampôh.",
+ "cannotdelete-title": "H'an jeuet sampôh laman \"$1\"",
+ "delete-hook-aborted": "Seunampôh geupeubateuë lé kaw'ét parser.\nHana jeuneulaih.",
+ "no-null-revision": "H'an jeuet peugöt revisi null barô keu halaman \"$1\"",
+ "badtitle": "Nan hana beutôi",
+ "badtitletext": "Nan laman nyang neulakèë hana sah, soh, atawa nan antarabahsa atawa antarawiki nyang salah sambông.",
+ "perfcached": "Data di yup nyoe geupeusom ngön kadang kön data barô. {{PLURAL:$1|saboh hase|$1 hase}} maksimum na lam beujana.",
+ "perfcachedts": "Data di yup nyoe geupeusom, ngön geupeubarô seuneulheueh bak $1. {{PLURAL:$4|saboh hase|$4 hase}} paléng le na lam beujana.",
+ "querypage-no-updates": "Beunarô keu laman nyoe hat nyoe teungöh h'an jeuët.\nData sinoe h'an geupasoe ulang.",
+ "viewsource": "Eu nè",
+ "viewsource-title": "Eu ne keu $1",
+ "actionthrottled": "Buet geupeubataih",
+ "actionthrottledtext": "Sibagoe saboh seunipat lawan-spam, droeneuh geupeubataih nibak neupeulaku buet nyoe le that gö lam watèë paneuk, ngön droeneuh ka leubèh nibak bataih.\nNeuci lom lam padum minèt.",
+ "protectedpagetext": "Laman nyoe ka geupeulindông mangat bèk jeuet geuandam",
+ "viewsourcetext": "Droëneuh jeuët neu’eu",
+ "viewyourtext": "Droëneuh meuidzin kalön ngön neucok nè andam droëneuh u laman nyoë",
+ "protectedinterface": "Halaman nyoe na tèks muka keu muka keu peukakaih leumiëk ngön geupeulindông mangat bek jeuet jipeureuloh.\nKeu neuk tamah atawa ubah teujeumah keu ban dum wiki, neungui [//translatewiki.net/ translatewiki.net], proyek lokalisasi MediaWiki.",
+ "mycustomcssprotected": "Droëneuh hana hak neuandam halaman CSS nyoe.",
+ "mycustomjsprotected": "Droëneuh hana idin neuandam halaman JavaScript nyoe.",
+ "mypreferencesprotected": "Droeneuh hana izin keu neuandam geunalak droeneuh.",
+ "ns-specialprotected": "Laman khusuih bèk neuandam",
+ "titleprotected": "Nan nyoe ka geupeulindông nibak neuandam lé [[User:$1|$1]].\nDalèhjih nakeuh \"''$2''\".",
+ "invalidtitle-knownnamespace": "Nan nyang hana sah ngön ruweueng nan \"$2\" ngön \"$3\"",
+ "exception-nologin": "Hana tamöng lom",
+ "exception-nologin-text": "Droëneuh suwah [[Special:Userlogin|neutamöng]] mangat jeuët neupeuhah laman nyoë",
+ "virus-unknownscanner": "Antivirus hana meuturi:",
+ "logouttext": "'''Droeneuh ka neutubiet log.'''\n\nBeuneuteupue meunyoe na padum-padum laman nyang deuh lagèe na neutamöng log, sampoe ka lheuh neupeugléh ''cache''.",
+ "welcomeuser": "Seulamat trôk teuka, $1 !",
+ "welcomecreation-msg": "Nan droëneuh ka geupeugöt. \nBèk tuwo neuatô [[Special:Preferences|geunalak {{SITENAME}}]] droëneuh.",
+ "yourname": "Ureuëng ngui:",
+ "userlogin-yourname": "Ureuëng ngui",
+ "userlogin-yourname-ph": "Peutamöng nan ureuëng ngui droëneuh",
+ "createacct-another-username-ph": "Pasoë nan ureuëng ngui droëneuh",
+ "yourpassword": "Lageuëm:",
+ "userlogin-yourpassword": "Lageuëm rahsia",
+ "userlogin-yourpassword-ph": "Pasoë lageuëm rahsia droëneuh",
+ "createacct-yourpassword-ph": "Pasoë lageuëm rahsia",
+ "yourpasswordagain": "Pasoë lom lageuëm rahsia:",
+ "createacct-yourpasswordagain": "Peunyo lageuëm rahsia",
+ "createacct-yourpasswordagain-ph": "Pasoë lom lageuëm rahsia",
+ "remembermypassword": "Ingat lôn tamöng bak peuramban nyoë (keu paléng trép $1 {{PLURAL:$1|uroë|days}})",
+ "userlogin-remembermypassword": "Peubiyeuë lôn tamöng",
+ "userlogin-signwithsecure": "Ngui server aman",
+ "yourdomainname": "Domain droeneuh:",
+ "password-change-forbidden": "Droëneuh h‘an jeuët neuubah lageuëm rahsia bak wiki nyoë.",
+ "externaldberror": "Na seunalah bak peusahèh basis data luwa atawa droëneuh hana geubri idin keu neupeubarô akun luwa droëneuh",
+ "login": "Tamöng",
+ "nav-login-createaccount": "Tamöng / dapeuta",
+ "userlogin": "Tamöng / dapeuta",
+ "userloginnocreate": "Tamöng",
+ "logout": "Teubiët",
+ "userlogout": "Teubiët",
+ "notloggedin": "Hana tamöng lom",
+ "userlogin-noaccount": "Goh lom neudapeuta?",
+ "userlogin-joinproject": "Neugabông ngön {{SITENAME}}",
+ "nologin": "Goh lom neudapeuta? $1.",
+ "nologinlink": "Peudapeuta nan barô",
+ "createaccount": "Peudapeuta nan barô",
+ "gotaccount": "Ka lheuëh neudapeuta? $1.",
+ "gotaccountlink": "Tamöng",
+ "userlogin-resetlink": "Tuwo rincian tamöng droëneuh?",
+ "userlogin-resetpassword-link": "Tuwö lageuëm rahsia?",
+ "userlogin-helplink2": "Beunantu tamöng log",
+ "userlogin-loggedin": "Droëneuh ka neutamöng seubagoë $1. Neungui blangko di yup keu neutamöng seubagoë ureuëng ngui la’én",
+ "userlogin-createanother": "Peudapeuta nan barô",
+ "createacct-emailrequired": "Alamat surat-e",
+ "createacct-emailoptional": "Alamat surat-e (hana wajéb)",
+ "createacct-email-ph": "Neupasoë alamat surat-e droëneuh",
+ "createacct-another-email-ph": "Pasoë alamat surat-e",
+ "createaccountmail": "Neungui lageuëm rahsia beurangkapeuë keu si’at nyoë. Lheuëh nyan neupeu’et u surat-e nyang droëneuh meuh’eut",
+ "createacct-realname": "Nan aseuli (hana wajéb)",
+ "createaccountreason": "Choë:",
+ "createacct-reason": "Choë:",
+ "createacct-reason-ph": "Pakön droëneuh neupeugöt nan ureuëng ngui la’én",
+ "createacct-captcha": "Paréksa aman",
+ "createacct-imgcaptcha-ph": "Pasoë seunurat nyang neu'eu di ateuëh",
+ "createacct-submit": "Peudapeuta nan barô",
+ "createacct-another-submit": "Peugöt nan ureuëng ngui la’én",
+ "createacct-benefit-heading": "{{SITENAME}} geupeugöt lé ureuëng lagèë droëneuh.",
+ "createacct-benefit-body1": "{{PLURAL:$1|andam}}",
+ "createacct-benefit-body2": "{{PLURAL:$1|$1 halaman}}",
+ "createacct-benefit-body3": "{{PLURAL:$1|ureuëng tuléh}} seuneulheuëh",
+ "badretype": "Lageuëm rahsia nyang neupasoë salah.",
+ "userexists": "Nan ureuëng ngui nyang neupasoë ka na soë ngui.\nNeupiléh nan nyang la'én.",
+ "loginerror": "Salah bak tamöng",
+ "createacct-error": "Peudapeuta nan barô hana meuhasé",
+ "createaccounterror": "H‘an jeuët peudapeuta nan: $1",
+ "nocookiesnew": "Nan ureueng ngui nyoe ka meupeugöt, tapi goh meutamöng.\n{{SITENAME}} jingui ''cookies'' keu peutamöng ureueng ngui.\n''Cookies'' droeneuh hana meupeuudép.\nNeupeuudép ''cookies'' dilèe, lheuh nyan neutamöng ngön nan ureueng ngui ngön lageuem rahsia droeneuh.",
+ "noname": "Nan ureuëng ngui nyang Droënueh peutamöng hana sah.",
+ "loginsuccesstitle": "Meuhasé tamöng",
+ "loginsuccess": "'''Droëneuh jinoë ka neutamöng di {{SITENAME}} sibagoë \"$1\".'''",
+ "nosuchuser": "Hana ureuëng ngui ngön nan \"$1\".\nNan ureuëng ngui jipeubida haraih rayek.\nTulông neuparéksa keulayi neuija Droëneuh, atawa [[Special:UserLogin/signup|neudapeuta barô]].",
+ "nosuchusershort": "Hana ureuëng ngui ngön nan \"$1\".\nPréksa keulayi neu’ija Droëneuh.",
+ "nouserspecified": "Neupasoë nan Droëneuh.",
+ "login-userblocked": "Ureuëng ngui nyoë ka teublokir, hana idin/hanjeut tamöng.",
+ "wrongpassword": "Lageuëm nyang neupasoë salah. Neuci lom.",
+ "wrongpasswordempty": "Droëneuh hana neupasoë lageuëm. Neuci lom.",
+ "passwordtooshort": "Lageuëm paléng h'an harôh na {{PLURAL:$1|1 karakter|$1 karakter}}.",
+ "password-name-match": "Lageuëm Droeuneuh beubida nibak nan Ureuëng ngui.",
+ "password-login-forbidden": "Ngui nan ureuëng ngui ngön lageuëm nyoë ka jitham.",
+ "mailmypassword": "Atô keulayi lageuëm rahsia",
+ "passwordremindertitle": "Lageuëm seumeuntara barô keu {{SITENAME}}",
+ "passwordremindertext": "Salah sidroë (kadang Droëneuh, ngön alamat IP $1) geulakèë lageuëm barô keu {{SITENAME}} ($4). Lageuëm si'at keu ureuëng ngui \"$2\" ka geupeuna ngön ka geuatô jeuet keu \"$3\". Meunyö nyoe nakeuh meukeusud droeneuh, droeneuh peureulèë neutamöng ngön neupiléh lageuëm barô jinoe. Lageuem siat droeneuh meung abéh lam {{PLURAL:$5|siuroe|$5 uroe}}.\n\nMeunyö ureuëng la'én nyang peugöt neulakèë nyoe, atawa meunyö droeneuh ka neuingat lageuëm droeneuh, ngön droeneuh h'an ék neugantoë lé, droeneuh jeuet hana neupeureumeuën peusan nyoe ngön neulanjut neungui lageuem awaineuh.",
+ "noemail": "Hana alamat surat-e nyang teucatat keu ureuëng ngui \"$1\".",
+ "noemailcreate": "Droeneuh suwah neuseudia alamt surat-e nyang jeut ngui.",
+ "passwordsent": "Lageuëm barô ka geupeu'et u surat-e nyang geupeudapeuta keu \"$1\". Neutamöng teuma lheuëh neuteurimöng surat-e nyan.",
+ "eauthentsent": "Saboh surat-e keu peunyö ka geukirém u alamat surat-e Droëneuh. Droëneuh beuneuseutöt préntah lam surat nyan keu neupeunyö meunyö alamat nyan nakeuh beutôi atra Droëneuh. {{SITENAME}} h‘an geupeuudép surat Droëneuh meunyö langkah nyoë hana neupeubuet lom.",
+ "cannotchangeemail": "Alamat surat-e han jeut geugantoe bak wiki nyoe.",
+ "emaildisabled": "Situs nyoe han jeut geukirém surat-e.",
+ "accountcreated": "Ureuëng ngui ka teupeugöt",
+ "accountcreatedtext": "Ureuëng ngui keu [[{{ns:User}}:$1|$1]]([[{{ns:User talk}}:$1|talk]]) ka teupeugöt.",
+ "createaccount-title": "Peugöt ureuëng ngui keu {{SITENAME}}",
+ "login-throttled": "Droeneuh ka lé that neuujoe tamöng.\nNeuprèh $1 sigohlom neuujoe lom.",
+ "login-abort-generic": "Log tamöng droëneuh han meuhasé- Ngon ka geupeubateuë.",
+ "loginlanguagelabel": "Bahsa: $1",
+ "createacct-another-realname-tip": "Nan aseuli hana meucéh neupasoe.\nMeunyö neupasoe, euntreuk nan droëneuh nyan geupeuleumah mangat jitupeue soe nyang tuléh.",
+ "pt-login": "Tamöng",
+ "pt-login-button": "Tamöng",
+ "pt-createaccount": "Peudapeuta nan barô",
+ "pt-userlogout": "Teubiët",
+ "php-mail-error-unknown": "Ralat hana geuteupeuë lam guna surat() PHP",
+ "user-mail-no-addy": "Ujoe kirém surat-e ngön hana alamat surat-e.",
+ "user-mail-no-body": "Droëneuh ka neucuba kirém e-surat soh ngon that paneuk",
+ "changepassword": "Gantoe lageuem rahsia",
+ "resetpass_announce": "Keu neutamöng log, droëneuh suwah neupeugöt lageuëm rahsia barô",
+ "resetpass_header": "Gantoë lageuëm rahsia nan ureuëng ngui",
+ "oldpassword": "Lageuëm rahsia awai:",
+ "newpassword": "Lageuëm rahsia barô:",
+ "retypenew": "Pasoë lom lageuëm barô:",
+ "resetpass_submit": "Atô lageuëm rahsia lheuëh nyan tamöng",
+ "changepassword-success": "Lageuëm rahsia droëneuh meuhasé geugantoë!",
+ "resetpass_forbidden": "Lageuëm rahsia h'an jeuët geugantoë",
+ "resetpass-no-info": "Droëneuh suwah neutamöng mangat jeuët neu'eu laman nyoë",
+ "resetpass-submit-loggedin": "Gantoë lageuëm rahsia",
+ "resetpass-submit-cancel": "Pubateuë",
+ "resetpass-wrong-oldpass": "Narit rahsia salah.\nDroëneuh kadang ka meuhasé neuubah narit rahsia atawa neulakè narit rahsia barô",
+ "resetpass-temp-password": "Lageuem rahsia keu siat:",
+ "resetpass-abort-generic": "Meuubah narit rahsia ka geupeubateuë lé ekstensi",
+ "resetpass-validity-soft": "Lageuëm rahsia hana sah: $1",
+ "passwordreset": "Atô keulayi lageuëm rahsia",
+ "passwordreset-text-one": "Neupeuleungkap formulir nyoë keu meuatô keulayi narit rahsia",
+ "passwordreset-text-many": "{{PLURAL:$1|Neupasoë saboh kutak dimeuyub nyoë keu neuteumèe narit rahsia siat rot e-surat}}",
+ "passwordreset-legend": "Atô keulayi lageuëm rahsia",
+ "passwordreset-disabled": "Meuatô narit rahsia keulayi ka geupeumaté lam wiki nyoë",
+ "passwordreset-emaildisabled": "Tanda e-surat ka geupeumaté lam wiki nyoë",
+ "passwordreset-username": "Ureueng ngui:",
+ "passwordreset-domain": "Domain",
+ "passwordreset-capture": "Eu hasé surat-e?",
+ "passwordreset-capture-help": "Meunyoë droëneuh neuceuë kutak nyoë, e-surat (ngon narit rahsia siat) ka geupeuleumah keudroëneuh ngon geukirém cit keu ureuëng ngui",
+ "passwordreset-email": "Alamat surat-e:",
+ "passwordreset-emailtitle": "Teuneurang nan ureueng ngui bak {{SITENAME}}",
+ "passwordreset-emailelement": "Nan ureuëng ngui: $1\nLageuëm rahsia sijamong: $2",
+ "changeemail": "Gantoe alamat surat-e",
+ "changeemail-header": "Gantoe alamat surat-e",
+ "changeemail-no-info": "Droeneuh suwah neutamöng mangat jeuet neu'eu laman nyoe",
+ "changeemail-oldemail": "Alamat surat-e jinoe:",
+ "changeemail-newemail": "Alamat surat-e barô:",
+ "changeemail-none": "(hana)",
+ "changeemail-password": "Lageuem rahsia {{SITENAME}} droeneuh:",
+ "changeemail-submit": "Gantoe surat-e",
+ "changeemail-cancel": "Peubateue",
+ "bold_sample": "Rakam teubai",
+ "bold_tip": "Haraih teubai",
+ "italic_sample": "Rakam singèt naseukah nyoë",
+ "italic_tip": "Rakam singèt",
+ "link_sample": "Nan peunawôt",
+ "link_tip": "Peunawôt dalam",
+ "extlink_sample": "http://www.example.com nan peunawôt",
+ "extlink_tip": "Peunawôt luwa (neubôh http:// bak awai)",
+ "headline_sample": "Naseukah nan",
+ "headline_tip": "Aneuk beunagi tingkat 1",
+ "nowiki_sample": "Bèk format naseukah nyoë",
+ "nowiki_tip": "Bèk seutot beuntuk wiki",
+ "image_tip": "Pasoë beureukaih",
+ "media_tip": "Peunawôt beureukaih",
+ "sig_tip": "Tanda jaroë Droëneuh ngön tanda watèë",
+ "hr_tip": "Garéh data",
+ "summary": "Éhtisa:",
+ "subject": "Bhah/nan:",
+ "minoredit": "Nyoë lôn andam bacut",
+ "watchthis": "Kalön laman nyoë",
+ "savearticle": "Keubah laman",
+ "preview": "Eu dilèë",
+ "showpreview": "Peuleumah hasé",
+ "showdiff": "Peuleumah neuubah",
+ "anoneditwarning": "Droëneuh hana teudapeuta tamong. Alamat IP Droëneuh teucatat lam tarèh (riwayat away) ôn nyoë.",
+ "missingcommenttext": "Neupasoë beunalah di yup.",
+ "summary-preview": "Eu dilèë neuringkaih:",
+ "blockedtitle": "Ureueng ngui geutheun",
+ "blockedtext": "'''Nan ureuëng nguy atawa alamat IP Droëneuh ka geutheun.'''\n\nGeutheun lé $1. Dalèh jih nakeuh ''$2''.\n\n* Geutheun yôh: $8\n* Neutheun maté tanggay bak: $6\n* Nyang geutheun: $7\n\nDroëneuh jeuët neutanyong bak $1 atawa [[{{MediaWiki:Grouppage-sysop}}|nyang urôh nyang la’én]] keu peugah haba bhah nyoë.\n\nDroëneuh h’an jeuët neunguy alat 'Kirém surat-e ureuëng nguy nyoë' keucuali ka neupasoë alamat surat-e nyang sah di [[Special:Preferences|Geunalak]] Droëneuh ngön Droëneuh ka geutheun keu nguy nyan.\n\nAlamat IP Droëneuh nakeuh $3, ngön ID neutheun nakeuh $5. Tulông peuseureuta salah saboh atawa ban duwa beurita nyoë bak tiëp teunanyöng nyang neupeugöt.",
+ "autoblockedtext": "'''Nan ureuëng nguy atawa alamat IP Droëneuh ka geutheun.'''\n\nGeutheun lé $1. Dalèh jih nakeuh ''$2''.\n\n* Geutheun yôh: $8\n* Neutheun maté tanggay bak: $6\n* Nyang geutheun: $7\n\nDroëneuh jeuët neutanyong bak $1 atawa [[{{MediaWiki:Grouppage-sysop}}|nyang urôh nyang la’én]] keu peugah haba bhah nyoë.\n\nDroëneuh h’an jeuët neunguy alat 'Kirém surat-e ureuëng nguy nyoë' keucuali ka neupasoë alamat surat-e nyang sah di [[Special:Preferences|Geunalak]] Droëneuh ngön Droëneuh ka geutheun keu nguy nyan.\n\nAlamat IP Droëneuh nakeuh $3, ngön ID neutheun nakeuh $5. Tulông peuseureuta salah saboh atawa ban duwa beurita nyoë bak tiëp teunanyöng nyang neupeugöt.",
+ "blockednoreason": "hana dalèh nyang geubri",
+ "whitelistedittext": "Droeneuh suwah $1 keu neuandam ôn.",
+ "nosuchsectiontitle": "Bideueng hana geutumèe",
+ "loginreqtitle": "Droeneuh payah neutamöng log.",
+ "loginreqlink": "tamöng",
+ "loginreqpagetext": "Droeneuh payah $1 keu neu'eu ôn-ôn la'én.",
+ "accmailtitle": "Lageuem rahsia ka meukirém",
+ "newarticle": "(Barô)",
+ "newarticletext": "Droëneuh ka neuseutöt peunawôt u laman nyang goh na.\nKeu neupeugöt laman nyan, neukeutik lam plôk di yup (eu [$1 laman beunantu] keu haba leubèh le).\nMeunyö droëneuh trôk keunoë hana neusaja, neuteugön tèk '''back''' bak ''browser'''droëneuh.",
+ "anontalkpagetext": "----''Nyoe nakeuh ôn marit ureueng ngui nyang hana tamöng atawa hana geungui.''\nSaweub nyan, kamoe payah meukubah alamat IP-geuh keu meuparéksa. \nAlamat IP mungkén jingui lé padum-padum droe ureueng.\nMeunyoe droeneuh ureueng nyang hana tamöng nyan, tulông [[Special:UserLogin/signup|peugöt nan ureueng ngui]] atawa [[Special:UserLogin|tamöng log]] mangat meuteugah nibak bhah nyang hana meuphôm bak uroe la'én.",
+ "noarticletext": "Hana naseukah jinoë lam laman nyoë.\nJi Droëneuh jeuët [[Special:Search/{{PAGENAME}}|neumita keu nan ôn nyoë]] bak ôn-ôn la’én, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} log nyang na hubôngan], atawa [{{fullurl:{{FULLPAGENAME}}|action=edit}} neu'andam ôn nyoë]</span>.",
+ "noarticletext-nopermission": "Hana asoë bak laman nyoë jinoë.\nDroëneuh jeuët [[Special:Search/{{PAGENAME}}|neumita keu nan ôn nyoë]] bak laman-laman la'én,\natawa <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} neumita log nyang na meuhubông]</span>, tapi Droëneuh hana idin keu neupeugöt laman nyoë",
+ "userpage-userdoesnotexist-view": "Ureueng ngui \"$1\" hana teudapeuta.",
+ "updated": "(Seubarô)",
+ "note": "'''Hareutoë:'''",
+ "previewnote": "'''Beu neuingat meunyo laman nyoë goh lom neukeubah!'''",
+ "editing": "Andam $1",
+ "creating": "Teungöh meupeugöt $1",
+ "editingsection": "Andam $1 (bideuëng)",
+ "editingcomment": "Andam $1 (bideuëng)",
+ "editconflict": "Konflik andam: $1",
+ "yourtext": "Naseukah droëneuh",
+ "storedversion": "Geunantoë teukeubah",
+ "yourdiff": "Bida",
+ "copyrightwarning": "Beu neuingat 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.\n'''BÈK NEUPASOË TEUNULÉH NYANG GEUPEULINDÔNG HAK KARANG NYANG HANA IDIN'''",
+ "templatesused": "{{PLURAL:$1|Templat|Templates}} nyang geungui bak laman nyoë:",
+ "templatesusedpreview": "{{PLURAL:$1|Templat|Templates}} nyang geungui bak eu dilèë nyoë:",
+ "templatesusedsection": "{{PLURAL:$1|Seunaleuëk}} geungui bak bagian nyoë:",
+ "template-protected": "(geulindông)",
+ "template-semiprotected": "(siteungoh-lindông)",
+ "hiddencategories": "Laman nyoë nakeuh anggèëta nibak {{PLURAL:$1|1 kawan teusom |$1 kawan teusom}}:",
+ "nocreatetext": "{{SITENAME}} ka jiköt bak peugöt laman barô. Ji Droëneuh jeuët neuriwang teuma ngön neu’andam laman nyang ka na, atawa [[Special:UserLogin|neutamong atawa neudapeuta]].",
+ "nocreate-loggedin": "Droeneuh hana khut keu neupeugöt laman-laman barô.",
+ "sectioneditnotsupported-title": "Andam bideung hana meudukông",
+ "sectioneditnotsupported-text": "Andam bideung hana meudukông bak ôn nyoe.",
+ "permissionserrors": "Salah khut/hak tamöng",
+ "permissionserrorstext": "Droëneuh hana geupeuidin keu neupubuët nyoë, muroë {{PLURAL:$1|dalèh}} nyoë:",
+ "permissionserrorstext-withaction": "Droëneuh hana hak tamöng keu $2, muroë {{PLURAL:$1|choë|choë}} nyoë:",
+ "recreate-moveddeleted-warn": "'''Ingat: Droëneuh neupeugöt ulang saboh laman nyang ka tom geusampôh. ''',\n\nNeutimang-timang dilèë peuë ék patôt neupeulanjut atra nyang teungöh neu’andam.\nNyoë pat nakeuh log seunampôh nibak laman nyoë:",
+ "moveddeleted-notice": "Laman nyoë ka geusampôh.\nLog seunampôh ngön log pinah laman nyoë geupeuseudia di yup nyoë keu keuneubah.",
+ "log-fulllog": "Eu ban dum ceunatat",
+ "edit-hook-aborted": "Seunampôh geupeubateuë lé kaw'ét parser.\nHana jeuneulaih.",
+ "edit-gone-missing": "Han jeut peubarô ôn.\nÔn nyoe mungkén ka geusampôh.",
+ "edit-conflict": "Konflik andam.",
+ "postedit-confirmation-saved": "Neuandam droeneuh ka meukubah.",
+ "edit-already-exists": "Han jeut peugöt ôn barô.\nÔn nyoe ka lheuh na.",
+ "defaultmessagetext": "Naseukah peusan pukok",
+ "content-model-wikitext": "naseukah wiki",
+ "post-expand-template-inclusion-warning": "'''Ingat:''' Seunipat seunaleuëk nyang neunguy rayek that.\nLadôm seunaleuëk hana geupeurôh",
+ "post-expand-template-inclusion-category": "Laman ngön seunipat seunaleuëk nyang leubèh bataih",
+ "post-expand-template-argument-warning": "'''Ingat:''' Laman nyoe na paléng h'an saboh alasan seunaleuëk nyang na sunipat èkspansi nyang raya that.\nAlasan-alasan nyan hana geupeureumeuën.",
+ "post-expand-template-argument-category": "Laman ngön dalèh seunaleuëk nyang hana geupeureumeuën",
+ "cantcreateaccounttitle": "Han jeut peugöt nan ureueng ngui",
+ "cantcreateaccount-text": "Peuneugöt nan ureueng ngui nibak alamat IP ('''$1''') ka geutheun lé [[User:$3|$3]].\n\nDalèh $3 nyoe nakeuh ''$2''",
+ "viewpagelogs": "Eu log laman nyoë",
+ "nohistory": "Hana riwayat neuandam awai keu ôn nyoe.",
+ "currentrev": "Geunantoë jinoë",
+ "currentrev-asof": "Geunantoë barô bak $1",
+ "revisionasof": "Geunantoë tiëp $1",
+ "revision-info": "Geunantoë tiëp $1; $2",
+ "previousrevision": "← Geunantoë awai",
+ "nextrevision": "Geunantoë lheuëh nyan→",
+ "currentrevisionlink": "Geunantoë jinoë",
+ "cur": "jin",
+ "next": "u keu",
+ "last": "sigohlom",
+ "page_first": "phôn",
+ "page_last": "keuneulheuëh",
+ "histlegend": "Piléh duwa teuneugön radiô, lheuëh nyan teugön teuneugön ''peubandéng'' keu peubandéng seunalén. Teugön saboh tanggay keu eu seunalén ôn bak tanggay nyan.<br />(skr) = bida ngön seunalén jinoë, (akhé) = bida ngön seunalén sigohlomjih. '''u''' = andam ubeut, '''b''' = andam bot, → = andam bideuëng, ← = ehtisa keudroë",
+ "history-fieldset-title": "Eu riwayat awai",
+ "history-show-deleted": "Nyang geusampôh mantöng",
+ "histfirst": "paléng trép",
+ "histlast": "paléng barô",
+ "historysize": "({{PLURAL:$1|1 bit}})",
+ "historyempty": "(soh)",
+ "history-feed-title": "Riwayat neupeupah",
+ "history-feed-description": "Riwayat neupeupah keu ôn nyoe bak wiki",
+ "history-feed-item-nocomment": "$1 bak $2",
+ "rev-deleted-comment": "(mohtasa neuandam geusampôh)",
+ "rev-deleted-user": "(nan ureueng ngui geusampôh)",
+ "rev-deleted-user-contribs": "[nan ureueng ngui atawa alamat IP geusampôh - neuandam geupeusom bak dapeuta beuneuri]",
+ "rev-delundel": "peuleumah/peusom",
+ "rev-showdeleted": "peudeuh",
+ "revdelete-show-file-submit": "Nyoe",
+ "revdelete-hide-comment": "Mohtasa neuandam",
+ "revdelete-radio-same": "(bèk neugantoe)",
+ "revdelete-radio-set": "Teusom",
+ "revdelete-radio-unset": "Deuih",
+ "revdelete-log": "Dalèh:",
+ "revdel-restore": "Gantoë seuneudeuih",
+ "pagehist": "Taréh laman",
+ "deletedhist": "Taréh nyang meusampôh",
+ "mergehistory-from": "Asai ôn:",
+ "mergehistory-invalid-source": "Asai ôn payah nan nyang beutôi.",
+ "mergehistory-reason": "Dalèh:",
+ "mergelog": "Peugabông log",
+ "revertmerge": "Hana jadèh peugabông",
+ "history-title": "Riwayat geunantoë nibak \"$1\"",
+ "lineno": "Baréh $1:",
+ "compareselectedversions": "Peubandéng curak teupiléh",
+ "editundo": "pubateuë",
+ "diff-empty": "(Hana bida)",
+ "searchresults": "Hasé mita",
+ "searchresults-title": "Hasé mita keu \"$1\"",
+ "notextmatches": "Hana naseukah laman nyang pah",
+ "prevn": "{{PLURAL:$1|$1}} sigohlomjih",
+ "nextn": "{{PLURAL:$1|$1}} lheuëh nyan",
+ "prevn-title": "$1 {{PLURAL:$1|hasé|hasé}} sigohlomjih",
+ "nextn-title": "$1 {{PLURAL:$1|hasé}} lheuëh nyan",
+ "shown-title": "Peuleumah $1 {{PLURAL:$1|hasé}} tiëp laman",
+ "viewprevnext": "Eu ($1 {{int:pipe-separator}} $2)($3)",
+ "searchmenu-exists": "'''Na laman ngön nan \"[[:$1]]\" bak wiki nyoe.'''",
+ "searchmenu-new": "<strong>Peugöt laman \"[[:$1]]\" bak wiki nyoë!</strong> {{PLURAL:$2|0=|Eu cit laman nyang geurumpok nibak meunita droëneuh.|Eu cit hasé mita nyang geurumpok.}}",
+ "searchprofile-articles": "Laman asoë",
+ "searchprofile-images": "Multimedia",
+ "searchprofile-everything": "Ban dum",
+ "searchprofile-advanced": "Tingkat lanjut",
+ "searchprofile-articles-tooltip": "Mita bak $1",
+ "searchprofile-images-tooltip": "Mita beureukaih",
+ "searchprofile-everything-tooltip": "Mita ban dum laman asoë (rôh ôn marit)",
+ "searchprofile-advanced-tooltip": "Mita bak ruweuëng nan meupat-pat",
+ "search-result-size": "$1 ({{PLURAL:$2|1 narit|$2 narit}})",
+ "search-result-category-size": "{{PLURAL:$1|1 anggeeta|$1 anggeeta}} ({{PLURAL:$2|1 aneuk kawan|$2 aneuk kawan}}, {{PLURAL:$3|1 beureukaih|$3 beureukaih}})",
+ "search-redirect": "(peuninah $1)",
+ "search-section": "(bideuëng $1)",
+ "search-suggest": "Kadang meukeusud Droëneuh nakeuh: $1",
+ "search-interwiki-caption": "Buët la’én",
+ "search-interwiki-default": "Hasé nibak $1:",
+ "search-interwiki-more": "(lom)",
+ "searchrelated": "meusambat",
+ "searchall": "ban dum",
+ "showingresultsheader": "{{PLURAL:$5|Hase '''$1''' nibak '''$3'''|Hase '''$1 - $2''' nibak '''$3'''}} keu '''$4'''",
+ "search-nonefound": "Hana hasé nyang paih lagèë neulakèë",
+ "powersearch-legend": "Mita lanjut",
+ "powersearch-ns": "Mita bak ruweuëng nan:",
+ "powersearch-toggleall": "Ban dum",
+ "powersearch-togglenone": "Hana",
+ "preferences": "Galak",
+ "mypreferences": "Atô",
+ "prefs-edits": "Jumeulah neuandam:",
+ "prefs-skin": "Kulét",
+ "skin-preview": "Eu dilèe",
+ "datedefault": "Hana geunalak",
+ "prefs-user-pages": "Laman ureueng ngui",
+ "prefs-personal": "Profil ureueng ngui",
+ "prefs-rc": "Ban meuubah",
+ "prefs-watchlist": "Dapeuta keunalön",
+ "prefs-watchlist-days": "Jumeulah uroe nyang meupeudeuh bak dapeuta keunalön:",
+ "prefs-watchlist-days-max": "{{PLURAL:$1|uroë}}",
+ "prefs-misc": "La'én-la'én",
+ "prefs-resetpass": "Gantoe lageuem rahsia",
+ "prefs-changeemail": "Gantoe alamat surat-e",
+ "prefs-setemail": "Pasoe alamat surat-e",
+ "prefs-email": "Peuniléh surat-e",
+ "prefs-rendering": "Seuneudeuh",
+ "saveprefs": "Keubah",
+ "prefs-editing": "Neuandam",
+ "rows": "Baréh:",
+ "searchresultshead": "Mita",
+ "stub-threshold-disabled": "Geupeumaté",
+ "timezoneuseoffset": "La'én (peuteuntèe bidajih)",
+ "timezoneregion-america": "Amirika",
+ "timezoneregion-antarctica": "Antartika",
+ "timezoneregion-atlantic": "Laôt Atlantik",
+ "timezoneregion-europe": "Ierupa",
+ "timezoneregion-indian": "Laôt India",
+ "timezoneregion-pacific": "Laôt Pasifik",
+ "allowemail": "Peuudép surat-e nibak ureueng ngui la'én",
+ "prefs-searchoptions": "Mita",
+ "prefs-namespaces": "Ruweuëng nan",
+ "default": "meuneumat",
+ "prefs-files": "Beureukaih",
+ "youremail": "Surat-e:",
+ "prefs-registration": "Watèe neudapeuta:",
+ "yourrealname": "Nan aseuli:",
+ "yourlanguage": "Bahsa:",
+ "yournick": "Tanda jaroe barô:",
+ "prefs-help-signature": "Komèntar bak ôn marit suwah neubôh \"<nowiki>~~~~</nowiki>\", nyang eunteuk meugantoe keu tanda jaroe droeneuh ngön watèe jinoe.",
+ "badsiglength": "Tanda jaroë droëneuh panyang that.\nBèk leubèh nibak $1 {{PLURAL:$1|karakter}}.",
+ "gender-unknown": "Hana geupeunyata",
+ "gender-male": "Ureueng agam",
+ "gender-female": "Ureueng inöng",
+ "email": "Surat-e",
+ "prefs-help-realname": "* Nan aseuli hana meucéh neupasoë.\nMeunyö neupasoë, euntreuk nan Droëneuh nyan geupeuleumah mangat jitupeuë soë nyang tuléh.",
+ "prefs-help-email": "Alamat surat-e hana meucéh na, tapi geupeureulèë keu seumeugöt ulang lageuem, meunyö droeneuh tuwö lageuëm.",
+ "prefs-help-email-others": "Droeneuh jeuet cit neupiléh neupubiyeuë ureuëng la'én geupeu'et surat keu droeneuh röt surat-e röt seunambat bak laman ureueng ngui atawa on mariët.\nSurat-e droeneuh h'an geupeugah keu ureuëng nyan.",
+ "prefs-help-email-required": "Peureulèe alamat surat-e.",
+ "prefs-signature": "Tanda jaroe",
+ "prefs-dateformat": "Format uroe/watèe",
+ "prefs-timeoffset": "Bida watèe",
+ "prefs-advancedediting": "Peuniléh umom",
+ "prefs-editor": "Ureueng andam",
+ "prefs-preview": "Eu dilèe",
+ "prefs-diffs": "Bida",
+ "prefs-help-prefershttps": "Geunalak nyoe geupeudeuh watèe neutamöng lom.",
+ "email-address-validity-valid": "Alamat surat-e sah",
+ "email-address-validity-invalid": "Pasoe alamat surat-e nyang sah",
+ "userrights-user-editname": "Pasoe nan ureueng ngui:",
+ "editusergroup": "Ubah kawan ureueng ngui",
+ "editinguser": "Gantoe khut ureueng ngui '''[[User:$1|$1]]''' $2",
+ "userrights-editusergroup": "Ubah kawan ureueng ngui",
+ "saveusergroups": "Ubah kawan ureueng ngui",
+ "userrights-groupsmember": "Anggèeta nibak:",
+ "userrights-reason": "Dalèh:",
+ "userrights-no-interwiki": "Droeneuh hana izin keu neuubah khut ureueng ngui bak wiki la'én.",
+ "userrights-notallowed": "Droeneuh hana izin keu neutamah atawa neupeugadöh khut ureueng ngui.",
+ "userrights-changeable-col": "Kawan nyang jeut neugantoe",
+ "userrights-unchangeable-col": "Kawan nyang han jeut neugantoe",
+ "group": "Kawan:",
+ "group-user": "Ureueng-ureueng ngui",
+ "group-autoconfirmed": "Ureueng ngui nyang meu-konfirmasi otomatis",
+ "group-sysop": "Ureuëng urôh",
+ "group-bureaucrat": "Birôkrat",
+ "group-suppress": "Ureueng kalön",
+ "group-all": "(ban dum)",
+ "group-user-member": "{{GENDER:$1|ureueng ngui}}",
+ "group-autoconfirmed-member": "{{GENDER:$1|ureueng ngui meu-konfirmasi otomatis}}",
+ "group-bot-member": "{{GENDER:$1|bot}}",
+ "group-sysop-member": "{{GENDER:$1|ureueng urôh}}",
+ "group-bureaucrat-member": "{{GENDER:$1|birôkrat}}",
+ "group-suppress-member": "{{GENDER:$1|ureueng kalön}}",
+ "grouppage-user": "{{ns:project}}:Ureueng ngui",
+ "grouppage-autoconfirmed": "{{ns:project}}:Ureueng ngui meu-konfirmasi otomatis",
+ "grouppage-bot": "{{ns:project}}:Bots",
+ "grouppage-sysop": "{{ns:project}}:Ureuëng urôh",
+ "grouppage-bureaucrat": "{{ns:project}}:Birôkrat",
+ "grouppage-suppress": "{{ns:project}}:Ureueng kalön",
+ "right-read": "Beuet laman",
+ "right-edit": "Andam laman",
+ "right-createpage": "Peugöt laman barô (nyang kön laman marit)",
+ "right-createtalk": "Peugöt ôn marit",
+ "right-createaccount": "Peugöt nan ureueng ngui barô",
+ "right-minoredit": "Bôh tanda seubagoe andam ubeut",
+ "right-move": "Pinah laman",
+ "right-move-subpages": "Pinah laman ngön ban dum aneuk laman",
+ "right-move-rootuserpages": "Pinah laman ureueng ngui",
+ "right-movefile": "Pinah beureukaih",
+ "right-upload": "Peutamöng beureukaih",
+ "right-upload_by_url": "Peutamöng beureukaih nibak URL",
+ "right-delete": "Sampôh laman",
+ "right-bigdelete": "Sampôh laman ngön ban dum riwayatjih",
+ "right-browsearchive": "Mita laman nyang geusampôh",
+ "newuserlogpage": "Ureuëng ngui barô",
+ "rightslog": "Log neuubah hak peuhah",
+ "action-read": "beuët laman nyoe",
+ "action-edit": "andam laman nyoë",
+ "action-createpage": "peugöt laman",
+ "action-move": "Peupinah laman nyoë",
+ "nchanges": "$1 {{PLURAL:$1|neuubah}}",
+ "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|yôh seunaweuë seuneulheuëh kön}}",
+ "recentchanges": "Neuubah barô",
+ "recentchanges-legend": "Peuniléh neuubah barô",
+ "recentchanges-summary": "Di yup nyoë nakeuh neuubah barô nyang na bak Wikipèdia nyoë.\nHareutoë: (bida) = neuubah, (riwayat) = riwayat teumuléh, '''B''' = laman barô, '''u''' = neuandam ubeut, '''b''' = neuandam bot, (± ''bit'') = jeumeulah asoë meutamah/meukureuëng, → = neuandam bideuëng, ← = mohtasa otomatis.\n----",
+ "recentchanges-noresult": "Hana neuubah lam lheuëng watèë nyoë nyang paih ngön syarat",
+ "recentchanges-feed-description": "Seutöt neuubah barô lam wiki bak umpeuën nyoë.",
+ "recentchanges-label-newpage": "Neuandam nyoë jipeugöt laman barô",
+ "recentchanges-label-minor": "Nyoe neuandam ubeut",
+ "recentchanges-label-bot": "Neuandam nyoe geupubuet le bot",
+ "recentchanges-label-unpatrolled": "Neuandam nyoe goh lom geukalon",
+ "rcnotefrom": "Di yup nyoë nakeuh neuubah yôh <strong>$2</strong> (geupeudeuh trôh ‘an <strong>$1</strong> neuubah).",
+ "rclistfrom": "Peudeuih neuubah barô yôh $3 $2 kön",
+ "rcshowhideminor": "$1 andam bacut",
+ "rcshowhidebots": "$1 bot",
+ "rcshowhideliu": "$1 ureuëng ngui tamöng",
+ "rcshowhideanons": "$1 ureuëng ngui hana nan",
+ "rcshowhidepatr": "$1 andam teurunda",
+ "rcshowhidemine": "$1 atra lôn andam",
+ "rclinks": "Peudeuih $1 neuubah barô lam $2 uroë nyoë<br />$3",
+ "diff": "bida",
+ "hist": "riwayat",
+ "hide": "Peusom",
+ "show": "Peuleumah",
+ "minoreditletter": "b",
+ "newpageletter": "B",
+ "boteditletter": "b",
+ "number_of_watching_users_pageview": "[$1 kalön {{PLURAL:$1|ureuëng ngui}}]",
+ "rc_categories_any": "Pue-pue mantöng",
+ "rc-change-size-new": "$1 {{PLURAL:$1|bita}} lheuëh neuubah",
+ "newsectionsummary": "/* $1 */ bideung barô",
+ "rc-enhanced-expand": "Peuleumah rincian",
+ "rc-enhanced-hide": "Peusom rincian",
+ "rc-old-title": "sigohlom nyan geupeugöt \"$1\"",
+ "recentchangeslinked": "Neuubah meukaw'èt",
+ "recentchangeslinked-feed": "Neuubah meuhubông",
+ "recentchangeslinked-toolbox": "Neuubah teukaw'èt",
+ "recentchangeslinked-title": "Neuubah nyang meukaw'èt ngön $1",
+ "recentchangeslinked-summary": "Nyoë nakeuh dapeuta neuubah nyang geupeugèt ban-ban nyoë keu on-on nyang meuhubông nibak ôn ka kusuih (atawa keu anggèëta kawan kusuih).\nÔn-ôn bak [[Special:Watchlist|keunalon droeneuh]] geucitak '''teubay'''.",
+ "recentchangeslinked-page": "Nan laman:",
+ "recentchangeslinked-to": "Peuleumah neuubah nibak laman-laman nyang mupawôt ngön laman nyang geubri",
+ "upload": "Peutamöng beureukaih",
+ "uploadbtn": "Peutamong beureukaih",
+ "reuploaddesc": "Riwang u laman peutamöng",
+ "uploadnologin": "Hana lom meutamöng",
+ "uploadnologintext": "Droeneuh suwah $1 keu neupeutamöng beureukaih.",
+ "uploadlogpage": "Log peutamöng",
+ "uploadlogpagetext": "Nyoe nakeuh dapeuta peutamöng barô.\nEu [[Special:NewFiles|galeri beureukaih barô]] keu seuneudeuh barô.",
+ "filename": "Nan beureukaih",
+ "filedesc": "Ehtisa",
+ "fileuploadsummary": "Éhtisa:",
+ "filesource": "Nè",
+ "minlength1": "Nan beureukaih beuna saboh haraih.",
+ "illegalfilename": "Nan beureukaih \"$1\" meuasoe seunurat nyang han jeut na bak nan. Tulông gantoe nan nyan sigohlom neupeutamöng lom.",
+ "filename-toolong": "Nan beureukaih han jeut leubèh nibak 240 bita.",
+ "badfilename": "Nan beureukaih ka meugantoe keu \"$1\".",
+ "empty-file": "Beureukaih nyang neupeutamöng soh.",
+ "file-too-large": "Beureukaih nyang neupeutamöng rayek that.",
+ "filename-tooshort": "Nan beureukaih paneuk that.",
+ "filetype-banned": "Jeunèh beureukaih nyoe geutheun.",
+ "illegal-filename": "Nan beureukaih han jeut lagèe nyoe.",
+ "savefile": "Kubah beureukaih",
+ "upload-source": "Asai beureukaih",
+ "sourcefilename": "Asai nan beureukaih:",
+ "sourceurl": "Asai URL:",
+ "upload-maxfilesize": "Paléng rayek beureukaih: $1",
+ "upload-description": "Teuneurang beureukaih",
+ "watchthisupload": "Kalön beureukaih nyoe",
+ "upload-success-subj": "Ka meupeutamöng",
+ "img-auth-nofile": "Hana beureukaih \"$1\".",
+ "license": "Jeunèh lisensi:",
+ "license-header": "Jeunèh lisensi",
+ "imgfile": "beureukaih",
+ "listfiles": "Dapeuta beureukah",
+ "listfiles_thumb": "Beuntuk ubeut",
+ "listfiles_date": "Uroe",
+ "listfiles_name": "Nan",
+ "listfiles_user": "Ureueng ngui",
+ "listfiles_size": "Rayek",
+ "listfiles_description": "Teuneurang",
+ "listfiles_count": "Vèrsi",
+ "listfiles-show-all": "Peurôh vèrsi awai gamba",
+ "listfiles-latestversion": "Vèrsi jinoe",
+ "listfiles-latestversion-yes": "Nyoe",
+ "listfiles-latestversion-no": "Kön",
+ "file-anchor-link": "Beureukaih",
+ "filehist": "Riwayat beureukaih",
+ "filehist-help": "Neuteugon bak uroë buleuën/watèë keu neu'eu beureukaih nyoë ‘oh watèë nyan.",
+ "filehist-deleteall": "sampôh ban dum",
+ "filehist-deleteone": "sampôh",
+ "filehist-revert": "peuriwang",
+ "filehist-current": "jinoë hat",
+ "filehist-datetime": "Uroë buleuën/Watèë",
+ "filehist-thumb": "Beuntuk ubeut",
+ "filehist-thumbtext": "Beuntuk ubeut keu seunalén tiëp $1",
+ "filehist-nothumb": "Hana beuntuk ubeut",
+ "filehist-user": "Ureuëng ngui",
+ "filehist-dimensions": "Dimènsi",
+ "filehist-filesize": "Rayek beureukah",
+ "filehist-comment": "Seuneu'ôt",
+ "imagelinks": "Seuneungui beureukaih",
+ "linkstoimage": "{{PLURAL:$1|laman}} di yup nyoë mupawôt u beureukaih nyoë:",
+ "nolinkstoimage": "Hana laman nyang na meupawôt u beureukaih nyoë.",
+ "sharedupload": "Beureukah nyoë dari $1 ngön kadang geunguy lé buët-buët la’én.",
+ "sharedupload-desc-here": "Beureukaih nyoe nejih nibak $1 ngon kadang geunguy le proyek-proyek la'en.\nTeuneurang bak [$2 on teuneurangjih] geupeuleumah di yup nyoe.",
+ "uploadnewversion-linktext": "Peulöt seunalén nyang leubèh barô nibak beureukah nyoë.",
+ "mimesearch": "Mita MIME",
+ "listredirects": "Dapeuta peuninah",
+ "unusedtemplates": "Templat nyang hana geungui",
+ "randompage": "Laman baranggari",
+ "randomredirect": "Peuninah saban sakri",
+ "statistics": "Keunira",
+ "doubleredirects": "Peuninah ganda",
+ "brokenredirects": "Peuninah reulöh",
+ "withoutinterwiki": "Laman tan na hubông bahsa",
+ "fewestrevisions": "Teunuléh ngön neu’ubah paléng dit",
+ "nbytes": "$1 {{PLURAL:$1|bit|bit}}",
+ "nlinks": "$1 {{PLURAL:$1|hubông|hubông}}",
+ "nmembers": "$1 {{PLURAL:$1|asoë|asoë}}",
+ "lonelypages": "Laman tan hubông balék",
+ "uncategorizedpages": "Laman hana kawan",
+ "uncategorizedcategories": "Kawan hana kawan",
+ "uncategorizedimages": "Beureukaih hana kawan",
+ "uncategorizedtemplates": "Seunaleuëk hana kawan",
+ "unusedcategories": "Kawan hana geungui",
+ "unusedimages": "Beureukaih hana geungui",
+ "popularpages": "Laman jithèë",
+ "wantedcategories": "Kawan geuh'eut",
+ "wantedpages": "Laman geuh‘eut",
+ "wantedpages-badtitle": "Nan hana sah lam kawan hasé: $1",
+ "wantedfiles": "Beureukaih nyang geumeuh'eut",
+ "mostlinked": "Laman nyang paléng kayém geutuju",
+ "mostlinkedcategories": "Kawan nyang paléng kayém geutuju",
+ "mostlinkedtemplates": "Templat nyang paléng kayém geutuju",
+ "mostcategories": "Teunuléh ngön kawan paléng le",
+ "mostimages": "Beureukah nyang paléng kayém geunguy",
+ "mostrevisions": "Teunuléh ngön neu’ubah paléng le",
+ "prefixindex": "Ban dum laman ngön haraih awai",
+ "shortpages": "Laman paneuk",
+ "longpages": "Laman panyang",
+ "deadendpages": "Laman buntu",
+ "protectedpages": "Laman nyang geulindông",
+ "listusers": "Dapeuta ureuëng ngui",
+ "usercreated": "{{GENDER:$3|Geupeugot}} bak $1 poh $2",
+ "newpages": "Laman barô",
+ "newpages-username": "Ureuëng ngui:",
+ "ancientpages": "Laman paléng awai",
+ "move": "Pupinah",
+ "movethispage": "Pupinah laman nyoë",
+ "pager-newer-n": "{{PLURAL:$1|1 leubèh barô |$1 leubèh barô}}",
+ "pager-older-n": "{{PLURAL:$1|1 leubèh awai|$1 leubèh awai}}",
+ "booksources": "Nè kitab",
+ "booksources-search-legend": "Mita bak nè kitab",
+ "booksources-go": "Mita",
+ "specialloguserlabel": "Ureuëng ngui:",
+ "speciallogtitlelabel": "Sasaran (nan atawa ureuëng ngui):",
+ "log": "Log",
+ "all-logs-page": "Ban dum log umom",
+ "allpages": "Ban dum laman",
+ "nextpage": "Laman lheuëh nyan ($1)",
+ "prevpage": "Laman sigohlomjih ($1)",
+ "allpagesfrom": "Peuleumah laman peuphôn nibak:",
+ "allpagesto": "Peuleumah laman geupeuakhé bak:",
+ "allarticles": "Dapeuta teunuléh",
+ "allpagessubmit": "Mita",
+ "allpagesprefix": "Peuleumah laman ngön harah phôn:",
+ "allpages-hide-redirects": "Peusom peuninah",
+ "categories": "Dapeuta kawan",
+ "special-categories-sort-count": "atôe meunurôt jumeulah",
+ "special-categories-sort-abc": "atôe meunurôt seunurat",
+ "deletedcontributions": "Beuneuri nyang geusampôh",
+ "deletedcontributions-title": "Beuneuri nyang geusampôh",
+ "sp-deletedcontributions-contribs": "beuneuri",
+ "linksearch": "Mita seuneumat luwa",
+ "linksearch-pat": "Pola mita:",
+ "linksearch-ns": "Ruweueng nan:",
+ "linksearch-ok": "Mita",
+ "linksearch-line": "$1 meupawôt nibak $2",
+ "listusersfrom": "Peuleumah ureueng ngui nyang neuawai ngön:",
+ "listusers-submit": "Peuleumah",
+ "listusers-noresult": "Hana ureueng ngui nyang meutumèe.",
+ "listusers-blocked": "(geutheun)",
+ "activeusers": "Dapeuta ureueng ngui udép",
+ "activeusers-intro": "Nyoë nakeuh dapeuta ureuëng ngui nyang na geuteumuléh lam $1 {{PLURAL:$1|uroë}} nyoë.",
+ "activeusers-count": "$1 {{PLURAL:$1|buet}} lam {{PLURAL:$3|uroë|$3 uroë}} nyoë",
+ "activeusers-from": "Peuleumah ureueng ngui nyang neuawai ngön:",
+ "activeusers-hidebots": "Peusom bot",
+ "activeusers-hidesysops": "Peusom ureueng urôh",
+ "activeusers-noresult": "Hana ureueng ngui nyang meutumèe.",
+ "listgrouprights": "Dapeuta khut ureueng ngui",
+ "listgrouprights-key": "Teuneurang:\n* <span class=\"listgrouprights-granted\">Khut nyang geubri</span>\n* <span class=\"listgrouprights-revoked\">Khut nyang hana geubri</span>",
+ "listgrouprights-group": "Kawan",
+ "listgrouprights-rights": "Khut",
+ "listgrouprights-helppage": "Help:Khut kawan",
+ "listgrouprights-members": "(dapeuta anggèëta)",
+ "listgrouprights-addgroup": "Tamah {{PLURAL:$2|kawan}}: $1",
+ "listgrouprights-removegroup": "Sampôh {{PLURAL:$2|kawan}}: $1",
+ "listgrouprights-addgroup-all": "Tamah ban dum kawan",
+ "listgrouprights-removegroup-all": "Sampôh ban dum kawan",
+ "emailuser": "Surat-e ureuëng ngui",
+ "emailuser-title-target": "Peu'ét surat-e keu {{GENDER:$1|ureuëng ngui}} nyoë",
+ "emailuser-title-notarget": "Peu'ét surat-e",
+ "emailpage": "Peu'ét surat-e keu ureuëng ngui",
+ "emailusername": "Ureueng ngui:",
+ "emailusernamesubmit": "Kirém",
+ "email-legend": "Kirém surat-e keu ureueng ngui {{SITENAME}} la'én",
+ "emailfrom": "Ureueng kirém:",
+ "emailto": "Ureueng teurimöng:",
+ "emailsubject": "Bhah:",
+ "emailmessage": "Peusan:",
+ "emailsend": "Kirém",
+ "emailccme": "Kubah saboh seunalén surat-e lôn.",
+ "emailccsubject": "Salén peusan droeneuh keu $1: $2",
+ "emailsent": "Surat-e meukirém",
+ "emailsenttext": "Surat-e droeneuh ka meukirém.",
+ "watchlist": "Dapeuta keunalön",
+ "mywatchlist": "Keunalön",
+ "watchlistfor2": "Keu $1 $2",
+ "addedwatchtext": "Laman \"[[:$1]]\" ka geupeutamah u [[Special:Watchlist|dapeuta kalön]] droëneuh. \nNeuubah u keuë bak laman nyoë ngön laman marit nyang na teukaw'èt, euntreuk geupeudeuih sinoë.",
+ "removedwatchtext": "Ôn \"[[:$1]]\" ka geusampôh nibak [[Special:Watchlist|dapeuta keunalön]] Droëneuh.",
+ "watch": "Kalön",
+ "watchthispage": "Kalön ôn nyoë",
+ "unwatch": "Bateuë kalön",
+ "watchlist-details": "{{PLURAL:$1|$1 ôn|$1 ôn}} geukalön, hana kira ôn peugah haba.",
+ "wlshowlast": "Peudeuh $1 jeum $2 uroë $3 seuneulheuëh",
+ "watchlist-options": "Peuniléh dapeuta kalön",
+ "watching": "Kalön...",
+ "unwatching": "Hana kalön...",
+ "deletepage": "Sampôh laman",
+ "historywarning": "'''Peuneugah:''' Laman nyang keumeung neusampôh na riwayat ngön kureuëng leubèh $1 {{PLURAL:$1|geunantoë}}:",
+ "confirmdeletetext": "Droëneuh neuk neusampôh laman atawa beureukaih nyoë keu sabé. Meunan cit ban mandum riwayatjih nibak basis data. Neupeupaseuti meunyo Droëneuh cit keubiët meung neusampôh, neutupeuë ban mandum akébatjih, ngön peuë nyang neupeulaku nyoë nakeuh meunurôt [[{{MediaWiki:Policy-url}}|kebijakan{{SITENAME}}]].",
+ "actioncomplete": "Seuleusoë",
+ "actionfailed": "Hana meuhasé",
+ "deletedtext": "\"$1\" ka geusampôh. Eu $2 keu log paléng barô bak laman nyang ka geusampôh.",
+ "dellogpage": "Log seunampôh",
+ "deletecomment": "Choë:",
+ "deleteotherreason": "Nyang la’én/choë la’én:",
+ "deletereasonotherlist": "Choë la’én",
+ "rollbacklink": "pulang",
+ "protectlogpage": "Log lindông",
+ "protectedarticle": "peulindông \"[[$1]]\"",
+ "modifiedarticleprotection": "Ubah tingkat lindông \"[[$1]]\"",
+ "prot_1movedto2": "peupinah [[$1]] u [[$2]]",
+ "protectcomment": "Choë:",
+ "protectexpiry": "Maté tanggay:",
+ "protect_expiry_invalid": "Watèë maté tanggay hana sah.",
+ "protect_expiry_old": "Watèë maté tanggay nakeuh bak masa u likôt.",
+ "protect-text": "Droëneuh jeuët neu’eu atawa neugantoë tingkat lindông keu ôn '''$1''' 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.\nDroëneuh jeuët neugantoë tingkat lindông keu ôn nyoë, tapi nyan hana peungarôh keu lindông meuturôt.",
+ "protect-default": "Peuidin ban dum ureuëng ngui",
+ "protect-fallback": "Peuidin ureuëng ngui ngön idin \"$1\" mantöng",
+ "protect-level-autoconfirmed": "Peuidin ureuëng ngui nyang teudapeuta keudroë mantöng",
+ "protect-level-sysop": "Peuidin ureuëng urôh mantöng",
+ "protect-summary-cascade": "riti",
+ "protect-expiring": "maté tanggay $1 (UTC)",
+ "protect-expiring-local": "maté tanggai $1",
+ "protect-expiry-indefinite": "sabé",
+ "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",
+ "restriction-type": "Lindông:",
+ "restriction-level": "Tingkat:",
+ "undeletebtn": "Peuriwang!",
+ "undeletelink": "eu/peuriwang",
+ "undeleteviewlink": "eu",
+ "undelete-search-submit": "Mita",
+ "namespace": "Ruweuëng nan:",
+ "invert": "Peubalék peuniléh",
+ "namespace_association": "Ruweuëng nan meuhubông",
+ "blanknamespace": "(Keuë)",
+ "contributions": "Beuneuri {{GENDER:$1|ureuëng ngui}}",
+ "contributions-title": "Beuneuri ureuëng ngui keu $1",
+ "mycontris": "Beuneuri",
+ "contribsub2": "Keu {{GENDER:$3|$1}} ($2)",
+ "uctop": "(jinoë)",
+ "month": "Mula phôn buleuën (ngön sigohlomjih)",
+ "year": "Mula phôn thôn (ngön sigohlomjih)",
+ "sp-contributions-newbies": "Peudeuh beuneuri atra ureuëng ban dapeuta mantöng",
+ "sp-contributions-newbies-sub": "Keu ureuëng nguy barô",
+ "sp-contributions-blocklog": "Log peutheun",
+ "sp-contributions-uploads": "peunasoe",
+ "sp-contributions-logs": "log",
+ "sp-contributions-talk": "marit",
+ "sp-contributions-search": "Mita soë nyang tuléh",
+ "sp-contributions-username": "Alamat IP atawa nan ureuëng ngui:",
+ "sp-contributions-toponly": "Peuleumah geunantoe nyang baro mantong",
+ "sp-contributions-submit": "Mita",
+ "whatlinkshere": "Peunawôt balék",
+ "whatlinkshere-title": "Laman nyang mupawôt u $1",
+ "whatlinkshere-page": "Laman:",
+ "linkshere": "Laman-laman nyoë meupawôt u '''[[:$1]]''':",
+ "nolinkshere": "Hana halaman nyang teukaw'et u '''[[:$1]]'''.",
+ "isredirect": "laman peuninah",
+ "istemplate": "ngön seunaleuëk",
+ "isimage": "peunawôt beureukaih",
+ "whatlinkshere-prev": "$1 {{PLURAL:$1|sigohlomjih|sigohlomjih}}",
+ "whatlinkshere-next": "$1 {{PLURAL:$1|lheuëh nyan|lheuëh nyan}}",
+ "whatlinkshere-links": "← peunawôt",
+ "whatlinkshere-hideredirs": "$1 peuninah",
+ "whatlinkshere-hidetrans": "$1 transklusi",
+ "whatlinkshere-hidelinks": "$1 peunawôt",
+ "whatlinkshere-hideimages": "$1 peunawôt beureukaih",
+ "whatlinkshere-filters": "Saréng",
+ "blockip": "Theun ureuëng ngui",
+ "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": "Ureuëng ngui teutheun",
+ "ipblocklist-submit": "Mita",
+ "blocklink": "theun",
+ "unblocklink": "peugadöh theun",
+ "change-blocklink": "gantoë theun",
+ "contribslink": "beuneuri",
+ "blocklogpage": "Log peutheun",
+ "blocklogentry": "theun [[$1]] ngön watèë maté tanggay $2 $3",
+ "unblocklogentry": "peugadöh theun \"$1\"",
+ "block-log-flags-nocreate": "pumeugöt akun geupumaté",
+ "movepagetext": "Formulir di yup nyoë geunguy keu jak ubah nan saboh ôn ngön jak peupinah ban dum data riwayat u nan barô. Nan nyang trép euntreuk jeuët keu ôn peupinah u nan nyang barô. Hubông u nan trép hana meu’ubah. Neupeupaseuti keu neupréksa peuninah ôn nyang reulöh atawa meuganda lheuëh neupinah. Droëneuh nyang mat tanggông jaweuëb keu neupeupaseuti meunyo hubông laju teusambông u ôn nyang patôt.\n\nBeu neuingat that meunyo ôn '''h’an''' jan geupeupinah meunyo ka na ôn nyang geunguy nan barô, keucuali meunyo ôn nyan soh atawa nakeuh ôn peuninah ngön hana riwayat andam. Nyoë areutijih Droëneuh jeuët neu’ubah nan ôn keulayi lagèë söt meunyo Droëneuh neupeugöt seunalah, ngön Droëneuh h‘an jeuët neutimpa ôn nyang ka na.\n'''INGAT'''\nNyoë jeuët geupeuakébat neu’ubah nyang h’an neuduga ngön kreuëh ngön bacah keu ôn nyang meuceuhu. Neupeupaseuti Droëneuh meuphôm akébat nibak buët nyoë sigohlom neulanjut.",
+ "movepagetalktext": "Ôn peugah haba nyang na hubôngan euntreuk teupinah keudroë '''keucuali meunyo:'''\n\n*Saboh ôn peugah haba nyang hana soh ka na di yup nan barô, atawa\n*Droëneuh hana neubôh tanda cunténg bak kutak di yup nyoë\n\nLam masalah nyoë, meunyo neuhawa, Droëneuh jeuët neupeupinah atawa neupeugabông ôn keudroë.",
+ "movearticle": "Peupinah laman:",
+ "newtitle": "U nan barô:",
+ "move-watch": "Kalön laman nyoë",
+ "movepagebtn": "Peupinah laman",
+ "pagemovedsub": "Peupinah meuhasé",
+ "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.",
+ "movetalk": "Peupinah ôn peugah haba nyang na hubôngan.",
+ "movelogpage": "Log pinah",
+ "movereason": "Choë:",
+ "revertmove": "peuriwang",
+ "export": "Peuteubiët laman",
+ "allmessages": "Peusan sistem",
+ "allmessagesname": "Nan",
+ "allmessagesdefault": "Naseukah pukok",
+ "thumbnail-more": "Peurayek",
+ "thumbnail_error": "Salah bak peugöt gamba cut: $1",
+ "importlogpage": "Log impor",
+ "tooltip-pt-userpage": "Laman ureuëng ngui droëneuh",
+ "tooltip-pt-mytalk": "Laman marit droëneuh",
+ "tooltip-pt-preferences": "Geunalak",
+ "tooltip-pt-watchlist": "Dapeuta laman nyang lônkalön",
+ "tooltip-pt-mycontris": "Dapeuta beuneuri Droëneuh",
+ "tooltip-pt-login": "Droëneuh geupadan keu tamong log, bah pih nyan hana geupeuwajéb.",
+ "tooltip-pt-logout": "Teubiët",
+ "tooltip-ca-talk": "Marit laman asoë",
+ "tooltip-ca-edit": "Droëneuh jeuët neuandam laman nyoë. Neungui tumbôi eu dilèë sigoh neukeubah.",
+ "tooltip-ca-addsection": "Puphôn beunagi barô",
+ "tooltip-ca-viewsource": "Laman nyoë geulindông.\nDroëneuh jeuët neu’eu nèjih mantöng.",
+ "tooltip-ca-history": "Geunantoë awai nibak laman nyoë",
+ "tooltip-ca-protect": "Peulindông laman nyoë",
+ "tooltip-ca-delete": "Sampôh laman nyoë",
+ "tooltip-ca-move": "Pupinah laman nyoë",
+ "tooltip-ca-watch": "Tamah laman nyoë u dapeuta kalön droëneuh",
+ "tooltip-ca-unwatch": "Sampôh laman nyoë nibak dapeuta kalön droëneuh",
+ "tooltip-search": "Mita {{SITENAME}}",
+ "tooltip-search-go": "Mita saboh laman ngon nan nyang peureuséh lagèë nyoë meunyo na",
+ "tooltip-search-fulltext": "Mita laman nyang na asoë lagèë nyoë",
+ "tooltip-p-logo": "Saweuë ôn keuë",
+ "tooltip-n-mainpage": "Saweuë ôn keuë",
+ "tooltip-n-mainpage-description": "Saweuë ôn keuë",
+ "tooltip-n-portal": "Bhaih buët, peuë nyang jeuët neupubuët, pat keu mita sipeuë hai",
+ "tooltip-n-currentevents": "Mita haba barô",
+ "tooltip-n-recentchanges": "Dapeuta neuubah barô lam wiki.",
+ "tooltip-n-randompage": "Peudeuih laman baranggari",
+ "tooltip-n-help": "Bak mita bantu.",
+ "tooltip-t-whatlinkshere": "Dapeuta ban dum laman wiki nyang mupawôt keunoë",
+ "tooltip-t-recentchangeslinked": "Neuubah barô lam laman nyang meupawôt nibak laman nyoë",
+ "tooltip-feed-rss": "Umpeuën RSS keu laman nyoë",
+ "tooltip-feed-atom": "Umpeuën Atom keu laman nyoë",
+ "tooltip-t-contributions": "Dapeuta beuneuri ureuëng ngui nyoë",
+ "tooltip-t-emailuser": "Peu'ét surat-e keu ureuëng ngui nyoë",
+ "tooltip-t-upload": "Peutamong beureukaih",
+ "tooltip-t-specialpages": "Dapeuta ban dum laman kusuih",
+ "tooltip-t-print": "Seunalén rakam laman nyoë",
+ "tooltip-t-permalink": "Peunawôt teutap keu geunantoë laman nyoë",
+ "tooltip-ca-nstab-main": "Eu laman asoë",
+ "tooltip-ca-nstab-user": "Eu laman ureuëng ngui",
+ "tooltip-ca-nstab-special": "Nyoë nakeuh laman kusuih nyang h’an jeuët geuandam.",
+ "tooltip-ca-nstab-project": "Eu laman buët",
+ "tooltip-ca-nstab-image": "Eu laman beureukaih",
+ "tooltip-ca-nstab-template": "Eu seunaleuëk",
+ "tooltip-ca-nstab-help": "Eu laman beunantu",
+ "tooltip-ca-nstab-category": "Eu laman kawan",
+ "tooltip-minoredit": "Bôh tanda keu nyoë sibagoë andam bacut",
+ "tooltip-save": "Keubah neuubah Droëneuh",
+ "tooltip-preview": "Peuleumah neuubah Droëneuh, neungui nyoë sigohlom neukeubah!",
+ "tooltip-diff": "Peuleumah neuubah nyang ka Droëneuh peugöt",
+ "tooltip-compareselectedversions": "Ngiëng bida nibak duwa geunantoë laman nyang teupiléh",
+ "tooltip-watch": "Tamah laman nyoë u dapeuta kalön droëneuh",
+ "tooltip-rollback": "Peuriwang neu’andam-neu’andam bak laman nyoë u nyang tuléh keuneulheuëh lam sigo teugön",
+ "tooltip-undo": "Peuriwang geunantoë nyoë ngön peuhah plôk neu’andam ngön cara eu dilèë. Choë jeuët geupeutamah bak plôk ehtisa.",
+ "tooltip-summary": "Pasoë éhtisa paneuk",
+ "interlanguage-link-title": "$1 – $2",
+ "pageinfo-toolboxlink": "Teuneurang laman",
+ "previousdiff": "← Bida awai",
+ "nextdiff": "Geunantoë lheuëh nyan →",
+ "file-info-size": "$1 × $2 piksel, rayek beureukaih: $3, MIME jeunèh: $4",
+ "file-nohires": "Hana resolusi nyang leubèh manyang.",
+ "svg-long-desc": "Beureukah SVG, nominal $1 x $2 piksel, rayek beureukah: $3",
+ "show-big-image": "Beureukaih aseuli",
+ "newimages": "Beureukah barô",
+ "ilsubmit": "Mita",
+ "bad_image_list": "Beuntukjih lagèë di miyub nyoë:\n\nCit buté dapeuta (baréh nyang geupeuphôn ngon tanda *) nyang geukira. Hubông phôn bak saboh baréh beukeuh hubông u beureukaih nyang brôk.\nHubông-hubông lheuëh nyan bak baréh nyang saban geukira sibagoë keucuali, nakeuh teunuléh nyang jeuët peuleumah beureukaih nyan.",
+ "metadata": "Metadata",
+ "metadata-help": "Beureukah nyoë na beurita tambahan nyang mungkén geutamah lé kamèra digital atawa peuminday nyang geunguy keu peugöt atawa peudigitalisasi beureukah. Meunyo beureukah nyoë ka geu’ubah, tapeusili nyang na mungkén hana seucara peunoh meurefleksikan beurita nibak gamba nyang ka geu’ubah nyoë.",
+ "metadata-expand": "Peuleumah tapeusili teunamah",
+ "metadata-collapse": "Peusom tapeusili teunamah",
+ "metadata-fields": "Bideuëng mètadata gamba nyang na lam peusan nyoë keuneuk geupasoë bak tampilan halaman gamba 'oh watèë tabel mètadata geutôp.\nData nyang la'én eunteuk teupeusom keudroë.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+ "watchlistall2": "ban dum",
+ "namespacesall": "ban dum",
+ "monthsall": "ban dum",
+ "recreate": "Peugöt ulang",
+ "confirm_purge_button": "Ka göt",
+ "confirm-purge-top": "Sampôh peuniyôh laman nyoë?",
+ "confirm-watch-button": "Ka göt",
+ "confirm-watch-top": "Tamah laman nyoë u dapeuta keunalön droëneuh?",
+ "confirm-unwatch-button": "Ka göt",
+ "confirm-unwatch-top": "Sampôh laman nyoë nibak dapeuta keunalön droëneuh?",
+ "imgmultipageprev": "← laman sigohlomjih",
+ "autosumm-new": "Geupeugöt laman ngön asoë '$1'",
+ "watchlisttools-view": "Peudeuh neuubah meukaw'èt",
+ "watchlisttools-edit": "Peudeuh ngön andam dapeuta keunalön",
+ "watchlisttools-raw": "Andam dapeuta keunalön meuntah",
+ "duplicate-defaultsort": "'''Ingat:''' Gunci meuurot pukok \"$2\" jipeuhiro gunci meuurot pukok \"$1\" sigohlomjih.",
+ "version": "Curak",
+ "fileduplicatesearch-submit": "Mita",
+ "specialpages": "Laman kusuih",
+ "specialpages-note": "* Laman kusuih biasa.\n* <span class=\"mw-specialpagerestricted\">Laman kusuih geutheun.</span>",
+ "specialpages-group-maintenance": "Beuneuri thèë plara",
+ "specialpages-group-other": "La'én-la'én",
+ "specialpages-group-login": "Tamöng / dapeuta",
+ "specialpages-group-changes": "Neuubah barô ngön log",
+ "specialpages-group-media": "Beuneuri thèë ngön pumasoë beureukaih",
+ "specialpages-group-users": "Ureuëng ngui ngön khut ureuëng ngui",
+ "specialpages-group-highuse": "Laman kayém geusaweuë",
+ "specialpages-group-pages": "Dapeuta laman",
+ "specialpages-group-pagetools": "Alat laman",
+ "specialpages-group-wiki": "Data ngön alat",
+ "specialpages-group-redirects": "Mita ngön pupinah",
+ "specialpages-group-spam": "Alat spam",
+ "blankpage": "Laman soh",
+ "intentionallyblankpage": "Laman nyoë geusaja peusoh",
+ "external_image_whitelist": "#Neupubiyeue bareh nyoe lagee na<pre>\n#Neunguy bagian-bagian ekspresi regular (bak bagian antara // mantong) di yup nyoe\n#Bagian-bagian nyoe eunteuk geupupaih ngon URL nibak gamba-gamba luwa (nyang geupeuhubong lansong)\n#Fragmen nyang paih eunteuk geupeuleumah sibagoe gamba, seuhjih keu link mantong\n#Bareh nyang geupuphon ngon # eunteuk geupeujeuet keu bareh beunalah\n#Nyoe hana geupubida haraih rayek ngon ubeut\n#Neupeuduek ban dum beunagi ekspresi biasa di yup bareh nyoe. Neupubiyeue bareh nyoe lagee na</pre>",
+ "tags": "Tag neuubah nyang sah",
+ "tag-filter": "Saréng [[Special:Tags|tag]]:",
+ "tag-filter-submit": "Saréng",
+ "searchsuggest-search": "Mita",
+ "duration-seconds": "{{PLURAL:$1|deutik}}",
+ "duration-minutes": "{{PLURAL:$1|minèt}}",
+ "duration-hours": "{{PLURAL:$1|jeum}}",
+ "duration-days": "{{PLURAL:$1|uroë}}",
+ "duration-weeks": "{{PLURAL:$1|jeumeu'at}}",
+ "duration-years": "{{PLURAL:$1|thôn}}",
+ "duration-decades": "{{PLURAL:$1|dekade}}",
+ "duration-centuries": "{{PLURAL:$1|abad}}",
+ "duration-millennia": "{{PLURAL:$1|milenium}}"
+}
diff --git a/languages/i18n/aeb.json b/languages/i18n/aeb.json
new file mode 100644
index 00000000..32b7b8c5
--- /dev/null
+++ b/languages/i18n/aeb.json
@@ -0,0 +1,922 @@
+{
+ "@metadata": {
+ "authors": [
+ "Abanima",
+ "Csisc",
+ "Kuwaity26",
+ "Malekbr",
+ "아라",
+ "Aħmedbaɛl"
+ ]
+ },
+ "tog-underline": "ضع خطا تحت الوصلات:",
+ "tog-hideminor": "أخف التعديلات الطفيفة في أحدث التغييرات",
+ "tog-hidepatrolled": "أخف التعديلات المراجعة في أحدث التغييرات",
+ "tog-newpageshidepatrolled": "أخف الصفحات المراجعة من قائمة الصفحات الجديدة",
+ "tog-extendwatchlist": "مدد قائمة المراقبة لعرض كل التغييرات، وليس الأحدث فقط",
+ "tog-usenewrc": ")جمّع التعديلات حسب الصفحة في أحدث التغييرات وقائمة المراقبة (يتطلب جافاسكربت",
+ "tog-numberheadings": "رقم العناوين تلقائيا",
+ "tog-showtoolbar": "أظهر شريط التحرير (يتطلب جافاسكربت)",
+ "tog-editondblclick": "عدل الصفحات عند الضغط المزدوج (جافاسكربت)",
+ "tog-editsectiononrightclick": "فعل تعديل الأقسام بواسطة كبسة الفأرة اليمين على عناوين الأقسام (جافاسكريبت)",
+ "tog-watchcreations": "أضف الصفحات التي أنشئها والملفات التي أرفعها إلى قائمة مراقبتي.",
+ "tog-watchdefault": "أضف الصفحات والملفات التي أعدلها إلى قائمة مراقبتي",
+ "tog-watchmoves": "أضف الصفحات والملفات التي أنقلها إلى قائمة مراقبتي",
+ "tog-watchdeletion": "أضف الصفحات والملفات التي أحذفها إلى قائمة مراقبتي",
+ "tog-minordefault": "علم كل التعديلات طفيفة افتراضيا",
+ "tog-previewontop": "أظهر العرض المسبق قبل صندوق التحرير",
+ "tog-previewonfirst": "أظهر معاينة مع أول تعديل",
+ "tog-enotifwatchlistpages": "أرسل لي رسالة إلكترونية عندما تُغيّر صفحة أو ملف في قائمة مراقبتي",
+ "tog-enotifusertalkpages": "أرسل لي رسالة إلكترونية عندما تعدل صفحة نقاشي",
+ "tog-enotifminoredits": "أرسل لي رسالة إلكترونية عن التعديلات الطفيفة للصفحات والملفات أيضا",
+ "tog-enotifrevealaddr": "أظهر عنوان بريدي الإلكتروني في رسائل الإخطار",
+ "tog-shownumberswatching": "اعرض عدد المستخدمين المراقبين",
+ "tog-oldsig": "التوقيع الحالي:",
+ "tog-fancysig": "عامل التوقيع كنص ويكي (بدون وصلة أوتوماتيكية)",
+ "tog-uselivepreview": "استخدم الاستعراض السريع (جافاسكريبت) (تجريبي)",
+ "tog-forceeditsummary": "نبهني عند إدخال ملخص تعديل فارغ",
+ "tog-watchlisthideown": "أخف تعديلاتي من قائمة المراقبة",
+ "tog-watchlisthidebots": "أخف تعديلات البوت من قائمة المراقبة",
+ "tog-watchlisthideminor": "أخف التعديلات الطفيفة من قائمة المراقبة",
+ "tog-watchlisthideliu": "أخف تعديلات المستخدمين المسجلين من قائمة المراقبة",
+ "tog-watchlisthideanons": "أخف تعديلات المستخدمين المجهولين من قائمة المراقبة",
+ "tog-watchlisthidepatrolled": "أخف التعديلات المراجعة من قائمة المراقبة",
+ "tog-ccmeonemails": "أرسل لي نسخا من رسائل البريد الإلكتروني التي أرسلها للمستخدمين الآخرين",
+ "tog-diffonly": "لا تعرض محتوى الصفحة أسفل الفروقات",
+ "tog-showhiddencats": "أظهر التصنيفات المخفية",
+ "tog-norollbackdiff": "أزل الفرق بعد القيام باسترجاع",
+ "underline-always": "دائما",
+ "underline-never": "أبدا",
+ "underline-default": "تبعا لإعدادات المتصفح",
+ "editfont-style": "نمط خط منطقة التحرير:",
+ "editfont-default": "تبعا لإعدادات المتصفح",
+ "editfont-monospace": "خط ثابت العرض",
+ "editfont-sansserif": "خط بلا زوائد",
+ "editfont-serif": "خط بزوائد",
+ "sunday": "ela7ad",
+ "monday": "elithnaine",
+ "tuesday": "etholatha",
+ "wednesday": "elirbi3a",
+ "thursday": "el5amis",
+ "friday": "eljom3a",
+ "saturday": "essibt",
+ "sun": "ela7ad",
+ "mon": "el ithnaine",
+ "tue": "ethlath",
+ "wed": "elirb3a",
+ "thu": "el5mis",
+ "fri": "ejjom3a",
+ "sat": "essibt",
+ "january": "Janvi",
+ "february": "Fivri",
+ "march": "Mars",
+ "april": "Avril",
+ "may_long": "Mai",
+ "june": "Juin",
+ "july": "Juilia",
+ "august": "Août",
+ "september": "Septembre",
+ "october": "Octobre",
+ "november": "Novembre",
+ "december": "Décembre",
+ "january-gen": "Janvi",
+ "february-gen": "Fivri",
+ "march-gen": "Mars",
+ "april-gen": "Avril",
+ "may-gen": "Mai",
+ "june-gen": "Juin",
+ "july-gen": "Juilia",
+ "august-gen": "Août",
+ "september-gen": "Septembre",
+ "october-gen": "Octobre",
+ "november-gen": "Novembre",
+ "december-gen": "Décembre",
+ "jan": "Janv",
+ "feb": "Fivr",
+ "mar": "Mars",
+ "apr": "Avrl",
+ "may": "Mai",
+ "jun": "Juin",
+ "jul": "Juil",
+ "aug": "Août",
+ "sep": "Sept",
+ "oct": "Oct",
+ "nov": "Nov",
+ "dec": "Déc",
+ "pagecategories": "{{PLURAL:Catégorie weħed|Zouz catégories|$1 catégories|$1 en catégorie}}",
+ "category_header": "صفحات تصنيف \"$1\"",
+ "subcategories": "التصنيفات الفرعية",
+ "category-media-header": "الوسائط في التصنيف \"$1\"",
+ "category-empty": "''هذا التصنيف لا يحتوي حاليا على صفحات أو وسائط.''",
+ "hidden-categories": "{{PLURAL:Catégorie mkhabia waħda|Zouz catégories mkhabbin|$1 catégories mkhabbin|$1 en catégorie mkhabia}}",
+ "hidden-category-category": "تصنيفات مخفية",
+ "category-subcat-count": "{{PLURAL:$2|لا تصانيف فرعية في هذا التصنيف|هذا التصنيف فيه التصنيف الفرعي التالي فقط.|هذا التصنيف فيه {{PLURAL:$1||هذا التصنيف الفرعي|هذين التصنيفين الفرعيين|هذه ال$1 تصانيف الفرعية|هذه ال$1 تصنيفا فرعيا|هذه ال$1 تصنيف فرعي}}، من إجمالي $2.}}",
+ "category-subcat-count-limited": "هذا التصنيف فيه {{PLURAL:$1||التصنيف الفرعي التالي|التصنيفين الفرعيين التاليين|$1 تصانيف فرعية تالية|$1 تصنيفا فرعيا تاليا|$1 تصنيف فرعي تالي}}.",
+ "category-article-count": "{{PLURAL:$2|لا يحتوي هذا التصنيف أي صفحات.|هذا التصنيف يحتوي على الصفحة التالية فقط.|{{PLURAL:$1||الصفحة التالية|الصفحتان التاليتان|ال$1 صفحات التالية|ال$1 صفحة التالية|ال$1 صفحة التالية}} في هذا التصنيف، من إجمالي $2.}}",
+ "category-article-count-limited": "{{PLURAL:$1||الصفحة التالية|الصفحتان التاليتان|ال$1 صفحات التالية|ال$1 صفحة التالية|ال$1 صفحة التالية}} في التصنيف الحالي.",
+ "category-file-count": "{{PLURAL:$2|لا يحتوي هذا التصنيف أي صفحات.|هذا التصنيف يحتوي على الصفحة التالية فقط.|{{PLURAL:$1||الصفحة التالية|الصفحتان التاليتان|ال$1 صفحات التالية|ال$1 صفحة التالية|ال$1 صفحة التالية}} في هذا التصنيف، من إجمالي $2.}}",
+ "category-file-count-limited": "{{PLURAL:$1|الملف التالي|الملفان التاليان|ال$1 ملفات التالية|ال$1 ملفًا تاليًا|ال$1 ملف تالٍ}} في التصنيف الحالي.",
+ "listingcontinuesabbrev": "متابعة",
+ "index-category": "صفحات مفهرسة",
+ "noindex-category": "صفحات غير مفهرسة",
+ "broken-file-category": "صفحات تحتوي وصلات ملفات معطوبة",
+ "about": "عن",
+ "article": "صفحة محتوى",
+ "newwindow": "(تفتح في نافذة جديدة)",
+ "cancel": "ifsa5",
+ "moredotdotdot": "المزيد...",
+ "mypage": "صفحتي",
+ "mytalk": "نقاشي",
+ "anontalk": "النقاش لعنوان الأيبي هذا",
+ "navigation": "Navigui",
+ "and": "&#32;و",
+ "qbfind": "جد",
+ "qbbrowse": "ara",
+ "qbedit": "modifi el page (baddelha)",
+ "qbpageoptions": "هذه الصفحة",
+ "qbmyoptions": "صفحاتي",
+ "faq": "الأسئلة الأكثر تكرارا",
+ "faqpage": "Project:أسئلة متكررة",
+ "actions": "Aεmel",
+ "namespaces": "El espaces de noms",
+ "variants": "Anweε",
+ "errorpagetitle": "ghalath",
+ "returnto": "ارجع إلى $1.",
+ "tagline": "Fima ykhoss {{SITENAME}}",
+ "help": "Mouεawna",
+ "search": "Lawwej",
+ "searchbutton": "Lawwej",
+ "go": "اذهب",
+ "searcharticle": "اذهب",
+ "history": "teri5 el milaf",
+ "history_short": "Historique",
+ "updatedmarker": "تم تحديثها منذ زيارتي الأخيرة",
+ "printableversion": "Copie bech tetetbaε",
+ "permalink": "Lien deyem",
+ "print": "itthba3",
+ "view": "عرض",
+ "edit": "Baddel",
+ "create": "أنشئ",
+ "editthispage": "modifi hal page",
+ "create-this-page": "أنشئ هذه الصفحة",
+ "delete": "احذف",
+ "deletethispage": "احذف هذه الصفحة",
+ "undelete_short": "استرجاع {{PLURAL:$1|تعديل واحد|تعديلين|$1 تعديلات|$1 تعديل|$1 تعديلا}}",
+ "viewdeleted_short": "عرض {{PLURAL:$1|تعديل محذوف|$1 تعديلات محذوفة}}",
+ "protect": "احم",
+ "protect_change": "غير",
+ "protectthispage": "احم هذه الصفحة",
+ "unprotect": "غير الحماية",
+ "unprotectthispage": "غير حماية هذه الصفحة",
+ "newpage": "صفحات جديدة",
+ "talkpage": "ناقش هذه الصفحة",
+ "talkpagelinktext": "Ħdith",
+ "specialpage": "صفحة خاصة",
+ "personaltools": "Outils mteεek",
+ "articlepage": "عرض صفحة المحتوى",
+ "talk": "Ħdith",
+ "views": "Affichages",
+ "toolbox": "Outils",
+ "userpage": "عرض صفحة المستخدم",
+ "projectpage": "عرض صفحة المشروع",
+ "imagepage": "عرض صفحة الملف",
+ "mediawikipage": "عرض صفحة الرسالة",
+ "templatepage": "عرض صفحة القالب",
+ "viewhelppage": "عرض صفحة المساعدة",
+ "categorypage": "عرض صفحة التصنيف",
+ "viewtalkpage": "عرض النقاش",
+ "otherlanguages": "Bloughat okhra",
+ "redirectedfrom": "(تم التحويل من $1)",
+ "redirectpagesub": "صفحة تحويل",
+ "lastmodifiedat": "Ekher tabdil elhassafħa nhar $2, mεa $1.",
+ "viewcount": "{{PLURAL:$1|لم تعرض هذه الصفحة أبدا|تم عرض هذه الصفحة مرة واحدة|تم عرض هذه الصفحة مرتين|تم عرض هذه الصفحة $1 مرات|تم عرض هذه الصفحة $1 مرة}}.",
+ "protectedpage": "صفحة محمية",
+ "jumpto": "Emchi el:",
+ "jumptonavigation": "Navigation",
+ "jumptosearch": "Lawwej",
+ "view-pool-error": "عذرا، الخوادم منهكة حاليا.\nيحاول مستخدمون كثر الوصول إلى هذه الصفحة.\nمن فضلك انتظر قليلا قبل أن تحاول الوصول إلى هذه الصفحة مجددا.\n\n$1",
+ "pool-timeout": "انتهاء الانتظار للقفل",
+ "pool-queuefull": "طابور الاقتراع ملئ",
+ "pool-errorunknown": "خطأ غير معروف",
+ "aboutsite": "Fima ykhoss {{SITENAME}}",
+ "aboutpage": "Project:Fima ykhoss",
+ "copyright": "المحتوى متوفر تحت $1.",
+ "copyrightpage": "{{ns:project}}:حقوق النسخ",
+ "currentevents": "Laħdeth mtaε tawa",
+ "currentevents-url": "Project:Laħdeth mtaε tawa",
+ "disclaimers": "Ɛadam mas'ouliya",
+ "disclaimerpage": "Project:Ɛadam mas'ouliya bsifa εamma",
+ "edithelp": "مساعدة التحرير",
+ "mainpage": "Elpage principale",
+ "mainpage-description": "Elpage principale",
+ "policy-url": "Project:سياسة",
+ "portal": "Mojtamaε",
+ "portal-url": "Project:Mojtamaε",
+ "privacy": "Syeset elconfidentialité",
+ "privacypage": "Project:Syeset elconfidentialité",
+ "badaccess": "خطأ في السماح",
+ "badaccess-group0": "ليس من المسموح لك تنفيذ الفعل الذي طلبته.",
+ "badaccess-groups": "الفعل الذي طلبته مقصور على المستخدمين في {{PLURAL:$2||مجموعة|واحدة من مجموعتي|واحدة من مجموعات}}: $1.",
+ "versionrequired": "تلزم نسخة $1 من ميدياويكي",
+ "versionrequiredtext": "تلزم النسخة $1 من ميدياويكي لاستعمال هذه الصفحة. انظر [[Special:Version|صفحة النسخة]]",
+ "ok": "ok",
+ "retrievedfrom": "Tekhdhet men \"$1\"",
+ "youhavenewmessages": "توجد لديك $1 ($2).",
+ "youhavenewmessagesmulti": "لديك رسائل جديدة على $1",
+ "editsection": "Baddel essafħa",
+ "editold": "Baddel",
+ "viewsourceold": "اعرض المصدر",
+ "editlink": "modifi el page (baddelha)",
+ "viewsourcelink": "Warri essource",
+ "editsectionhint": "Baddel essection: $1",
+ "toc": "Contenu",
+ "showtoc": "اعرض",
+ "hidetoc": "أخف",
+ "collapsible-collapse": "اطو",
+ "collapsible-expand": "وسع",
+ "thisisdeleted": "أأعرض أو أسترجع $1؟",
+ "viewdeleted": "أأعرض $1؟",
+ "restorelink": "{{PLURAL:$1|$1 تعديل محذوف|تعديلا واحدا محذوفا|تعديلين محذوفين|$1 تعديلات محذوفة|$1 تعديلا محذوفا|$1 تعديلا محذوفا}}",
+ "feedlinks": "التغذية:",
+ "feed-invalid": "نوع اشتراك التلقيم غير صحيح.",
+ "feed-unavailable": "التلقيمات غير متوفرة",
+ "site-rss-feed": "$1 تلقيم أر إس إس",
+ "site-atom-feed": "Flux Atom mtaε $1",
+ "page-rss-feed": "\"$1\" تلقيم أر إس إس",
+ "page-atom-feed": "$1 تلقيم أتوم",
+ "red-link-title": "$1 (Essafħa mouch mawjouda)",
+ "sort-descending": "ترتيب تنازلي",
+ "sort-ascending": "ترتيب تصاعدي",
+ "nstab-main": "Safħa",
+ "nstab-user": "صفحة مستخدم",
+ "nstab-media": "صفحة وسيط",
+ "nstab-special": "Safħa spéciale",
+ "nstab-project": "صفحة مشروع",
+ "nstab-image": "Fichier",
+ "nstab-mediawiki": "رسالة",
+ "nstab-template": "قالب",
+ "nstab-help": "صفحة مساعدة",
+ "nstab-category": "تصنيف",
+ "nosuchaction": "لا يوجد فعل كهذا",
+ "nosuchactiontext": "الفعل المحدد بواسطة المسار غير صحيح.\nربما تكون قد كتبت المسار بطريقة غير صحيحة، أو اتبعت وصلة غير صحيحة.\nهذا ربما يشير أيضا إلى علة في {{SITENAME}}.",
+ "nosuchspecialpage": "لا توجد صفحة خاصة بهذا الاسم",
+ "nospecialpagetext": "<strong>لقد طلبت صفحة خاصة غير صحيحة.</strong>\n\nقائمة بالصفحات الخاصة الصحيحة يمكن إيجادها في [[Special:SpecialPages|{{int:specialpages}}]].",
+ "error": "ghalath",
+ "databaseerror": "خطأ في قاعدة البيانات",
+ "laggedslavemode": "'''تحذير:''' الصفحة قد لا تحتوي على أحدث التحديثات.",
+ "readonly": "قاعدة البيانات مغلقة",
+ "enterlockreason": "أدخل سببا للغلق، متضمنا تقديرا لوقت رفع الغلق",
+ "readonlytext": "قاعدة البيانات مغلقة حاليا أمام المدخلات الجديدة والتعديلات الأخرى، السبب غالبا ما يكون الصيانة، وستعود قاعدة البيانات للوضع الطبيعي قريبا.\n\nالإداري الذي أغلق قاعدة البيانات أعطى التفسير التالي: $1",
+ "missing-article": "Elbase de données malqatech ettexte mtaε essafħa elli supposée talqaha, welli esmha \"$1\" $2.\n\nHedha elli ysir elεada waqtelli tħel farq qdim walla lien mtaε l'historique mtaε safħa tnaħħat.\n\nIdha ken mouch hedheka li sar, rak momken lqit mochkla fel programme.\nAman qoul elweħeb mel les [[Special:ListUsers/sysop|administrateurs]], waεtih ellien elli ħabit temchilou.",
+ "missingarticle-rev": "(رقم المراجعة: $1)",
+ "missingarticle-diff": "(فرق: $1، $2)",
+ "readonly_lag": "تم إغلاق قاعدة البيانات تلقائيا حتى تستطيع الخواديم التابعة ملاحقة الخادوم الرئيسي",
+ "internalerror": "خطأ داخلي",
+ "internalerror_info": "خطأ داخلي: $1",
+ "filecopyerror": "لم يمكن نسخ الملف \"$1\" إلى \"$2\".",
+ "filerenameerror": "لم يمكن إعادة تسمية الملف \"$1\" إلى \"$2\".",
+ "filedeleteerror": "لم يمكن حذف الملف \"$1\".",
+ "directorycreateerror": "لم يمكن إنشاء المجلد \"$1\".",
+ "filenotfound": "لم يمكن إيجاد الملف \"$1\".",
+ "unexpected": "قيمة غير متوقعة: \"$1\"=\"$2\".",
+ "formerror": "خطأ: لم يمكن تنفيذ الاستمارة",
+ "badarticleerror": "لا يمكن إجراء هذا الفعل على هذه الصفحة.",
+ "cannotdelete": "تعذر حذف الصفحة أو الملف \"$1\".\nربما حذفها شحص آخر.",
+ "cannotdelete-title": "لا يمكن حذف الصفحة \"$1\"",
+ "delete-hook-aborted": "faskhan wa9fou flash.\nmahouwech mobarrar",
+ "badtitle": "عنوان سيء",
+ "badtitletext": "عنوان الصفحة المطلوب إما غير صحيح أو فارغ، وربما الوصلة بين اللغات أو بين المشاريع خاطئة.\nومن الممكن وجود رموز لا تصلح للاستخدام في العناوين.",
+ "perfcached": "البيانات التالية مختزنة وقد لا تكون محدثة. {{PLURAL:$1||نتيجة واحدة|نتيجتان|$1 نتائج|$1 نتيجة}} على الأكثر {{PLURAL:$1||مختزنة|مختزنتان|مختزنة}}.",
+ "perfcachedts": "البيانات التالية مختزنة وكان آخر تحديث لها في $1. {{PLURAL:$4||نتيجة واحدة|نتيجتان|$4 نتائج|$4 نتيجة}} على الأكثر {{PLURAL:$4||مختزنة|مختزنتان|مختزنة}}.",
+ "querypage-no-updates": "التحديثات لهذه الصفحة معطلة حاليا.\nالبيانات هنا لن يتم تحديثها حاليا.",
+ "viewsource": "اعرض المصدر",
+ "viewsource-title": "إظهار مصدر $1",
+ "actionthrottled": "لا يمكن عمل المزيد من هذا الفعل",
+ "actionthrottledtext": "كإجراء ضد السبام، أنت ممنوع من إجراء هذا الفعل عدد كبير من المرات في فترة زمنية قصيرة، ولقد تجاوزت هذا الحد.\nمن فضلك حاول مرة ثانية خلال عدة دقائق.",
+ "protectedpagetext": "هذه الصفحة تمت حمايتها لمنع التعديل.",
+ "viewsourcetext": "يمكنك رؤية ونسخ مصدر هذه الصفحة:",
+ "viewyourtext": "يمكنك رؤية ونسخ مصدر ''' تعديلاتك ''' في هذه الصفحة:",
+ "protectedinterface": "هذه الصفحة توفر نص الواجهة للبرنامج، وهي مقفلة لمنع التخريب.",
+ "editinginterface": "'''تحذير:''' أنت تقوم بتحرير صفحة تستخدم في الواجهة النصية للبرنامج.\nسوف تؤثر التغييرات على هذه الصفحة على مظهر واجهة المستخدم للمستخدمين الآخرين.\nللترجمات، من فضلك استخدم مشروع ترجمة ميدياويكي [//translatewiki.net/wiki/Main_Page?setlang=ar translatewiki.net].",
+ "cascadeprotected": "تمت حماية هذه الصفحة من التعديل لأنها مدمجة في {{PLURAL:$1||الصفحة التالية، والتي|الصفحتين التاليتين، واللتين|الصفحات التالية، والتي}} تم استعمال خاصية \"حماية الصفحات المدمجة\" {{PLURAL:$1||بها|بهما|بها}}:\n$2",
+ "namespaceprotected": "لا تمتلك الصلاحية لتعديل الصفحات في نطاق '''$1'''.",
+ "customcssprotected": "أنت لا تمتلك السماح لتعديل صفحة الCSS هذه، لأنها تحتوي على الإعدادات الشخصية لمستخدم آخر.",
+ "customjsprotected": "أنت لا تمتلك السماح لتعديل صفحة الجافاسكريبت هذه، لأنها تحتوي على الإعدادات الشخصية لمستخدم آخر.",
+ "ns-specialprotected": "الصفحات الخاصة لا يمكن تعديلها.",
+ "titleprotected": "{{GENDER:$1|حمى|حمت}} [[User:$1|$1]] هذا العنوان من الإنشاء.\nالسبب المعطى هو ''$2''.",
+ "filereadonlyerror": "تعذر تعديل الملف \"$1\" لأن مستودع الملف \"$2\" في وضع القراءة فقط. \n\nالمدير الذي قام بغلقه قدم التفسير التالي: \"$3\".",
+ "invalidtitle-knownnamespace": "عنوان غير صالح في النطاق «$2» مع نص «$3»",
+ "invalidtitle-unknownnamespace": "عنوان غير صالح ذو نطاق غير معروف رقم $1 ونص «$2»",
+ "exception-nologin": "غير مسجل الدخول",
+ "exception-nologin-text": "hedhi ess'af7a wa 2ella el action te7tej mennek bech etloginni il hedha el wiki",
+ "virus-badscanner": "ضبط سيء: ماسح فيروسات غير معروف: ''$1''",
+ "virus-scanfailed": "فشل المسح (كود $1)",
+ "virus-unknownscanner": "مضاد فيروسات غير معروف:",
+ "logouttext": "'''أنت الآن غير مسجل الدخول.'''\n\nتستطيع المتابعة باستعمال {{SITENAME}} كمجهول، أو <span class='plainlinks'>[$1 الدخول مرة أخرى]</span> بنفس الاسم أو باسم آخر.\nمن الممكن أن ترى بعض الصفحات كما لو أنك مسجل الدخول، وذلك حتى تقوم بإفراغ الصفحات المختزنة في المتصفح لديك.",
+ "yourname": "اسم المستخدم:",
+ "yourpassword": "كلمة السر:",
+ "yourpasswordagain": "أعد كتابة كلمة السر:",
+ "remembermypassword": "تذكر دخولي على هذا الحاسوب (إلى {{PLURAL:$1||يوم واحد|يومين|$1 أيام|$1 يومًا|$1 يوم}} كحد أقصى)",
+ "yourdomainname": "نطاقك:",
+ "externaldberror": "هناك إما خطأ في دخول قاعدة البيانات الخارجية أو أنه غير مسموح لك بتحديث حسابك الخارجي.",
+ "login": "ادخل",
+ "nav-login-createaccount": "Connecti / aεmel compte",
+ "userlogin": "ادخل / أنشئ حسابا",
+ "userloginnocreate": "دخول",
+ "logout": "اخرج",
+ "userlogout": "خروج",
+ "notloggedin": "غير مسجل الدخول",
+ "nologin": "ألا تمتلك حسابا؟ '''$1'''.",
+ "nologinlink": "أنشئ حسابا",
+ "createaccount": "أنشئ حسابا",
+ "gotaccount": "تمتلك حسابا بالفعل؟ '''$1'''.",
+ "gotaccountlink": "ادخل",
+ "userlogin-resetlink": "أنسيت بيانات الولوج؟",
+ "createaccountmail": "بواسطة البريد الإلكتروني",
+ "createaccountreason": "السبب:",
+ "badretype": "كلمات السر التي أدخلتها لا تتطابق.",
+ "userexists": "اسم المستخدم الذي تم إدخاله مستعمل بالفعل.\nالرجاء اختيار اسم مختلف.",
+ "loginerror": "خطأ في الدخول",
+ "createaccounterror": "تعذر إنشاء حساب المستخدم: $1",
+ "nocookiesnew": "تم إنشاء حساب المستخدم، ولكنك لست مسجل الدخول بعد.\nيستخدم {{SITENAME}} كوكيز لتسجيل الدخول.\nلديك الكوكيز معطلة.\nمن فضلك فعلها، ثم سجل الدخول باسم المستخدم وكلمة السر الجديدين.",
+ "nocookieslogin": "يستخدم {{SITENAME}} الكوكيز لتسجيل الدخول.\nالكوكيز معطلة لديك.\nمن فضلك فعلها ثم حاول مرة أخرى.",
+ "nocookiesfornew": "لم يتم إنشاء حساب المستخدم، لأننا لم نستطع تأكيد مصدره. \nتأكد من أن ملفات تعريف الارتباط (الكوكيز) مفعلة عندك، ثم أعد تحميل الصفحة وحاول مرة أخرى.",
+ "noname": "لم تحدد اسم مستخدم صحيح.",
+ "loginsuccesstitle": "تم الدخول بشكل صحيح",
+ "loginsuccess": "'''لقد قمت بتسجيل الدخول ل{{SITENAME}} باسم \"$1\".'''",
+ "nosuchuser": "لا يوجد مستخدم بالاسم \"$1\".\nأسماء المستخدمين حساسة لحالة الحروف.\nتأكد من إملاء الاسم، أو [[Special:UserLogin/signup|قم بإنشاء حساب جديد]].",
+ "nosuchusershort": "لا يوجد مستخدم باسم $1\".\nتأكد من إملاء الاسم.",
+ "nouserspecified": "يجب عليك تحديد اسم مستخدم.",
+ "login-userblocked": "هذا المستخدم ممنوع. لا يسمح بالولوج.",
+ "wrongpassword": "كلمة السر التي أدخلتها غير صحيحة.\nمن فضلك حاول مرة أخرى.",
+ "wrongpasswordempty": "كلمة السر المدخلة كانت فارغة.\nمن فضلك حاول مرة أخرى.",
+ "passwordtooshort": "يجب أن تتكون كلمة السر على الأقل من {{PLURAL:$1|حرف واحد|حرفين|$1 حروف|$1 حرفا|$1 حرف}}.",
+ "password-name-match": "يجب أن تكون كلمة المرور مختلفة عن اسم المستخدم.",
+ "password-login-forbidden": "تم منع استخدام اسم المستخدم هذا وكلمة السر.",
+ "mailmypassword": "أرسل لي كلمة سر جديدة",
+ "passwordremindertitle": "كلمة سر مؤقتة جديدة ل{{SITENAME}}",
+ "passwordremindertext": "لقد طلب شخص ما (غالبا أنت، من عنوان الآيبي $1) كلمة سر جديدة ل{{SITENAME}} ($4).\nأنشئت كلمة سر مؤقتة للمستخدم \"$2\" وجعلت \"$3\".\nلو أن هذا ما تريده، فعليك أن تقوم بتسجيل الدخول واختيار كلمة سر جديدة الآن.\nسوف تنتهي مدة صلاحية كلمة سرك المؤقتة في غضون {{PLURAL:$5|أقل من يوم واحد|يوم واحد|يومين|$5 أيام|$5 يوما|$5 يوم}}.\n\nإذا كان الذي قام بهذا الطلب شخص آخر أو إذا تذكرت كلمة سرك ولا ترغب في تغييرها، فبإمكانك أن تتجاهل هذه الرسالة وأن تستمر في استخدام كلمة سرك القديمة.",
+ "noemail": "لا يوجد عنوان بريد إلكتروني مسجل للمستخدم \"$1\".",
+ "noemailcreate": "عليك تقديم عنوان بريد إلكتروني صالح",
+ "passwordsent": "تم إرسال كلمة سر جديدة إلى عنوان البريد الإلكتروني المسجل للمستخدم \"$1\".\nمن فضلك حاول تسجيل الدخول مرة ثانية بعد استلامها.",
+ "blocked-mailpassword": "تم منع عنوان الأيبي الخاص بك من التحرير، ولمنع التخريب لا يمكنك أن تستخدم خاصية استرجاع كلمة السر.",
+ "eauthentsent": "تم إرسال رسالة تأكيد إلكترونية إلى العنوان المسمى.\nحتى ترسل أي رسالة أخرى لذلك الحساب عليك أن تتبع التعليمات الواردة في الرسالة لتأكيد أن هذا الحساب هو لك بالفعل.",
+ "throttled-mailpassword": "تم بالفعل إرسال تذكير بكلمة السر، في ال{{PLURAL:$1||ساعة الماضية|ساعتين الماضيتين|$1 ساعات الماضية|$1 ساعة الماضية}}.\nلمنع التخريب، سيتم إرسال تذكير واحد كل {{PLURAL:$1||ساعة|ساعتين|$1 ساعات|$1 ساعة}}.",
+ "mailerror": "خطأ أثناء إرسال البريد: $1",
+ "acct_creation_throttle_hit": "أنشأ زوار هذه الويكي باستخدام عنوان آيبيك {{PLURAL:$1||حسابا واحدا|حسابين|$1 حسابات|$1 حسابا|$1 حساب}} في اليوم الماضي، وهو الحد الأقصى المسموح به في هذه الفترة الزمنية.\nوكنتيجة لذلك، لن يتمكن الزوار الذين يستخدمون عنوان الأيبي هذا من إنشاء أي حسابات أخرى حاليا.",
+ "emailauthenticated": "تم تأكيد بريدك الإلكتروني في $2 الساعة $3.",
+ "emailnotauthenticated": "لم يتم التحقق من بريدك الإلكتروني.\nلن يتم إرسال رسائل لأي من الميزات التالية.",
+ "noemailprefs": "حدد عنوان بريد إلكتروني في تفضيلاتك لهذه الخصائص لتعمل.",
+ "emailconfirmlink": "أكد عنوان بريدك الإلكتروني",
+ "invalidemailaddress": "لا يمكن قبول عنوان البريد الإلكتروني حيث تبدو صيغته خاطئة.\nضع عنوانا مضبوطا أو أفرغ هذا الحقل.",
+ "cannotchangeemail": "تغيير عنوان البريد الإلكتروني لهذا الحساب غير ممكن على هذا الويكي",
+ "emaildisabled": "لا يمكن إرسال رسائل البريد الإلكتروني من هذا الموقع.",
+ "accountcreated": "تم إنشاء الحساب",
+ "accountcreatedtext": "تم إنشاء الحساب الخاص ب$1.",
+ "createaccount-title": "إنشاء حساب في {{SITENAME}}",
+ "createaccount-text": "شخص ما أنشأ حسابا لعنوان بريدك الإلكتروني في {{SITENAME}} ($4) بالاسم \"$2\"، كلمة السر \"$3\".\nينبغي عليك تسجيل الدخول وتغيير كلمة السر الخاصة بك الآن.\n\nيمكنك تجاهل هذه الرسالة، لو تم إنشاء هذا الحساب بالخطأ.",
+ "login-throttled": "لقد قمت بمحاولات دخول كثيرة جدا مؤخرا.\nمن فضلك انتظر قبل المحاولة مرة أخرى.",
+ "login-abort-generic": "لم ينجح ولوجك - إجهاض",
+ "loginlanguagelabel": "اللغة: $1",
+ "suspicious-userlogout": "رفض طلب خروجك لأنه يبدو كأنه أرسل عن طريق متصفح معطوب أو وسيط تخزين.",
+ "php-mail-error-unknown": "خطأ غير معروف في وظيفة البريد PHP's mail()",
+ "user-mail-no-addy": "لقد حاولت إرسال بريد إلكتروني دون عنوان بريد إلكتروني.",
+ "resetpass_announce": "تم تسجيل دخولك بكلمة سر مؤقتة.\nللدخول بشكل نهائي، يجب عليك ضبط كلمة سر جديدة هنا:",
+ "resetpass_header": "غير كلمة سر الحساب",
+ "oldpassword": "كلمة السر القديمة:",
+ "newpassword": "كلمة السر الجديدة:",
+ "retypenew": "أعد كتابة كلمة السر الجديدة:",
+ "resetpass_submit": "ضبط كلمة السر والدخول",
+ "changepassword-success": "تم تغيير كلمة السر الخاصة بك بنجاح! يتم تسجيل دخولك الآن...",
+ "resetpass_forbidden": "كلمات السر لا يمكن تغييرها",
+ "resetpass-no-info": "يجب أن تكون مسجل الدخول للوصول إلى هذه الصفحة مباشرة.",
+ "resetpass-submit-loggedin": "تغيير كلمة السر",
+ "resetpass-submit-cancel": "ifsa5",
+ "resetpass-wrong-oldpass": "كلمة سر حالية أو مؤقتة غير صحيحة.\nربما تكون غيرت كلمة السر الخاصة بك بنجاح أو طلبت كلمة سر مؤقتة جديدة.",
+ "resetpass-temp-password": "كلمة سر مؤقتة:",
+ "passwordreset": "إعادة ضبط كلمة السر",
+ "passwordreset-legend": "إعادة تعيين كلمة السر",
+ "passwordreset-disabled": "عُطّلت إعادة تعيين كلمة السر على هذه الويكي.",
+ "passwordreset-username": "اسم المستخدم:",
+ "passwordreset-domain": "النطاق:",
+ "passwordreset-capture": "أأعرض البريد الإلكتروني الناتج؟",
+ "passwordreset-capture-help": "إذا علّمت هذا الصندوق فسيعرض لك البريد الإلكتروني (الذي يحتوي كلمة سر مؤقتة) وسيرسل أيضا للمستخدم.",
+ "passwordreset-email": "عنوان البريد الإلكتروني:",
+ "passwordreset-emailtitle": "تفاصيل حساب {{SITENAME}}",
+ "passwordreset-emailtext-ip": "احد ما (قد يكون انت$1)طلب مذكرة تفاصيل الحساب ل{{SITENAME}} ($4).المستخدم الاتي {{PLURAL:$3|الحساب هو|الحسابات هي}} قد قرن بهذا العنوان :\n\n$2\n\n{{PLURAL:$3|كلمة المرور المؤقتة|كلمات المرور المؤقة}}سينتهي في {{PLURAL:$5|يوم|ايام$5 }}\nمن الافضل ان تسجل الدخول وتختار كلمة مرور جديدة الان .\nإذا قام شخص آخر بهذا الطلب، أو إذا تذكرت كلمة المرور الأصلية الخاصة بك،ولم تعد ترغب في تغييره، يمكنك تجاهل هذه الرسالة ومتابعة استخدام كلمة المرورالقديمة.",
+ "passwordreset-emailtext-user": "احد ما (قد يكون انت$1)طلب مذكرة تفاصيل الحساب ل{{SITENAME}} ($4).المستخدم الاتي {{PLURAL:$3|الحساب هو|الحسابات هي}} قد قرن بهذا العنوان :\n\n$2\n\n{{PLURAL:$3|كلمة المرور المؤقتة|كلمات المرور المؤقة}}سينتهي في {{PLURAL:$5|يوم|ايام$5 }}\nمن الافضل ان تسجل الدخول وتختار كلمة مرور جديدة الان .\nإذا قام شخص آخر بهذا الطلب، أو إذا تذكرت كلمة المرور الأصلية الخاصة بك،ولم تعد ترغب في تغييره، يمكنك تجاهل هذه الرسالة ومتابعة استخدام كلمة المرورالقديمة.",
+ "passwordreset-emailelement": "اسم المستخدم: $1\nكلمة السر المؤقتة: $2",
+ "passwordreset-emailsent": "أرسل بريد إلكتروني تذكيري",
+ "passwordreset-emailsent-capture": "أرسل بريد إلكتروني تذكيري وهو معروض بالأسفل.",
+ "passwordreset-emailerror-capture": "ولّد بريد إلكتروني تذكيري وهو معروض بالأسفل لكن فشل إرساله للمستخدم: $1",
+ "changeemail": "تغيير عنوان البريد الإلكتروني",
+ "changeemail-header": "تغيير عنوان البريد الإلكتروني للحساب",
+ "changeemail-text": "أكمل هذا النموذج لتغيير عنوان البريد الإلكتروني. سوف تحتاج إلى إدخال كلمة السر الخاصة بك لتأكيد هذا التغيير.",
+ "changeemail-no-info": "يجب تسجيل الدخول للوصول إلى هذه الصفحة مباشرة.",
+ "changeemail-oldemail": "عنوان البريد الإلكتروني الحالي:",
+ "changeemail-newemail": "عنوان البريد الإلكتروني الجديد:",
+ "changeemail-none": "(لا شيء)",
+ "changeemail-submit": "غيّر البريد الإلكتروني",
+ "changeemail-cancel": "ifsa5",
+ "bold_sample": "نص غليظ",
+ "bold_tip": "نص غليظ",
+ "italic_sample": "نص مائل",
+ "italic_tip": "نص مائل",
+ "link_sample": "عنوان وصلة",
+ "link_tip": "وصلة داخلية",
+ "extlink_sample": "http://www.example.com عنوان الوصلة",
+ "extlink_tip": "وصلة خارجية (تذكر بادئة http://)",
+ "headline_sample": "نص عنوان رئيسي",
+ "headline_tip": "عنوان من المستوى الثاني",
+ "nowiki_sample": "أدخل النص غير المنسق هنا",
+ "nowiki_tip": "أهمل تهيئة الويكي",
+ "image_tip": "ملف مدرج",
+ "media_tip": "وصلة ملف",
+ "sig_tip": "توقيعك مع الساعة والتاريخ",
+ "hr_tip": "خط أفقي (تجنب الاستخدام بكثرة)",
+ "summary": "ملخص:",
+ "subject": "موضوع/عنوان:",
+ "minoredit": "هذا تعديل طفيف",
+ "watchthis": "راقب هذه الصفحة",
+ "savearticle": "احفظ الصفحة",
+ "preview": "معاينة",
+ "showpreview": "أظهر معاينة",
+ "showdiff": "أظهر التغييرات",
+ "anoneditwarning": "'''تحذير:''' لم تقم بالدخول.\nسيسجل عنوان الآيبي خاصتك في تاريخ هذه الصفحة.",
+ "anonpreviewwarning": "''أنت غير مسجل الدخول. الحفظ سيسجل عنوان الأيبي الخاص بك في تاريخ هذه الصفحة.''",
+ "missingsummary": "'''تنبيه:''' لم تقم بكتابة ملخص للتعديل.\nإذا قمت بضغط حفظ الصفحة مرة أخرى، فيتم حفظ تعديلك بدون ملخص.",
+ "missingcommenttext": "من فضلك أدخل تعليقا في الأسفل.",
+ "missingcommentheader": "'''تنبيه:''' لم تقم بوضع موضوع/عنوان لهذا التعليق.\nإذا قمت بالضغط على \"{{int:savearticle}}\" مجددا، سيتم حفظ تعليقك بدون عنوان.",
+ "summary-preview": "معاينة الملخص:",
+ "subject-preview": "معاينة للموضوع/العنوان:",
+ "blockedtitle": "المستخدم ممنوع",
+ "blockedtext": "'''اسم المستخدم أو عنوان الأيبي الخاص بك تم منعه.'''\n\nقام بالمنع $1.\nسبب المنع هو: ''$2''.\n\n* بداية المنع: $8\n* انتهاء المنع: $6\n* الممنوع المقصود: $7\n\nيمكنك الاتصال ب$1 أو مع أحد [[{{MediaWiki:Grouppage-sysop}}|الإداريين]] للنقاش حول المنع.\nلا يمكنك استخدام خاصية 'مراسلة هذا المستخدم' إلا إذا كنت قد وضعت عنوان بريدي صحيح في [[Special:Preferences|تفضيلات حسابك]] ولم يتم منعك من استخدامها.\nعنوان الأيبي الخاص بك حاليا هو $3، ورقم المنع هو #$5.\nمن فضلك اذكر كل التفاصيل بالأعلى في أي استعلامات تقوم بها.",
+ "autoblockedtext": "تم منع عنوان آيبيك تلقائيا لأن مستخدما آخرا ممنوعا بواسطة $1 استخدمه.\nالسبب الممنوح هو التالي:\n\n:''$2''\n\n* بداية المنع: $8\n* انتهاء المنع: $6\n* الممنوع المقصود: $7\n\nيمكنك أن تتصل ب $1 أو أحد [[{{MediaWiki:Grouppage-sysop}}|الإداريين]] الآخرين لمناقشة المنع.\n\nلاحظ أنه لا يمكنك استخدام خاصية \"إرسال رسالة لهذا المستخدم\" إلا لو كان لديك عنوان بريد إلكتروني صحيح مسجل في [[Special:Preferences|تفضيلاتك]] ولم يتم منعك من استخدامه.\n\nعنوان آيبيك الحالي $3، ورقم المنع #$5.\nمن فضلك اذكر كل التفاصيل بالأعلى في أي استعلامات تقوم بها.",
+ "blockednoreason": "لا سبب معطى",
+ "whitelistedittext": "يجب عليك $1 لتتمكن من تعديل الصفحات.",
+ "confirmedittext": "يجب عليك تأكيد بريدك الإلكتروني قبل تعديل الصفحات.\nمن فضلك اكتب وأكد بريدك الإلكتروني من خلال [[Special:Preferences|تفضيلاتك]].",
+ "nosuchsectiontitle": "تعذر إيجاد القسم",
+ "nosuchsectiontext": "لقد حاولت تحرير قسم غير موجود.\nربما يكون قد تم نقله أو حذفه أثناء مشاهدتك للصفحة.",
+ "loginreqtitle": "تسجيل الدخول مطلوب",
+ "loginreqlink": "الولوج",
+ "loginreqpagetext": "يجب عليك $1 لتشاهد صفحات أخرى.",
+ "accmailtitle": "تم إرسال كلمة السر.",
+ "accmailtext": "كلمة سر مولدة عشوائيا ل [[User talk:$1|$1]] تم إرسالها إلى $2.\n\nكلمة السر لهذا الحساب الجديد يمكن تغييرها في صفحة ''[[Special:ChangePassword|تغيير كلمة السر]]'' عند تسجيل الدخول.",
+ "newarticle": "(جديد)",
+ "newarticletext": "لقد تبعت وصلة لصفحة لم يتم إنشائها بعد.\nلإنشاء هذه الصفحة ابدأ الكتابة في الصندوق بالأسفل (انظر في [$1 صفحة المساعدة] للمزيد من المعلومات).\nإذا كانت زيارتك لهذه الصفحة بالخطأ، اضغط على زر ''رجوع'' في متصفح الإنترنت لديك.",
+ "anontalkpagetext": "----''هذه صفحة نقاش لمستخدم مجهول لم يقم بإنشاء حساب بعد أو لا يستعمل ذلك الحساب.\nلذا فيجب علينا استعمال رقم الأيبي للتعرف عليه/عليها.\nمثل هذا العنوان يمكن أن يشترك فيه عدة مستخدمين.\nلو كنت مستخدما مجهولا وتشعر بأن تعليقات لا تخصك تم توجيهها إليك، من فضلك [[Special:UserLogin/signup|أنشئ حسابا]] أو [[Special:UserLogin|سجل الدخول]] لتجنب الارتباك المستقبلي مع مستخدمين مجهولين آخرين.''",
+ "noarticletext": "Mafamma ħatta texte tawa f'essafħa hedhi.\nTnajjem [[Special:Search/{{PAGENAME}}|tfarkes εal titre mtaε essafħa]] fi safħat okhrine, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tfarkes f'elhistoriques elli εandhom εaleqa], \nwalla [{{fullurl:{{FULLPAGENAME}}|action=edit}} tbaddel essafħa hedhi]</span>",
+ "noarticletext-nopermission": "لا يوجد حاليا أي نص في هذه الصفحة.يمكنك [[Special:Search/{{PAGENAME}}|البحث عن عنوان هذه الصفحة]] في الصفحات الأخرى,أو <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} بحث السجلات المتصلة]</span>.",
+ "userpage-userdoesnotexist": "حساب المستخدم \"<nowiki>$1</nowiki>\" غير مسجل.\nمن فضلك تأكد أنك تريد إنشاء/تعديل هذه الصفحة.",
+ "userpage-userdoesnotexist-view": "حساب المستخدم \"$1\" غير مسجل.",
+ "blocked-notice-logextract": "هذا المستخدم ممنوع حاليا.\nآخر مدخلة في سجل المنع موفرة بالأسفل كمرجع:",
+ "clearyourcache": "'''ملاحظة:''' بعد الحفظ, أنت ربما تحتاج إلى إفراغ كاش متصفحك لرؤية التغييرات.\n* '''فيرفكس / سفاري:''' اضغط ''Shift'' أثناء ضغط ''Reload'', أو اضغط أيا من ''Ctrl-F5'' أو ''Ctrl-R'' (''⌘-R'' على ماك)\n* '''جوجل كروم:''' اضغط ''Ctrl-Shift-R'' (''⌘-Shift-R'' على ماك)\n* '''إنترنت إكسبلورر:''' اضغط ''Ctrl'' أثناء ضغط ''Refresh''، أو اضغط ''Ctrl-F5''\n* '''كنكرر:''' اضغط ''Reload'' أو اضغط ''F5''\n* '''أوبرا:''' أفرغ الكاش في ''Tools → Preferences''",
+ "usercssyoucanpreview": "'''ملاحظة:''' استعمل زر \"{{int:showpreview}}\" لتجربة CSS الجديد قبل حفظ الصفحة.",
+ "userjsyoucanpreview": "'''ملاحظة:''' استعمل زر \"{{int:showpreview}}\" لتجربة جافاسكربت الجديدة قبل حفظ الصفحة.",
+ "usercsspreview": "'''تذكر أنك تقوم بعرض الأنماط المتراصة (CSS) الخاصة بك فقط\nلم يتم حفظها بعد!'''",
+ "userjspreview": "'''تذكر أنك فقط تجرب/تعاين جافاسكربت.'''\n'''لم يتم الحفظ بعد!'''",
+ "sitecsspreview": "''' تذكر أنك فقط في وضع المعاينة لهذا CSS ''' \n''' ولم يتم حفظ الصفحة بعد! '''",
+ "sitejspreview": "''' تذكر أنك فقط في وضع المعاينة لكود JavaScript هذا''' \n''' ولم يتم حفظه بعد! '''",
+ "userinvalidcssjstitle": "'''تحذير:''' لا توجد واجهة \"$1\".\nتذكر أن ملفات ال.css و ال.js تستخدم حروف صغيرة في العنوان ، كمثال {{ns:user}}:Foo/vector.css و ليس {{ns:user}}:Foo/Vector.css.",
+ "updated": "(محدثة)",
+ "note": "'''ملاحظة:'''",
+ "previewnote": "'''تذكر أن هذه مجرد معاينة أولية.'''\nلم تحفظ تغييراتك إلى الآن!",
+ "continue-editing": "أكمل التحرير",
+ "previewconflict": "هذا العرض يوضح النص الموجود في صندوق التحرير العلوي والذي سيظهر إذا اخترت الحفظ.",
+ "session_fail_preview": "'''عذرا! لم نتمكن من حفظ التعديلات التي قمت بها نتيجة لضياع بيانات هذه الجلسة.\nمن فضلك حاول مرة أخرى.\nفي حال استمرار المشكلة حاول أن تقوم [[Special:UserLogout|بالخروج]] ومن ثم الولوج مرة أخرى.'''",
+ "session_fail_preview_html": "'''عذرا! لم نستطع معالجة تعديلك بسبب فقدان بيانات الجلسة.'''\n\n''لأن {{SITENAME}} بها HTML الخام مفعلة، العرض المسبق مخفي كاحتياط ضد هجمات الجافا سكريبت.''\n\n'''إذا كانت هذه محاولة تعديل صادقة، من فضلك حاول مرة أخرى.\nإذا كانت مازالت لا تعمل، حاول [[Special:UserLogout|تسجيل الخروج]] ثم تسجيل الدخول مجددا.'''",
+ "token_suffix_mismatch": "'''تعديلك تم رفضه لأن عميلك أخطأ في علامات الترقيم\nفي نص التعديل. تم رفض التعديل لمنع فساد نص المقالة.\nهذا يحدث أحيانا عندما تستخدم خدمة بروكسي مجهول معيبة مبنية على الوب.'''",
+ "edit_form_incomplete": "'''بعض أجزاء من نموذج التعديل لم تصل إلى الخادم؛ تأكد من أن تعديلاتك لم تمس وحاول مجددا.'''",
+ "editing": "تحرير $1",
+ "creating": "إنشاء «$1»",
+ "editingsection": "تحرير $1 (قسم)",
+ "editingcomment": "تعديل $1 (قسم جديد)",
+ "editconflict": "تضارب في التحرير: $1",
+ "explainconflict": "لقد عدل شخص آخر هذه الصفحة بعد أن بدأت أنت بتحريرها.\nصندوق النصوص العلوي يحتوي على النص الموجود حاليا في الصفحة.\nوالتغييرات التي قمت أنت بها موجودة في الصندوق في أسفل الصفحة.\nيجب أن تقوم بدمج تغييراتك في النص الموجود حاليا.\n'''فقط''' ما هو موجود في الصندوق العلوي هو ما سيتم حفظه عند الضغط على زر \"حفظ الصفحة\".",
+ "yourtext": "نصك",
+ "storedversion": "النسخة المخزنة",
+ "nonunicodebrowser": "'''تحذير: متصفحك لا يتوافق مع الترميز الموحد.\nتمت معالجة هذا لكي تتمكن من تحرير الصفحات بأمان: الحروف التي ليست ASCII سوف تظهر في صندوق التحرير كأكواد سداسي عشرية.'''",
+ "editingold": "''' تحذير: أنت تقوم الآن بتحرير نسخة قديمة من هذه الصفحة.\nإذا قمت بحفظها، ستفقد كافة التغييرات التي حدثت بعد هذه النسخة. '''",
+ "yourdiff": "الفروق",
+ "copyrightwarning": "من فضلك لاحظ أن جميع المساهمات ل {{SITENAME}} خاضعة وصادرة تحت ترخيص $2 (انظر في $1 للمزيد من التفاصيل)\nإذا لم ترد أن تخضع كتابتك للتعديل والتوزيع الحر، لا تضعها هنا<br />.\nكما أنك تتعهد بأنك قمت بكتابة ما هو موجود بنفسك، أو قمت بنسخها من مصدر يخضع ضمن الملكية العامة، أو مصدر حر آخر.\n'''لا ترسل أي عمل ذي حقوق محفوظة بدون الإذن من صاحب الحق'''.",
+ "copyrightwarning2": "من فضلك لاحظ أن جميع المساهمات في {{SITENAME}} يمكن أن تعدل أو تتغير أو تزال من قبل المساهمين الآخرين.\nإذا لم تكن ترغب أن تعدل مشاركاتك بهذا الشكل، لا تضعها هنا.<br />\nأنت تقر أيضا أنك كتبت هذا بنفسك، أو نسخته من مصدر يخضع للملكية العامة، أو مصدر حر آخر (انظر $1 للتفاصيل).\n'''لا تضف أي عمل ذي حقوق محفوظة بدون تصريح!'''",
+ "longpageerror": "'''خطأ: النص الذي قمت بإدخاله {{PLURAL:$1|واحد كيلوبايت|$1 كيلوبيات}} أطول, وهو أطول من الحد الأقصى {{PLURAL:$2|واحد كيلوبايت|$2 كيلوبايت}}.'''\nو يتعذر حفظه.",
+ "readonlywarning": "'''تحذير: لقد أغلقت قاعدة البيانات للصيانة، لذلك لن تتمكن من حفظ التعديلات التي قمت بها حاليا.\nإذا رغبت بإمكانك أن تنسخ النص الذي تعمل عليه وتحفظه في ملف نصي إلى وقت لاحق.'''\n\nالإداري الذي أغلقها أعطى هذا التفسير: $1",
+ "protectedpagewarning": "'''تحذير: تمت حماية هذه الصفحة حتى يمكن للمستخدمين ذوي الصلاحيات الإدارية فقط تعديلها.'''\nآخر مدخلة سجل موفرة بالأسفل كمرجع:",
+ "semiprotectedpagewarning": "'''ملاحظة:''' تمت حماية هذه الصفحة بحيث يمكن للمستخدمين المسجلين فقط تعديلها.\nآخر مدخلة سجل موفرة بالأسفل كمرجع:",
+ "cascadeprotectedwarning": "'''تحذير:''' تمت حماية هذه الصفحة بحيث يستطيع المستخدمون ذوو الصلاحيات الإدارية فقط تعديلها، وذلك لأنها مدمجة في {{PLURAL:$1||الصفحة التالية والتي تمت حمايتها|الصفحتين التاليتين واللتين تمت حمايتها|الصفحات التالية والتي تمت حمايتها}} بخاصية \"حماية الصفحات المدمجة\":",
+ "titleprotectedwarning": "'''تحذير: هذه الصفحة تمت حمايتها بحيث أن [[Special:ListGroupRights|صلاحيات معينة]] مطلوبة لإنشائها.'''\nآخر مدخلة سجل موفرة بالأسفل كمرجع:",
+ "templatesused": "{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذه الصفحة:",
+ "templatesusedpreview": "{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذه المعاينة:",
+ "templatesusedsection": "{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذا القسم:",
+ "template-protected": "(protégé)",
+ "template-semiprotected": "(حماية جزئية)",
+ "hiddencategories": "{{PLURAL:$1|هذه الصفحة غير موجودة في أي تصنايف مخفية|هذه الصفحة موجودة في تصنيف مخفي واحد|هذه الصفحة موجودة في تصنيفين مخفيين|هذه الصفحة موجودة في $1 تصانيف مخفية|هذه الصفحة موجودة في $1 تصنيفا مخفيا|هذه الصفحة موجودة في $1 تصنيف مخفي}}:",
+ "nocreatetext": "قام {{SITENAME}} بتحديد القدرة على إنشاء صفحات جديدة.\nيمكنك العودة وتحرير صفحة موجودة بالفعل، أو [[Special:UserLogin|الدخول أو تسجيل حساب]].",
+ "nocreate-loggedin": "أنت لا تمتلك الصلاحية لإنشاء صفحات جديدة.",
+ "sectioneditnotsupported-title": "تعديل الأقسام غير مدعوم",
+ "sectioneditnotsupported-text": "تعديل الأقسام غير مدعوم في هذه الصفحة",
+ "permissionserrors": "أخطاء السماحات",
+ "permissionserrorstext": "لا تمتلك الصلاحية لفعل هذا، {{PLURAL:$1||للسبب التالي|للسببين التاليين|للأسباب التالية}}:",
+ "permissionserrorstext-withaction": "لا تملك الصلاحيات ل$2، لل{{PLURAL:$1||سبب التالي|سببين التاليين|أسباب التالية}}:",
+ "recreate-moveddeleted-warn": "'''تحذير: أنت تقوم بإعادة إنشاء صفحة سبق حذفها.'''\n\nيجب عليك التيقن من أن الاستمرار بتحرير هذه الصفحة ملائم.\nسجلا الحذف والنقل لهذه الصفحة معروضان هنا للتيسير:",
+ "moveddeleted-notice": "هذه الصفحة تم حذفها.\nسجلا الحذف والنقل للصفحة معروضان بالأسفل كمرجع.",
+ "log-fulllog": "أظهر السجل الكامل",
+ "edit-hook-aborted": "التعديل تم تركه بواسطة الخطاف.\nلم يعط تفسيرا.",
+ "edit-gone-missing": "لم يمكن تحديث الصفحة.\nيبدو أنه تم حذفها.",
+ "edit-conflict": "تضارب تحريري.",
+ "edit-no-change": "تعديلك تم تجاهله، لأنه لم يحدث أي تعديل للنص.",
+ "edit-already-exists": "لم يمكن إنشاء صفحة جديدة.\nهي موجودة بالفعل.",
+ "defaultmessagetext": "نص الرسالة الافتراضي",
+ "expensive-parserfunction-warning": "'''تحذير:''' هذه الصفحة تحتوي على استدعاءات دالة محلل كثيرة مكلفة.\n\nينبغي أن تكون أقل من {{PLURAL:$2||استدعاء واحد|استدعاءين|$2 استدعاءات|$2 استدعاء}}، يوجد الآن {{PLURAL:$1|استدعاء واحد|استدعاءان|$2 استدعاءات|$2 استدعاء}}.",
+ "expensive-parserfunction-category": "صفحات يوجد بها استدعاءات دوال محلل كثيرة ومكلفة",
+ "post-expand-template-inclusion-warning": "'''تحذير:''' حجم تضمين القالب كبير جدا.\nبعض القوالب لن تضمن.",
+ "post-expand-template-inclusion-category": "الصفحات حيث تم تجاوز حجم تضمين القالب",
+ "post-expand-template-argument-warning": "'''تحذير:''' هذه الصفحة تحتوي على عامل قالب واحد على الأقل له حجم تمدد كبير جدا.\nهذه العوامل تم حذفها.",
+ "post-expand-template-argument-category": "صفحات تحتوي مدخلات القالب المحذوفة",
+ "parser-template-loop-warning": "تم كشف حلقة قالب: [[$1]]",
+ "parser-template-recursion-depth-warning": "تم تجاوز حد عمق فرد القوالب ($1)",
+ "language-converter-depth-warning": "تم تخطي حد عمق محول اللغة ($1)",
+ "node-count-exceeded-category": "الصفحات التي حدث فيها تجاوز تعداد العقد",
+ "node-count-exceeded-warning": "تجاوزت هذه الصفحة تعداد العقد",
+ "expansion-depth-exceeded-category": "الصفحات التي حدث فيها تجاوز عمق التوسيع",
+ "expansion-depth-exceeded-warning": "الصفحة تجاوزت عمق التوسيع",
+ "parser-unstrip-loop-warning": "حلقة معراة تم الكشف عنها",
+ "parser-unstrip-recursion-limit": "تعدى حد العودية Unstrip ($1)",
+ "undo-success": "يمكن استرجاع التعديل.\nمن فضلك تحقق من المقارنة بالأسفل للتأكد من أن هذا هو ما تريد أن تفعله، وبعد ذلك احفظ التغييرات بالأسفل للانتهاء من استرجاع التعديل.",
+ "undo-failure": "لم يمكن استرجاع التعديل بسبب تعديلات متعارضة تمت على الصفحة.",
+ "undo-norev": "فشل في الرجوع عن التعديل حيث أنه غير موجود أو تم حذفه.",
+ "undo-summary": "الرجوع عن التعديل $1 بواسطة [[Special:Contributions/$2|$2]] ([[User talk:$2|نقاش]])",
+ "cantcreateaccounttitle": "لا يمكن إنشاء حساب",
+ "cantcreateaccount-text": "إنشاء الحسابات من عنوان الأيبي هذا ('''$1''') تم منعه بواسطة [[User:$3|$3]].\n\nالسبب المعطى بواسطة $3 هو ''$2''",
+ "viewpagelogs": "اعرض سجلات هذه الصفحة",
+ "nohistory": "لا يوجد تاريخ للتعديلات لهذه الصفحة.",
+ "currentrev": "المراجعة الحالية",
+ "currentrev-asof": "المراجعة الحالية بتاريخ $1",
+ "revisionasof": "Version mtaε $1",
+ "revision-info": "مراجعة $1 بواسطة $2",
+ "previousrevision": "→ مراجعة أقدم",
+ "nextrevision": "مراجعة أحدث ←",
+ "currentrevisionlink": "المراجعة الحالية",
+ "cur": "الحالي",
+ "next": "التالي",
+ "last": "السابق",
+ "page_first": "الأولى",
+ "page_last": "الأخيرة",
+ "histlegend": "اختيار الفرق: علم على صناديق النسخ للمقارنة واضغط قارن بين النسخ المختارة أو الزر بالأسفل.<br />\nمفتاح: (الحالي) = الفرق مع النسخة الحالية\n(السابق) = الفرق مع النسخة السابقة، ط = تغيير طفيف",
+ "history-fieldset-title": "تصفح التاريخ",
+ "history-show-deleted": "المحذوفة فقط",
+ "histfirst": "أول",
+ "histlast": "آخر",
+ "historysize": "({{PLURAL:$1|1 بايت|$1 بايت}})",
+ "historyempty": "(فارغ)",
+ "history-feed-title": "تاريخ المراجعة",
+ "history-feed-description": "تاريخ التعديل لهذه الصفحة في الويكي",
+ "history-feed-item-nocomment": "$1 في $2",
+ "history-feed-empty": "الصفحة المطلوبة غير موجودة.\nمن المحتمل أن تكون هذه الصفحة قد حذفت من الويكي، أو نقلت.\nحاول [[Special:Search|البحث في الويكي]] عن صفحات جديدة ذات صلة.",
+ "rev-deleted-comment": "(أزيل ملخص التعديل)",
+ "rev-deleted-user": "(اسم المستخدم تمت إزالته)",
+ "rev-deleted-event": "(فعل السجل تمت إزالته)",
+ "rev-deleted-user-contribs": "[اسم المستخدم أو عنوان الأيبي تمت إزالته - التعديل مخفي من المساهمات]",
+ "rev-deleted-text-permission": "'''حُذِفت''' مراجعة هذه الصفحة.\nيمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
+ "rev-deleted-text-unhide": "'''حُذِفت''' مراجعة الصفحة هذه.\nيمكن العثور على تفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].\nمازال بإمكانك [$1 رؤية هذه المراجعة] إذا أردت المتابعة.",
+ "rev-suppressed-text-unhide": "'''أُخفيت''' مراجعة الصفحة هذه.\nيمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سجل الإخفاء].\nبإمكانك [$1 رؤية هذه المراجعة] إذا أردت المتابعة.",
+ "rev-deleted-text-view": "'''حُذِفت''' مراجعة هذه الصفحة.\nيمكنك رؤيتها؛ ويمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
+ "rev-suppressed-text-view": "'''أُخفيت''' مراجعة الصفحة هذه.\nيمكنك رؤيتها؛ ويمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سجل الإخفاء].",
+ "rev-deleted-no-diff": "لا يمكنك رؤية هذا الفرق لأن إحدى المراجعات '''حُذِفت'''.\nيمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
+ "rev-suppressed-no-diff": "ليس بإمكانك مشاهدة هذا الفرق لأن إحدى المراجعات '''حذفت'''.",
+ "rev-deleted-unhide-diff": "'''حُذِفت''' إحدى مراجعتي هذا الفرق.\nيمكن العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].\nبإمكانك [$1 رؤية هذا الفرق] إذا أردت المتابعة.",
+ "rev-suppressed-unhide-diff": "'''أُخفيت''' إحدى مراجعتي هذا الفرق.\nيمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سجل الإخفاء].\nبإمكانك [$1 رؤية هذا الفرق] إذا أردت المتابعة.",
+ "rev-deleted-diff-view": "'''حُذِفت''' إحدى مراجعتي هذا الفرق.\nيمكنك رؤية الفرق؛ ويمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
+ "rev-suppressed-diff-view": "'''أُخفيت''' إحدى مراجعتي هذا الفرق.\nيمكنك رؤية هذا الفرق؛ ويمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سجل الإخفاء].",
+ "rev-delundel": "أظهر/أخف",
+ "rev-showdeleted": "أظهر",
+ "revisiondelete": "حذف/استرجاع المراجعات",
+ "revdelete-nooldid-title": "مراجعة هدف غير صحيحة",
+ "revdelete-nooldid-text": "إما أنك لم تحدد مراجعة (أو مراجعات) معينة هدفا لهذه الوظيفة، أو أن المراجعة المحددة غير موجودة، أو أنك تحاول إخفاء المراجعة الحالية.",
+ "revdelete-no-file": "الملف المحدد غير موجود.",
+ "revdelete-show-file-confirm": "هل أنت متأكد أنك تريد رؤية مراجعة محذوفة للملف \"<nowiki>$1</nowiki>\" بتاريخ $2 الساعة $3؟",
+ "revdelete-show-file-submit": "نعم",
+ "logdelete-selected": "{{PLURAL:$1|حدث السجل المختار|أحداث السجل المختارة}}:",
+ "revdelete-confirm": "الإداريون الآخرون في {{SITENAME}} سيظل بإمكانهم رؤية المحتوى المخفي ويمكنهم استرجاعه مجددا من خلال هذه الواجهة نفسها، مالم يتم وضع قيود إضافية.\nمن فضلك أكد أنك تنوي فعل هذا، وأنك تفهم العواقب، وأنك تفعل هذا بالتوافق مع [[{{MediaWiki:Policy-url}}|السياسة]].",
+ "revdelete-suppress-text": "الإخفاء ينبغي أن يتم استخدامه '''فقط''' في الحالات التالية:\n* معلومات شخصية غير ملائمة\n*: ''عناوين المنازل وأرقام التليفونات، أرقام الضمان الاجتماعي، إلى آخره.''",
+ "revdelete-legend": "وضع ضوابط رؤية",
+ "revdelete-hide-text": "أخف نص المراجعة",
+ "revdelete-hide-image": "أخف محتوى الملف",
+ "revdelete-hide-name": "أخف الفعل والهدف",
+ "revdelete-hide-comment": "أخف تعليق التعديل",
+ "revdelete-hide-user": "أخف اسم/آيبي المستخدم",
+ "revdelete-hide-restricted": "أخف البيانات عن الإداريين إضافة إلى الآخرين",
+ "revdelete-radio-same": "(لا تغير)",
+ "revdelete-radio-set": "نعم",
+ "revdelete-radio-unset": "لا",
+ "revdelete-suppress": "أخف البيانات عن مديري النظام والبقية",
+ "revdelete-unsuppress": "إزالة الضوابط من المراجعات المسترجعة",
+ "revdelete-log": "السبب:",
+ "revdelete-submit": "طبق على {{PLURAL:$1||المراجعة المختارة|المراجعتين المختارتين|المراجعات المختارة}}",
+ "revdelete-success": "'''تم تحديث رؤية المراجعات بنجاح.'''",
+ "revdelete-failure": "'''تعذر تحديث رؤية المراجعة:'''\n$1",
+ "logdelete-success": "'''تم ضبط رؤية السجلات بنجاح.'''",
+ "logdelete-failure": "'''تعذر ضبط رؤية السجل:'''\n$1",
+ "revdel-restore": "تغيير الرؤية",
+ "pagehist": "تاريخ صفحة",
+ "deletedhist": "التاريخ المحذوف",
+ "revdelete-hide-current": "خطأ عند إحفاء العنصر المؤرخ في $2 $1: هذه هي المراجعة الحالية.\nلا يمكن إخفاؤها.",
+ "revdelete-show-no-access": "خطأ في إظهار العنصر ذا التاريخ $2 $1: هذا العنصر معلم ك\"مقيد\".\nليس لك صلاحية الوصول إليه.",
+ "revdelete-modify-no-access": "خطأ في تعديل العنصر ذا التاريخ $2 $1: هذا العنصر معلم ك\"مقيد\".\nليس لك صلاحية الوصول إليه.",
+ "revdelete-modify-missing": "خطأ في تعديل العنصر ذا الهوية $1: العنصر مفقود من قاعدة البيانات!",
+ "revdelete-no-change": "'''تحذير:''' العنصر ذو التاريخ $2 $1 لديه أصلا إعدادات الظهور المطلوبة.",
+ "revdelete-concurrent-change": "خطأ في تعديل العنصر ذي التاريخ $2 $1: تظهر حالته أن شخصا آخر عدله أثناء محاولتك تعديله.\nمن فضلك راجع السجلات.",
+ "revdelete-only-restricted": "خطأ إخفاء العنصر المؤرخ $2, $1: لا تستطيع تنحية العناصر من عرض الإداريين بدون أن تحدد أيضا إحدى خيارات التنحية الأخرى.",
+ "revdelete-reason-dropdown": "* أسباب حذف عامة\n** خرق لحقوق النشر\n** معلومات شخصية غير ملائمة\n**معلومات تشهيرية محتملة",
+ "revdelete-otherreason": "سبب آخر/إضافي:",
+ "revdelete-reasonotherlist": "سبب آخر",
+ "revdelete-edit-reasonlist": "عدل أسباب الحذف",
+ "revdelete-offender": "مؤلف المراجعة:",
+ "suppressionlog": "سجل الإخفاء",
+ "suppressionlogtext": "بالأسفل قائمة بعمليات الحذف والمنع التي تتضمن محتوى مخفيا عن الإداريين.\nانظر [[Special:BlockList|قائمة منع الآيبي]] لترى عمليات المنع القائمة الآن.",
+ "mergehistory": "دمج تواريخ الصفحة",
+ "mergehistory-header": "هذه الصفحة تسمح لك بدمج نسخ تاريخ صفحة ما إلى صفحة أخرى.\nتأكد من أن هذا التغيير سيحافظ على استمرار تاريخ الصفحة.",
+ "mergehistory-box": "دمج مراجعات صفحتين:",
+ "mergehistory-from": "الصفحة المصدر:",
+ "mergehistory-into": "الصفحة الهدف:",
+ "mergehistory-list": "تاريخ التعديل القابل للدمج",
+ "mergehistory-merge": "المراجعات التالية من [[:$1]] يمكن دمجها إلى [[:$2]].\nاستخدم عامود الصناديق لدمج المراجعات التي تم إنشاؤها في وقبل الوقت المحدد.\nلاحظ أن استخدام وصلات التصفح سيعيد ضبط هذا العامود.",
+ "mergehistory-go": "عرض التعديلات القابلة للدمج",
+ "mergehistory-submit": "دمج المراجعات",
+ "mergehistory-empty": "لا مراجعات يمكن دمجها.",
+ "mergehistory-success": "$3 {{PLURAL:$3|مراجعة|مراجعة}} من [[:$1]] تم دمجها بنجاح في [[:$2]].",
+ "mergehistory-fail": "غير قادر على عمل دمج التاريخ، من فضلك أعد التحقق من محددات الصفحة والزمن.",
+ "mergehistory-no-source": "الصفحة المصدر $1 غير موجودة.",
+ "mergehistory-no-destination": "الصفحة الهدف $1 غير موجودة.",
+ "mergehistory-invalid-source": "الصفحة المصدر يجب أن تكون عنوانا صحيحا.",
+ "mergehistory-invalid-destination": "الصفحة الهدف يجب أن تكون عنوانا صحيحا.",
+ "mergehistory-autocomment": "دمج [[:$1]] في [[:$2]]",
+ "mergehistory-comment": "دمج [[:$1]] في [[:$2]]: $3",
+ "mergehistory-same-destination": "صفحتا المصدر والهدف لا يمكن أن تكونا نفس الشيء",
+ "mergehistory-reason": "السبب:",
+ "mergelog": "سجل الدمج",
+ "pagemerge-logentry": "دمج [[$1]] إلى [[$2]] (المراجعات حتى $3)",
+ "revertmerge": "إلغاء الدمج",
+ "mergelogpagetext": "بالأسفل قائمة بأحدث عمليات الدمج لتاريخ صفحة ما إلى أخرى.",
+ "history-title": " «$1»: تاريخ المراجعة",
+ "difference-title": "«$1»: الفرق بين المراجعتين",
+ "difference-title-multipage": "«$1» و«$2»: الفرق بين الصفحتين",
+ "difference-multipage": "(الفرق بين الصفحتين)",
+ "lineno": "Star $1:",
+ "compareselectedversions": "قارن بين النسختين المختارتين",
+ "showhideselectedversions": "أظهر/أخف المراجعات المختارة",
+ "editundo": "Rajjaε",
+ "diff-multi-manyusers": "({{PLURAL:$1||مراجعة واحدة متوسطة غير معروضة أجراها|مراجعتان متوسطتان غير معروضتان أجراهما|$1 مراجعات متوسطة غير معروضة أجراها|$1 مراجعة متوسطة غير معروضة أجراها}} أكثر من {{PLURAL:$2||مستخدم واحد|مستخدمين|$2 مستخدمين|$2 مستخدمًا|$2 مستخدم}}.)",
+ "searchresults": "Elrésultats mtaε elrecherche",
+ "searchresults-title": "Elrésultats mtaε elrecherche εla \"$1\"",
+ "prevn": "{{PLURAL:$1|$1}} السابقة",
+ "nextn": "{{PLURAL:$1|$1}} التالية",
+ "prevn-title": "$1 {{PLURAL:$1|نتيجة|نتيجة}} سابقة",
+ "nextn-title": "$1 {{PLURAL:$1|نتيجة|نتيجة}} سابقة",
+ "shown-title": " Warri{{PLURAL:Résultat weħed|Zouz résultats|$1 résultats|$1 en résultat}} men kol safħa",
+ "viewprevnext": "Chouf ($1 {{int:pipe-separator}} $2) ($3)",
+ "searchmenu-exists": "'''famma ss'af7a ismha \"[[:$1]]\" fi hedha el wiki.'''",
+ "searchmenu-new": "'''أنشئ الصفحة \"[[:$1]]\" في هذا الويكي!'''",
+ "searchprofile-articles": "Safħat mtaε contenu",
+ "searchprofile-images": "Multimédia",
+ "searchprofile-everything": "Kol chay",
+ "searchprofile-advanced": "Avancé",
+ "searchprofile-articles-tooltip": "Farkes fi $1",
+ "searchprofile-images-tooltip": "Farkes f'elfichiers",
+ "searchprofile-everything-tooltip": "Farkes kol chay (ħatta safħat leħdith)",
+ "searchprofile-advanced-tooltip": "Ekhtar les espaces de noms elli bech tfarkes εlihom",
+ "search-result-size": "$1 ({{PLURAL:Ħatta kelma|Kelma waħda|Kelmtin|$2 kelmat|$2 en kelma}})",
+ "search-result-category-size": "{{PLURAL:$1|لا أعضاء|عضو واحد|عضوان|$1 أعضاء|$1 عضوًا|$1 عضو}} ({{PLURAL:$2|لا تصانيف فرعية|تصنيف فرعي واحد|تصنيفان فرعيان|$2 تصنيفات فرعية|$2 تصنيفًا فرعيًا|$2 تصنيف فرعي}} و{{PLURAL:$3|لا ملفات|ملف واحد|ملفان|$3 ملفات|$3 ملفًا|$3 ملف}})",
+ "search-redirect": "(تحويلة $1)",
+ "search-section": "(section $1)",
+ "search-suggest": "هل كنت تقصد: $1",
+ "searchrelated": "مرتبطة",
+ "searchall": "Elkol",
+ "showingresultsheader": "{{PLURAL:$5|النتيجة '''$1''' من'''$3'''|النتائج '''$1 - $2''' من'''$3'''}} ل'''$4'''",
+ "search-nonefound": "لا توجد نتائج تطابق الاستعلام.",
+ "mypreferences": "تفضيلاتي",
+ "youremail": "البريد:",
+ "yourrealname": "الاسم الحقيقي:",
+ "prefs-help-email": "عنوان البريد الإلكتروني هو أمر اختياري، ولكن ستحتاج لإعادة تعيين كلمة المرور، إن نسيت كلمة المرور الخاصة بك.",
+ "prefs-help-email-others": "يمكنك أيضا اختيار للسماح للآخرين الاتصال بك عن طريق صفحة المستخدم أو نقاش المستخدم الخاص بك دون الحاجة إلى الكشف عن الهوية الخاصة بك.",
+ "newuserlogpage": "سجل إنشاء المستخدمين",
+ "action-edit": "modifi hal page",
+ "nchanges": "{{PLURAL:$1|لا تغييرات|تغيير واحد|تغييران|$1 تغييرات|$1 تغييرا|$1 تغيير}}",
+ "recentchanges": "Ajad tabdilet",
+ "recentchanges-legend": "خيارات أحدث التغييرات",
+ "recentchanges-summary": "تابع أحدث التغييرات للويكي عبر هذه التلقيمة.",
+ "recentchanges-feed-description": "تابع أحدث التغييرات للويكي عبر هذه التلقيمة.",
+ "recentchanges-label-newpage": "أنشأ هذا التعديل صفحة جديدة",
+ "recentchanges-label-minor": "هذا تعديل طفيف",
+ "recentchanges-label-bot": "أجرى هذا التعديل بوت",
+ "recentchanges-label-unpatrolled": "لم يراجع هذا التعديل إلى الآن",
+ "rcnotefrom": "بالأسفل التغييرات منذ '''$2''' (إلى '''$1''' معروضة).",
+ "rclistfrom": "أظهر التغييرات بدءا من $3 $2",
+ "rcshowhideminor": "$1 التعديلات الطفيفة",
+ "rcshowhidebots": "$1 البوتات",
+ "rcshowhideliu": "$1 المستخدمين المسجلين",
+ "rcshowhideanons": "$1 المستخدمين المجهولين",
+ "rcshowhidepatr": "$1 التعديلات المراجعة",
+ "rcshowhidemine": "$1 تعديلاتي",
+ "rclinks": "أظهر آخر $1 تعديل في آخر $2 يوم<br />$3",
+ "diff": "Farq",
+ "hist": "Hist",
+ "hide": "أخف",
+ "show": "اعرض",
+ "minoreditletter": "thafif",
+ "newpageletter": "jadid",
+ "boteditletter": "bot",
+ "rc-enhanced-expand": "عرض التفاصيل (يتطلب جافاسكريبت)",
+ "rc-enhanced-hide": "أخفِ التفاصيل",
+ "recentchangeslinked": "تغييرات ذات علاقة",
+ "recentchangeslinked-toolbox": "Tabdilet them",
+ "recentchangeslinked-title": "التغييرات المرتبطة ب \"$1\"",
+ "recentchangeslinked-summary": "هذه قائمة بالتغييرات التي تمت حديثا للصفحات الموصولة من صفحة معينة (أو إلى الأعضاء ضمن تصنيف معين).\nالصفحات في [[Special:Watchlist|قائمة مراقبتك]] '''عريضة'''",
+ "recentchangeslinked-page": "اسم الصفحة:",
+ "recentchangeslinked-to": "أظهر التغييرات للصفحات الموصولة للصفحة المعطاة عوضا عن ذلك",
+ "upload": "Abεeth des fichiers l'esserveur",
+ "uploadlogpage": "سجل الرفع",
+ "filedesc": "ملخص:",
+ "license": "ترخيص:",
+ "license-header": "licence",
+ "file-anchor-link": "milaf (Fichier)",
+ "filehist": "teri5 el milaf",
+ "filehist-help": "اضغط على وقت/زمن لرؤية الملف كما بدا في هذا الزمن.",
+ "filehist-revert": "استرجع",
+ "filehist-current": "حالي",
+ "filehist-datetime": "وقت/زمن",
+ "filehist-thumb": "صورة مصغرة",
+ "filehist-thumbtext": "تصغير للنسخة بتاريخ $1",
+ "filehist-user": "مستخدم",
+ "filehist-dimensions": "الأبعاد",
+ "filehist-comment": "ta3li9at",
+ "imagelinks": "استخدام الملف",
+ "linkstoimage": "{{PLURAL:$1||الصفحة التالية تصل|الصفحتان التاليتان تصلان|ال$1 صفحات التالية تصل|ال$1 صفحة التالية تصل}} إلى هذا الملف:",
+ "nolinkstoimage": "لا توجد صفحات تصل لهذا الملف.",
+ "sharedupload-desc-here": "هذا الملف من $1 ويمكن استخدامه بواسطة المشاريع الأخرى.\nالوصف على [$2 صفحة وصف الملف] هناك معروض بالأسفل.",
+ "randompage": "Safħa elli tji",
+ "statistics": "إحصاءات",
+ "nbytes": "{{PLURAL:Octet weħed|Zouz octets|$1 octets|$1 en octet}}",
+ "nmembers": "{{PLURAL:$1|لا أعضاء|عضو واحد|عضوان|$1 أعضاء|$1 عضوا|$1 عضو}}",
+ "prefixindex": "كل الصفحات بالبادئة",
+ "usercreated": "{{GENDER:$3|أنشأه|أنشأته}} في $1 الساعة $2",
+ "newpages": "Safħat jdod",
+ "move": "انقل",
+ "pager-newer-n": "{{PLURAL:$1|أقدم 1|أقدم $1}}",
+ "pager-older-n": "{{PLURAL:$1|أقدم 1|أقدم $1}}",
+ "booksources": "مصادر كتاب",
+ "booksources-search-legend": "البحث عن مصادر الكتب",
+ "booksources-go": "اذهب",
+ "log": "سجلات",
+ "allpages": "kol ess'afa7at",
+ "allarticles": "kol ess'afa7at",
+ "allpagessubmit": "اذهب",
+ "categories": "تصنيفات",
+ "linksearch-line": "$1 موصولة من $2",
+ "listgrouprights-members": "(قائمة الأعضاء)",
+ "emailuser": "إرسال رسالة لهذا المستخدم",
+ "watchlist": "قائمة مراقبتي",
+ "mywatchlist": "قائمة مراقبتي",
+ "watchlistfor2": "ل$1 $2",
+ "watch": "راقب",
+ "unwatch": "أوقف المراقبة",
+ "watchlist-details": "{{PLURAL:$1||صفحة واحدة|صفحتان|$1 صفحات|$1 صفحة}} في قائمة مراقبتك، بدون عد صفحات النقاش.",
+ "wlshowlast": "عرض آخر $1 ساعات $2 أيام $3",
+ "watchlist-options": "خيارات قائمة المراقبة",
+ "actioncomplete": "انتهاء العملية",
+ "actionfailed": "الفعل فشل",
+ "dellogpage": "سجل الحذف",
+ "rollbacklink": "rajjaε",
+ "protectlogpage": "سجل الحماية",
+ "protectedarticle": "حمى \"[[$1]]\"",
+ "undeletelink": "اعرض/استعد",
+ "undeleteviewlink": "اعرض",
+ "namespace": "النطاق",
+ "invert": "اعكس الاختيار",
+ "blanknamespace": "(Principal)",
+ "contributions": "مساهماتي",
+ "contributions-title": "مساهمات المستخدم $1",
+ "mycontris": "مساهماتي",
+ "contribsub2": "ل$1 ($2)",
+ "uctop": "(top)",
+ "month": "من سنة (وأقدم):",
+ "year": "من سنة (وأقدم):",
+ "sp-contributions-newbies": "اعرض مساهمات الحسابات الجديدة فقط",
+ "sp-contributions-blocklog": "سجل المنع",
+ "sp-contributions-uploads": "مرفوعات",
+ "sp-contributions-logs": "سجلات",
+ "sp-contributions-talk": "نقاش",
+ "sp-contributions-search": "بحث عن مساهمات",
+ "sp-contributions-username": "عنوان أيبي أو اسم مستخدم:",
+ "sp-contributions-toponly": "أظهر أعلى المراجعات فقط",
+ "sp-contributions-submit": "lawwej",
+ "whatlinkshere": "Chnowa elli ywassel elhouni",
+ "whatlinkshere-title": "الصفحات التي تصل إلى \"$1\"",
+ "whatlinkshere-page": "ss'af7a:",
+ "linkshere": "الصفحات التالية تصل إلى '''[[:$1]]''':",
+ "nolinkshere": "لا توجد صفحات تصل إلى '''[[:$1]]'''.",
+ "isredirect": "صفحة تحويل",
+ "istemplate": "مضمن",
+ "isimage": "وصلة ملف",
+ "whatlinkshere-prev": "{{PLURAL:$1|previous|previous $1}}",
+ "whatlinkshere-next": "{{PLURAL:$1|القادمة|ال$1 القادمة}}",
+ "whatlinkshere-links": "← وصلات",
+ "whatlinkshere-hideredirs": "$1 التحويلات",
+ "whatlinkshere-hidetrans": "$1 التضمينات",
+ "whatlinkshere-hidelinks": "$1 الوصلات",
+ "whatlinkshere-hideimages": "$1 وصلة صورة",
+ "whatlinkshere-filters": "مرشحات",
+ "ipboptions": "ساعتين:2 hours,يوم واحد:1 day,3 أيام:3 days,أسبوع واحد:1 week,أسبوعين:2 weeks,شهر واحد:1 month,3 أشهر:3 months,6 أشهر:6 months,سنة واحدة:1 year,دائم:infinite",
+ "ipblocklist": "المستخدمون الممنوعون",
+ "blocklink": "Bloqui",
+ "unblocklink": "ارفع المنع",
+ "change-blocklink": "تغيير المنع",
+ "contribslink": "Mousehmet",
+ "blocklogpage": "سجل المنع",
+ "blocklogentry": "منع \"[[$1]]\" لفترة زمنية مدتها $2 $3",
+ "block-log-flags-nocreate": "إنشاء الحسابات ممنوع",
+ "movelogpage": "سجل النقل",
+ "revertmove": "استرجع",
+ "export": "تصدير صفحات",
+ "allmessagesname": "الاسم",
+ "allmessagesdefault": "النص الافتراضي",
+ "thumbnail-more": "Kabber",
+ "thumbnail_error": "خطأ في إنشاء صورة مصغرة: $1",
+ "tooltip-pt-userpage": "صفحة المستخدم الخاصة بك",
+ "tooltip-pt-mytalk": "صفحة نقاشك",
+ "tooltip-pt-preferences": "تفضيلاتي",
+ "tooltip-pt-watchlist": "قائمة الصفحات التي تراقب التغييرات التي تحدث بها",
+ "tooltip-pt-mycontris": "قائمة مساهماتك",
+ "tooltip-pt-login": "Madhabina ken tconnecti, ama mouch bessif",
+ "tooltip-pt-logout": "خروج",
+ "tooltip-ca-talk": "Discussion εal contenu mtaε essafħa",
+ "tooltip-ca-edit": "Tannjem tbaddel essafħa hedhi. Aman enzel εal bouton mtaε elvue el msabqa qbal matsajjel.",
+ "tooltip-ca-addsection": "ابدأ قسما جديدا",
+ "tooltip-ca-viewsource": "El safħa protégée.\nTnajjem tchouf essource mteεha.",
+ "tooltip-ca-history": "Copiet qdom mtaε essafħa hedhi",
+ "tooltip-ca-protect": "احم هذه الصفحة",
+ "tooltip-ca-delete": "احذف هذه الصفحة",
+ "tooltip-ca-move": "علم هذه الصفحة",
+ "tooltip-ca-watch": "أضف هذه الصفحة إلى قائمة مراقبتك",
+ "tooltip-ca-unwatch": "أزل هذه الصفحة من قائمة مراقبتك",
+ "tooltip-search": "Lawwej fi {{SITENAME}}",
+ "tooltip-search-go": "اذهب إلى صفحة بالاسم نفسه إن وجدت",
+ "tooltip-search-fulltext": "Farkes f'essafħat εattexte hedha",
+ "tooltip-p-logo": "Emchi l'elpage principale",
+ "tooltip-n-mainpage": "Emchi l'elpage principale",
+ "tooltip-n-mainpage-description": "Emchi l'elpage principale",
+ "tooltip-n-portal": "Ɛ'almachrouε, chnowa tnajem taεmel, win talqa elli ħajtek bih",
+ "tooltip-n-currentevents": " Alqa information εla aham laħdeth mtaε tawa",
+ "tooltip-n-recentchanges": "Lista mtaε ajad ettabdilat f'elwiki",
+ "tooltip-n-randompage": "Ħell safħa elli tji",
+ "tooltip-n-help": "Mouεawna",
+ "tooltip-t-whatlinkshere": "Lista mtaε safħat elwiki elkol elli twassel elhouni",
+ "tooltip-t-recentchangeslinked": "Aham ettabldilet f'essafħat elli ywaslou l'essafħa hedhi",
+ "tooltip-feed-atom": "تلقيم أتوم لهذه الصفحة",
+ "tooltip-t-contributions": "رؤية قائمة مساهمات هذا المستخدم",
+ "tooltip-t-emailuser": "أرسل رسالة لهذا المستخدم",
+ "tooltip-t-upload": "Abεeth des fichiers l'esserveur",
+ "tooltip-t-specialpages": "Lista mtaε essafħat esspéciales elkol",
+ "tooltip-t-print": "Version l'ettabεan mtaε essafħa hedhi.",
+ "tooltip-t-permalink": "Lien dayem l'elversion hedhi mtaε essafħa",
+ "tooltip-ca-nstab-main": "Chouf elcontenu mtaε essafħa",
+ "tooltip-ca-nstab-user": "اعرض صفحة المستخدم",
+ "tooltip-ca-nstab-special": "هذه صفحة خاصة، لا تستطيع أن تعدل الصفحة نفسها",
+ "tooltip-ca-nstab-project": "رؤية صفحة المحتوى",
+ "tooltip-ca-nstab-image": "رؤية صفحة الملف",
+ "tooltip-ca-nstab-template": "رؤية القالب",
+ "tooltip-ca-nstab-category": "رؤية صفحة التصنيف",
+ "tooltip-minoredit": "علم على هذا كتعديل طفيف",
+ "tooltip-save": "احفظ تغييراتك",
+ "tooltip-preview": "اعرض تغييراتك، من فضلك استخدم هذا قبل الحفظ!",
+ "tooltip-diff": "اعرض التغييرات التي قمت بها للنص.",
+ "tooltip-compareselectedversions": "شاهد الفروق بين النسختين المختارتين من هذه الصفحة.",
+ "tooltip-watch": "أضف هذه الصفحة إلى قائمة مراقبتك",
+ "tooltip-rollback": "\"Rajjaε\" yrajjeε ettabdilet f'hassafħa el'ekher weħed baddel fi nazla waħda.",
+ "tooltip-undo": "\"رجوع\" تسترجع هذا التعديل وتفتح نافذة التعديل في نمط العرض المسبق. تسمح بإضافة سبب في الملخص.\n\"Annuler\" trajjeε eltabdila lekhra w tħel fenêtre mtaε el tabdil mtaε elvue el msabqa. Tnajjem tqoul εlech f'ettalkhis.",
+ "tooltip-summary": "أدخل ملخصا قصيرا",
+ "previousdiff": "→ التعديل السابق",
+ "nextdiff": "التعديل اللاحق ←",
+ "file-info-size": "$1 × $2 بكسل حجم الملف: $3، نوع MIME: $4",
+ "file-nohires": "لا توجد دقة أعلى متوفرة.",
+ "svg-long-desc": "ملف SVG، أبعاده $1 × $2 بكسل، حجم الملف: $3",
+ "show-big-image": "دقة كاملة",
+ "bad_image_list": "Elformat kima hakka:\nLes élements mtaε lista (lostra elli yabdew b' *) yetħesbou.\nEllien lowel fi star yelzmou ykoun lien el fichier khayeb.\nAy lien ekher fi nafs estar yetħseb exception, maħneha des pages win elfichier ynajem ykoun fi star.",
+ "metadata": "بيانات ميتا",
+ "metadata-help": "هذا الملف يحتوي على معلومات إضافية، غالبا ما تكون أضيفت من قبل الكاميرا الرقمية أو الماسح الضوئي المستخدم في إنشاء الملف.\nإذا كان الملف قد عدل عن حالته الأصلية، فبعض التفاصيل قد لا تعبر عن الملف المعدل.",
+ "metadata-fields": "حقول معطيات الميتا الموجودة في هذه الرسالة سوف تعرض في صفحة الصورة عندما يكون جدول معطيات الميتا مضغوطا.\nالحقول الأخرى ستكون مخفية افتراضيا.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+ "watchlistall2": "الكل",
+ "namespacesall": "الكل",
+ "monthsall": "الكل",
+ "watchlistedit-clear-explain": "Elɛanawin lkol bech yetnaħaw mel'lista mteɛek",
+ "watchlistedit-clear-titles": "Elɛanawin",
+ "watchlistedit-too-many": "Famma barcha pajet w'manajmouch nħotouhom lkol lahné",
+ "watchlisttools-view": "اعرض التغييرات المرتبطة",
+ "watchlisttools-edit": "اعرض قائمة المراقبة وعدلها",
+ "watchlisttools-raw": "عدل قائمة المراقبة الخام",
+ "duplicate-defaultsort": "'''تحذير:''' مفتاح الترتيب الافتراضي \"$2\" يتجاوز مفتاح الترتيب الافتراضي السابق \"$1\".",
+ "specialpages": "Safħat spéciales",
+ "external_image_whitelist": " #<pre>اترك هذا السطر تماما كما هو\n#ضع منثورات التعبيرات المنتظمة (فقط الجزء الذي يذهب بين //) بالأسفل\n#هذه ستتم مطابقتها مع مسارات الصور الخرجية (الموصولة بشكل مباشر)\n#هذه التي تطابق سيتم عرضها كصور، غير ذلك فقط وصلة إلى الصورة سيتم عرضها\n#السطور التي تبدأ ب# تتم معاملتها كتعليقات\n#هذا لا يتأثر بحالة الحروف\n\n#ضع كل منثورات التعبيرات المنتظمة فوق هذا السطر. اترك هذا السطر تماما كما هو</pre>",
+ "tag-filter": "مرشح [[Special:Tags|الوسوم]]:"
+}
diff --git a/languages/i18n/af.json b/languages/i18n/af.json
new file mode 100644
index 00000000..3db54fb8
--- /dev/null
+++ b/languages/i18n/af.json
@@ -0,0 +1,3002 @@
+{
+ "@metadata": {
+ "authors": [
+ "Adriaan",
+ "Anrie",
+ "Arnobarnard",
+ "Byeboer",
+ "Deadelf",
+ "Kaganer",
+ "Kolega2357",
+ "Manie",
+ "Naudefj",
+ "Nemo bis",
+ "Purodha",
+ "Reedy",
+ "SPQRobin",
+ "Servien",
+ "Shirayuki",
+ "Spacebirdy",
+ "Xethron",
+ "පසිඳු කාවින්ද",
+ "아라"
+ ]
+ },
+ "tog-underline": "Onderstreep skakels.",
+ "tog-hideminor": "Moenie klein wysigings in die onlangse wysigingslys wys nie.",
+ "tog-hidepatrolled": "Versteek gepatrolleerde wysigings in onlangse wysigingslys",
+ "tog-newpageshidepatrolled": "Versteek gepatrolleerde wysigings van nuwe bladsy lys",
+ "tog-extendwatchlist": "Brei dophoulys uit om alle wysigings te wys, nie slegs die nuutste nie",
+ "tog-usenewrc": "Groepeer wysigings per bladsy in onlangse wysigings en dophoulys (benodig JavaScript)",
+ "tog-numberheadings": "Nommer opskrifte outomaties",
+ "tog-showtoolbar": "Wys redigeergereedskap",
+ "tog-editondblclick": "Dubbelkliek om te wysig",
+ "tog-editsectiononrightclick": "Wysig afdeling met regskliek op afdeling se titel (JavaScript)",
+ "tog-watchcreations": "Voeg bladsye wat ek skep en lêers wat ek oplaai by my dophoulys",
+ "tog-watchdefault": "Voeg bladsye en lêers wat ek wysig by my dophoulys",
+ "tog-watchmoves": "Voeg bladsye en lêers wat ek skuif by my dophoulys",
+ "tog-watchdeletion": "Voeg bladsye en lêers wat ek skrap by my dophoulys",
+ "tog-minordefault": "Merk alle wysigings automaties as klein by verstek.",
+ "tog-previewontop": "Wys voorskou bo wysigingsboks.",
+ "tog-previewonfirst": "Wys voorskou met eerste wysiging",
+ "tog-enotifwatchlistpages": "Stuur my e-pos as 'n bladsye of lêer op my dophoulys verander",
+ "tog-enotifusertalkpages": "Stuur vir my e-pos as my eie besprekingsblad verander word",
+ "tog-enotifminoredits": "Stuur ook e-pos vir klein wysigings aan bladsye en lêers",
+ "tog-enotifrevealaddr": "Stel my e-posadres bloot in kennisgewingspos",
+ "tog-shownumberswatching": "Wys die aantal gebruikers wat dophou",
+ "tog-oldsig": "Bestaande handtekening:",
+ "tog-fancysig": "Doodgewone handtekening (sonder outomatiese skakel)",
+ "tog-uselivepreview": "Gebruik lewendige voorskou (JavaScript) (eksperimenteel)",
+ "tog-forceeditsummary": "Let my daarop as ek nie 'n opsomming van my wysiging gee nie",
+ "tog-watchlisthideown": "Versteek my wysigings in dophoulys",
+ "tog-watchlisthidebots": "Versteek robotwysigings in dophoulys",
+ "tog-watchlisthideminor": "Versteek klein wysigings van my dophoulys",
+ "tog-watchlisthideliu": "Versteek wysigings deur aangetekende gebruikers van dophoulys",
+ "tog-watchlisthideanons": "Versteek wysigings deur anonieme gebruikers van dophoulys",
+ "tog-watchlisthidepatrolled": "Versteek gepatrolleerde wysigings van dophoulys",
+ "tog-ccmeonemails": "Stuur my 'n kopie van die e-pos wat ek aan ander stuur",
+ "tog-diffonly": "Moenie 'n bladsy se inhoud onder die wysigingsverskil wys nie",
+ "tog-showhiddencats": "Wys versteekte kategorië",
+ "tog-norollbackdiff": "Laat verskille weg na terugrol",
+ "tog-useeditwarning": "Waarsku my as ek 'n gewysigde bladsy verlaat voordat dit gestoor is",
+ "tog-prefershttps": "Gebruik altyd 'n beveiligde verbinding wanneer aangemeld is",
+ "underline-always": "Altyd",
+ "underline-never": "Nooit",
+ "underline-default": "Omslag of webblaaier se verstekwaarde",
+ "editfont-style": "Lettertipe vir wysigingsvenster:",
+ "editfont-default": "Blaaierverstek",
+ "editfont-monospace": "Monospaced lettertipe",
+ "editfont-sansserif": "Sans-serif lettertipe",
+ "editfont-serif": "Serif lettertipe",
+ "sunday": "Sondag",
+ "monday": "Maandag",
+ "tuesday": "Dinsdag",
+ "wednesday": "Woensdag",
+ "thursday": "Donderdag",
+ "friday": "Vrydag",
+ "saturday": "Saterdag",
+ "sun": "So",
+ "mon": "Ma",
+ "tue": "Di",
+ "wed": "Wo",
+ "thu": "Do",
+ "fri": "Vr",
+ "sat": "Sa",
+ "january": "Januarie",
+ "february": "Februarie",
+ "march": "Maart",
+ "april": "April",
+ "may_long": "Mei",
+ "june": "Junie",
+ "july": "Julie",
+ "august": "Augustus",
+ "september": "September",
+ "october": "Oktober",
+ "november": "November",
+ "december": "Desember",
+ "january-gen": "Januarie",
+ "february-gen": "Februarie",
+ "march-gen": "Maart",
+ "april-gen": "April",
+ "may-gen": "Mei",
+ "june-gen": "Junie",
+ "july-gen": "Julie",
+ "august-gen": "Augustus",
+ "september-gen": "September",
+ "october-gen": "Oktober",
+ "november-gen": "November",
+ "december-gen": "Desember",
+ "jan": "Jan",
+ "feb": "Feb",
+ "mar": "Mrt",
+ "apr": "Apr",
+ "may": "Mei",
+ "jun": "Jun",
+ "jul": "Jul",
+ "aug": "Aug",
+ "sep": "Sep",
+ "oct": "Okt",
+ "nov": "Nov",
+ "dec": "Des",
+ "january-date": "$1 Januarie",
+ "february-date": "$1 Februarie",
+ "march-date": "$1 Maart",
+ "april-date": "$1 April",
+ "may-date": "$1 Mei",
+ "june-date": "$1 Junie",
+ "july-date": "$1 Julie",
+ "august-date": "$1 Augustus",
+ "september-date": "$1 September",
+ "october-date": "$1 Oktober",
+ "november-date": "$1 November",
+ "december-date": "$1 Desember",
+ "pagecategories": "{{PLURAL:$1|Kategorie|Kategorieë}}",
+ "category_header": "Bladsye in kategorie \"$1\"",
+ "subcategories": "Subkategorieë",
+ "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ë",
+ "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.}}",
+ "category-article-count-limited": "Die volgende {{PLURAL:$1|bladsy|$1 bladsye}} is in die huidige kategorie.",
+ "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",
+ "broken-file-category": "Bladsye met gebreekte lêer skakels",
+ "about": "Aangaande",
+ "article": "Inhoudbladsy",
+ "newwindow": "(verskyn in nuwe venster)",
+ "cancel": "Kanselleer",
+ "moredotdotdot": "Meer…",
+ "morenotlisted": "Die lys is nie volledig nie.",
+ "mypage": "Gebruikersblad",
+ "mytalk": "Bespreking",
+ "anontalk": "Besprekingsblad vir hierdie IP",
+ "navigation": "Navigasie",
+ "and": "&#32;en",
+ "qbfind": "Vind",
+ "qbbrowse": "Snuffel",
+ "qbedit": "Wysig",
+ "qbpageoptions": "Bladsyopsies",
+ "qbmyoptions": "My bladsye",
+ "faq": "Gewilde vrae",
+ "faqpage": "Project:GewildeVrae",
+ "actions": "Aksies",
+ "namespaces": "Naamruimtes",
+ "variants": "Variante",
+ "navigation-heading": "Navigasie-keuseskerm",
+ "errorpagetitle": "Fout",
+ "returnto": "Keer terug na $1.",
+ "tagline": "in {{SITENAME}}",
+ "help": "Hulp",
+ "search": "Soek",
+ "searchbutton": "Soek",
+ "go": "Wys",
+ "searcharticle": "Wys",
+ "history": "Ouer weergawes",
+ "history_short": "Geskiedenis",
+ "updatedmarker": "opgedateer sedert my laaste besoek",
+ "printableversion": "Drukbare weergawe",
+ "permalink": "Permanente skakel",
+ "print": "Druk",
+ "view": "Wys",
+ "view-foreign": "Wys op $1",
+ "edit": "Wysig",
+ "edit-local": "Wysig plaaslike beskrywing",
+ "create": "Skep",
+ "create-local": "Voeg plaaslike beskrywing by",
+ "editthispage": "Wysig hierdie bladsy",
+ "create-this-page": "Skep hierdie bladsy",
+ "delete": "Skrap",
+ "deletethispage": "Skrap die bladsy",
+ "undeletethispage": "Ontskrap die bladsy",
+ "undelete_short": "Herstel {{PLURAL:$1|een wysiging|$1 wysigings}}",
+ "viewdeleted_short": "Wys {{PLURAL:$1|een geskrapte wysiging|$1 geskrapte wysigings}}",
+ "protect": "Beskerm",
+ "protect_change": "wysig",
+ "protectthispage": "Beskerm hierdie bladsy",
+ "unprotect": "Wysig beskerming",
+ "unprotectthispage": "Wysig beskerming vir die bladsy",
+ "newpage": "Nuwe bladsy",
+ "talkpage": "Bespreek hierdie bladsy",
+ "talkpagelinktext": "Besprekings",
+ "specialpage": "Spesiale bladsy",
+ "personaltools": "Persoonlike gereedskap",
+ "articlepage": "Lees artikel",
+ "talk": "Bespreking",
+ "views": "Weergawes",
+ "toolbox": "Gereedskap",
+ "userpage": "Lees gebruikersbladsy",
+ "projectpage": "Lees metabladsy",
+ "imagepage": "Lees bladsy oor lêer",
+ "mediawikipage": "Bekyk boodskapsbladsy",
+ "templatepage": "Bekyk sjabloonsbladsy",
+ "viewhelppage": "Bekyk hulpbladsy",
+ "categorypage": "Bekyk kategorieblad",
+ "viewtalkpage": "Lees bespreking",
+ "otherlanguages": "Ander tale",
+ "redirectedfrom": "(Aangestuur vanaf $1)",
+ "redirectpagesub": "Aanstuurblad",
+ "lastmodifiedat": "Die bladsy is laas op $1 om $2 bygewerk.",
+ "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.\nTe veel gebruikers probeer om na hierdie bladsy te kyk.\nWag asseblief 'n rukkie voordat u weer probeer om die bladsy op te roep.\n\n$1",
+ "generic-pool-error": "Jammer, die bedieners is tans oorbelas.\nTe veel gebruikers probeer om na hierdie bladsy te kyk.\nWag asseblief 'n rukkie voordat u weer probeer.",
+ "pool-timeout": "Die maksimum wagtyd vir 'n databasisversperring is oorskry.",
+ "pool-queuefull": "Die poel se wagtou is vol",
+ "pool-errorunknown": "Onbekende fout",
+ "pool-servererror": "Die \"pool counter\"-diens is nie beskikbaar nie ($1).",
+ "aboutsite": "Inligting oor {{SITENAME}}",
+ "aboutpage": "Project:Omtrent",
+ "copyright": "Inhoud is onderhewig aan $1, tensy anders vermeld",
+ "copyrightpage": "{{ns:project}}:kopiereg",
+ "currentevents": "Huidige gebeure",
+ "currentevents-url": "Project:Huidige gebeure",
+ "disclaimers": "Voorbehoud",
+ "disclaimerpage": "Project:Voorwaardes",
+ "edithelp": "Wysigingshulp",
+ "mainpage": "Tuisblad",
+ "mainpage-description": "Tuisblad",
+ "policy-url": "Project:Beleid",
+ "portal": "Gebruikersportaal",
+ "portal-url": "Project:Gebruikersportaal",
+ "privacy": "Privaatheidsbeleid",
+ "privacypage": "Project:Privaatheidsbeleid",
+ "badaccess": "Toestemmingsfout",
+ "badaccess-group0": "U is nie toegelaat om die aksie uit te voer wat u aangevra het nie.",
+ "badaccess-groups": "Die aksie wat u aangevra het is beperk tot gebruikers in {{PLURAL:$2|die groep|een van die groepe}}: $1.",
+ "versionrequired": "Weergawe $1 van MediaWiki benodig",
+ "versionrequiredtext": "Weergawe $1 van MediaWiki word benodig om hierdie bladsy te gebruik. Sien [[Special:Version|version page]].",
+ "ok": "OK",
+ "retrievedfrom": "Ontsluit van \"$1\"",
+ "youhavenewmessages": "U het $1 (sien $2).",
+ "youhavenewmessagesfromusers": "U het $1 van {{PLURAL:$3|'n ander gebruiker|$3 gebruikers}} ($2).",
+ "youhavenewmessagesmanyusers": "U het $1 van baie gebruikers ($2).",
+ "newmessageslinkplural": "{{PLURAL:$1|'n nuwe boodskap|999=nuwe boodskappe}}",
+ "newmessagesdifflinkplural": "laaste {{PLURAL:$1|wysiging|999=wysigings}}",
+ "youhavenewmessagesmulti": "U het nuwe boodskappe op $1",
+ "editsection": "wysig",
+ "editold": "wysig",
+ "viewsourceold": "bekyk bronteks",
+ "editlink": "wysig",
+ "viewsourcelink": "wys bronkode",
+ "editsectionhint": "Wysig afdeling: $1",
+ "toc": "Inhoud",
+ "showtoc": "wys",
+ "hidetoc": "versteek",
+ "collapsible-collapse": "Vou toe",
+ "collapsible-expand": "Vou oop",
+ "thisisdeleted": "Wys of herstel $1?",
+ "viewdeleted": "Bekyk $1?",
+ "restorelink": "{{PLURAL:$1|die geskrapte wysiging|$1 geskrapte wysigings}}",
+ "feedlinks": "Voer:",
+ "feed-invalid": "Voertipe word nie ondersteun nie.",
+ "feed-unavailable": "Sindikasievoer is nie beskikbaar",
+ "site-rss-feed": "$1 RSS-voer",
+ "site-atom-feed": "$1 Atom-voer",
+ "page-rss-feed": "\"$1\" RSS-voer",
+ "page-atom-feed": "\"$1\" Atom-voer",
+ "red-link-title": "$1 (bladsy bestaan nie)",
+ "sort-descending": "Sorteer aflopend",
+ "sort-ascending": "Sorteer oplopend",
+ "nstab-main": "Bladsy",
+ "nstab-user": "Gebruikerblad",
+ "nstab-media": "Mediablad",
+ "nstab-special": "Spesiale bladsy",
+ "nstab-project": "Projekblad",
+ "nstab-image": "Lêer",
+ "nstab-mediawiki": "Boodskap",
+ "nstab-template": "Sjabloon",
+ "nstab-help": "Hulpblad",
+ "nstab-category": "Kategorie",
+ "nosuchaction": "Ongeldige aksie",
+ "nosuchactiontext": "Die opdrag in die URL is ongeldig.\nU het moontlik 'n tikfout gemaak of 'n ongeldige skakel gevolg.\nDit kan ook dui op 'n fout in die sagteware van {{SITENAME}}.",
+ "nosuchspecialpage": "Ongeldige spesiale bladsy",
+ "nospecialpagetext": "<strong>U het 'n spesiale bladsy wat nie bestaan nie aangevra.</strong>\n\n'n Lys met geldige spesiale bladsye is beskikbaar by [[Special:SpecialPages|spesiale bladsye]].",
+ "error": "Fout",
+ "databaseerror": "Databasisfout",
+ "databaseerror-text": "'n Databasisfout het voorgekom. Dit kan op 'n fout in die sagteware dui.",
+ "databaseerror-textcl": "'n Databasis-versoek het gefaal.",
+ "databaseerror-query": "SQL: $1",
+ "databaseerror-function": "Funksie: $1",
+ "databaseerror-error": "Fout: $1",
+ "laggedslavemode": "Waarskuwing: Onlangse wysigings dalk nie in bladsy vervat nie.",
+ "readonly": "Databasis gesluit",
+ "enterlockreason": "Rede vir die sluiting,\nen beraming van wanneer ontsluiting sal plaasvind",
+ "readonlytext": "Die databasis is tans gesluit vir nuwe artikelwysigings, waarskynlik vir roetine onderhoud,\nwaarna dit terug sal wees na normaal.\n\nDie administrateur wat dit gesluit het se verduideliking: $1",
+ "missing-article": "Die databasis kon nie soos verwag die teks vir die bladsy genaamd \"$1\" $2 kry nie.\n\nDit gebeur gewoonlik as mens 'n verouderde verskil- of geskiedenis-skakel volg na 'n bladsy wat reeds verwyder is.\n\nIndien dit nie die geval is nie, het u moontlik 'n fout in die sagteware ontdek. Rapporteer asseblief die probleem aan 'n [[Special:ListUsers/sysop|administrateur]], en maak 'n nota van die URL.",
+ "missingarticle-rev": "(weergawe#: $1)",
+ "missingarticle-diff": "(Wysiging: $1, $2)",
+ "readonly_lag": "Die databasis is outomaties gesluit terwyl die slaafdatabasisse met die meester gesinchroniseer word",
+ "internalerror": "Interne fout",
+ "internalerror_info": "Interne fout: $1",
+ "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.",
+ "directorycreateerror": "Kon nie gids \"$1\" skep nie.",
+ "filenotfound": "Kon nie lêer \"$1\" vind nie.",
+ "unexpected": "Onverwagte waarde: \"$1\"=\"$2\".",
+ "formerror": "Fout: kon vorm nie stuur nie",
+ "badarticleerror": "Die aksie kon nie op hierdie bladsy uitgevoer word nie.",
+ "cannotdelete": "Die bladsy of lêer \"$1\" kon nie verwyder word nie.\nIemand anders het dit moontlik reeds geskrap.",
+ "cannotdelete-title": "Bladsy \"$1\" kan nie verwyder word nie",
+ "delete-hook-aborted": "Die wysiging is deur 'n hoek gekanselleer.\nGeen verduideliking is verskaf nie.",
+ "no-null-revision": "Dit was nie moontlik om 'n nuwe leë weergawe vir bladsy \"$1\" maak nie",
+ "badtitle": "Ongeldige titel",
+ "badtitletext": "Die bladsytitel waarvoor gevra is, is ongeldig, leeg, of\n'n verkeerd geskakelde tussen-taal of tussen-wiki titel.",
+ "perfcached": "Die volgende inligting is gekas en mag dalk nie op datum wees nie. 'n Maksimum van {{PLURAL:$1|een resultaat|$1 resultate}} is in die kas beskikbaar.",
+ "perfcachedts": "Die volgende data is gekas en is laas op $2 om $3 bygewerk. 'n Maksimum van {{PLURAL:$4|een resultaat|$4 resultate}} is in die kas beskikbaar.",
+ "querypage-no-updates": "Opdatering van hierdie bladsy is huidiglik afgeskakel. Inligting hier sal nie tans verfris word nie.",
+ "viewsource": "Wys bronteks",
+ "viewsource-title": "Wys bron van $1",
+ "actionthrottled": "Outo-rem op aksie uitgevoer",
+ "actionthrottledtext": "As 'n teen-strooi aksie, word u beperk om hierdie aksie te veel keer in 'n kort tyd uit te voer, en u het hierdie limiet oorskry.\nProbeer asseblief weer oor 'n paar minute.",
+ "protectedpagetext": "Hierdie bladsy is beskerm om wysigings en ander aksies te verhoed.",
+ "viewsourcetext": "U mag die bronteks van hierdie bladsy lees en kopieer:",
+ "viewyourtext": "U kan '''u wysigings''' aan die bronteks van hierdie bladsy bekyk en kopieer:",
+ "protectedinterface": "Hierdie bladsy verskaf teks vir die koppelvlak van die sagteware, en is beskerm om misbruik te voorkom.\nGebruik asseblief [//translatewiki.net/ translatewiki.net] om vertalings by te voeg of te wysig.",
+ "editinginterface": "'''Waarskuwing:''' U is besig om 'n bladsy te redigeer wat koppelvlakinligting aan die programmatuur voorsien. Wysigings aan hierdie bladsy sal die voorkoms van die gebruikerskoppelvlak vir ander gebruikers beïnvloed. Vir vertalings, oorweeg om eerder [//translatewiki.net/wiki/Main_Page?setlang=af translatewiki.net] (die vertalingsprojek vir MediaWiki) te gebruik.",
+ "cascadeprotected": "Hierdie bladsy is beskerm teen redigering omdat dit ingesluit is in die volgende {{PLURAL:$1|bladsy|bladsye}} wat beskerm is met die \"kaskade\" opsie aangeskakel: $2",
+ "namespaceprotected": "U het nie toestemming om bladsye in die '''$1'''-naamruimte te wysig nie.",
+ "customcssprotected": "U het nie toestemming om hierdie CSS-bladsy te redigeer nie, want dit bevat 'n ander gebruiker se persoonlike verstellings.",
+ "customjsprotected": "U het nie toestemming om hierdie JavaScript-bladsy te redigeer nie, want dit bevat 'n ander gebruiker se persoonlike verstellings.",
+ "mycustomcssprotected": "U het nie regte om die CSS-bladsy te wysig nie.",
+ "mycustomjsprotected": "U het nie regte om die JavaScript-bladsy te wysig nie.",
+ "myprivateinfoprotected": "U het nie regte om u persoonlike inligting te wysig nie.",
+ "mypreferencesprotected": "U het nie regte om u voorkeure te wysig nie.",
+ "ns-specialprotected": "Spesiale bladsye kan nie geredigeer word nie.",
+ "titleprotected": "Hierdie titel is beskerm teen skepping deur [[User:$1|$1]].\nDie rede gegee is ''$2''.",
+ "filereadonlyerror": "Dit was nie moontlik om die lêer \"$1\" te wysig nie omdat die lêerstoor \"$2\" tans lees-alleen is.\n\nDie rede hiervoor is \"''$3''\".",
+ "invalidtitle-knownnamespace": "Ongeldige titel met naamruimte \"$2\" en teks \"$3\"",
+ "invalidtitle-unknownnamespace": "Ongeldige titel met onbekende naamruimtenummer $1 en teks \"$2\"",
+ "exception-nologin": "Nie aangeteken nie",
+ "exception-nologin-text": "[[Special:Userlogin|Meld aan]] om hierdie bladsy te wys of om die handeling uit te voer.",
+ "exception-nologin-text-manual": "U moet $1 om hierdie bladsy te wys of die handeling uit te voer.",
+ "virus-badscanner": "Slegte konfigurasie: onbekende virusskandeerder: ''$1''",
+ "virus-scanfailed": "skandering het misluk (kode $1)",
+ "virus-unknownscanner": "onbekende antivirus:",
+ "logouttext": "'''U is nou afgemeld'''\n\nSommige bladsye kan moontlik nog aandui dat u steeds aangemeld is, totdat u u webblaaier se kas skoonmaak.",
+ "welcomeuser": "Welkom, $1!",
+ "welcomecreation-msg": "U gebruiker is geskep.\nMoenie vergeet om u [[Special:Preferences|voorkeure vir {{SITENAME}}]] te stel nie.",
+ "yourname": "Gebruikersnaam:",
+ "userlogin-yourname": "Gebruikersnaam",
+ "userlogin-yourname-ph": "Sleutel u gebruikersnaam in",
+ "createacct-another-username-ph": "Verskaf gebruikersnaam",
+ "yourpassword": "Wagwoord:",
+ "userlogin-yourpassword": "Wagwoord",
+ "userlogin-yourpassword-ph": "Sleutel u wagwoord in",
+ "createacct-yourpassword-ph": "Sleutel 'n wagwoord in",
+ "yourpasswordagain": "Herhaal wagwoord",
+ "createacct-yourpasswordagain": "Bevestig wagwoord",
+ "createacct-yourpasswordagain-ph": "Sleutel weer u wagwoord in",
+ "remembermypassword": "Onthou dat ek op hierdie rekenaar ingeteken het (vir 'n maksimum van $1 {{PLURAL:$1|dag|dae}})",
+ "userlogin-remembermypassword": "Hou my aangemeld",
+ "userlogin-signwithsecure": "Gebruik veilige verbinding",
+ "yourdomainname": "U domein:",
+ "password-change-forbidden": "U kan nie wagwoorde op hierdie wiki verander nie.",
+ "externaldberror": "'n Databasisfout het tydens aanmelding voorgekom of u het nie toestemming om u eksterne rekening op te dateer nie.",
+ "login": "Meld aan",
+ "nav-login-createaccount": "Meld aan / registreer",
+ "userlogin": "Meld aan / registreer",
+ "userloginnocreate": "Meld aan",
+ "logout": "Teken uit",
+ "userlogout": "Teken uit",
+ "notloggedin": "Nie ingeteken nie",
+ "userlogin-noaccount": "Nog nie geregistreer nie?",
+ "userlogin-joinproject": "Word lid van {{SITENAME}}",
+ "nologin": "Nog nie geregistreer nie? $1.",
+ "nologinlink": "Skep gerus 'n gebruiker",
+ "createaccount": "Skep nuwe rekening",
+ "gotaccount": "Het u reeds 'n rekening? $1.",
+ "gotaccountlink": "Meld aan",
+ "userlogin-resetlink": "U besonderhede vergeet?",
+ "userlogin-resetpassword-link": "Wagwoord vergeet?",
+ "userlogin-helplink2": "Hulp met aanmelding",
+ "userlogin-loggedin": "U is reeds aangemeld as {{GENDER:$1|$1}}.\nGebruik die onderstaande vorm om as 'n ander gebruiker aan te meld.",
+ "userlogin-createanother": "Skep nog 'n rekening",
+ "createacct-emailrequired": "E-posadres",
+ "createacct-emailoptional": "E-posadres (opsioneel)",
+ "createacct-email-ph": "Sleutel u e-posadres in",
+ "createacct-another-email-ph": "Verskaf e-posadres",
+ "createaccountmail": "Gebruik 'n tydelike lukrake wagwoord en stuur dit na die e-posadres hier onder",
+ "createacct-realname": "Regte naam (opsioneel)",
+ "createaccountreason": "Rede:",
+ "createacct-reason": "Rede",
+ "createacct-reason-ph": "Hoekom u nog 'n rekening skep",
+ "createacct-captcha": "Veiligheidskontrole",
+ "createacct-imgcaptcha-ph": "Sleutel die teks hierbo in",
+ "createacct-submit": "Skep u rekening",
+ "createacct-another-submit": "Skep nog 'n rekening",
+ "createacct-benefit-heading": "{{SITENAME}} word deur mense soos u geskep.",
+ "createacct-benefit-body1": "{{PLURAL:$1|wysiging|wysigings}}",
+ "createacct-benefit-body2": "{{PLURAL:$1|bladsy|bladsye}}",
+ "createacct-benefit-body3": "onlangse {{PLURAL:$1|bydraer|bydraers}}",
+ "badretype": "Die ingetikte wagwoorde is nie dieselfde nie.",
+ "userexists": "Die gebruikersnaam wat u gekies het is beset.\nKies asseblief 'n ander naam.",
+ "loginerror": "Intekenfout",
+ "createacct-error": "Fout tydens skep van gebruiker",
+ "createaccounterror": "Kon nie 'n rekening skep nie: $1",
+ "nocookiesnew": "Die gebruiker is geregistreer, maar is nie aangemeld nie.\n{{SITENAME}} gebruik koekies vir die aanmeld van gebruikers.\nU rekenaar laat tans nie koekies toe nie.\nStel u rekenaar om dit te aanvaar, dan sal u met u nuwe gebruiker en wagwoord kan aanmeld.",
+ "nocookieslogin": "{{SITENAME}} gebruik koekies vir die aanmeld van gebruikers.\nU blaaier laat nie koekies toe nie.\nSkakel dit asseblief aan en probeer weer.",
+ "nocookiesfornew": "Die gebruiker is nie geskep nie omdat die oorsprong nie bevestig kon word nie.\nMaak seker dat u koekies aangeskakel het, herlaai die bladsy en probeer dan weer.",
+ "noname": "Ongeldige gebruikersnaam.",
+ "loginsuccesstitle": "Suksesvolle aanmelding",
+ "loginsuccess": "U is nou by {{SITENAME}} as \"$1\" ingeteken.",
+ "nosuchuser": "Die gebruiker \"$1\" bestaan nie.\nGebruikersname is gevoelig vir hoofletters.\nMaak seker dit is reg gespel of [[Special:UserLogin/signup|skep 'n nuwe rekening]].",
+ "nosuchusershort": "Daar is geen gebruikersnaam \"$1\" nie. Maak seker dit is reg gespel.",
+ "nouserspecified": "U moet 'n gebruikersnaam spesifiseer.",
+ "login-userblocked": "Hierdie gebruiker is geblokkeer.\nIntekening word verbied.",
+ "wrongpassword": "Ongeldige wagwoord, probeer weer.",
+ "wrongpasswordempty": "Die wagwoord was leeg. Probeer asseblief weer.",
+ "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.",
+ "password-login-forbidden": "Die gebruik van hierdie gebruikersnaam en wagwoord is geweier.",
+ "mailmypassword": "E-pos nuwe wagwoord",
+ "passwordremindertitle": "Wagwoordwenk van {{SITENAME}}",
+ "passwordremindertext": "Iemand (waarskynlik u vanaf IP-adres $1) het 'n nuwe wagwoord vir {{SITENAME}} ($4) aangevra. 'n Tydelike wagwoord is vir gebruiker \"$2\" geskep. Die nuwe wagwoord is \"$3\". U kan met die tydelike wagwoord aanmeld en 'n nuwe wagwoord stel. Die tydelike wagwoord sal na {{PLURAL:$5|een dag|$5 dae}} verval.\n\nIndien 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": "'n Nuwe wagwoord is na die e-posadres vir \"$1\" gestuur.\nMeld asseblief aan sodra 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.",
+ "eauthentsent": "'n Bevestigingpos is gestuur na die gekose e-posadres.\nVoordat ander pos na die adres gestuur word,\nmoet die instruksies in bogenoemde pos gevolg word om te bevestig dat die adres werklik u adres is.",
+ "throttled-mailpassword": "Daar is reeds 'n wagwoordwenk in die laaste {{PLURAL:$1|uur|$1 ure}} gestuur.\nOm misbruik te voorkom, word slegs een E-pos per {{PLURAL:$1|uur|$1 ure}} gestuur.",
+ "mailerror": "Fout tydens e-pos versending: $1",
+ "acct_creation_throttle_hit": "Besoekers aan hierdie wiki wat u IP-adres gebruik het reeds {{PLURAL:$1|'n rekening|$1 rekeninge}} in die laaste dag geskep, wat die maksimum toelaatbaar is vir die periode. Dus kan besoekers wat hierdie IP-adres gebruik tans nie meer nuwe gebruikers registreer nie.",
+ "emailauthenticated": "U e-posadres is op $2 om $3 bevestig.",
+ "emailnotauthenticated": "U e-poasadres is <strong>nog nie bevestig nie</strong>. Geen e-pos sal gestuur word vir die volgende funksies nie.",
+ "noemailprefs": "Spesifiseer 'n e-posadres vir hierdie funksies om te werk.",
+ "emailconfirmlink": "Bevestig u e-posadres",
+ "invalidemailaddress": "Die e-posadres is nie aanvaar nie, aangesien dit 'n ongeldige formaat blyk te hê.\nVoer asseblief 'n geldige e-posadres in, of laat die veld leeg.",
+ "cannotchangeemail": "Die e-posadres vir 'n gebruiker kan nie op hierdie wiki gewysig word nie.",
+ "emaildisabled": "Hierdie webwerf kan nie e-poste stuur nie.",
+ "accountcreated": "Rekening geskep",
+ "accountcreatedtext": "Die rekening vir [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|bespreek]]) is geskep.",
+ "createaccount-title": "Rekeningskepping vir {{SITENAME}}",
+ "createaccount-text": "Iemand het 'n gebruiker met die naam \"$2\" en u e-posadres op {{SITENAME}} ($4) geskep.\nDie wagwoord vir \"$2\" is \"$3\".\nU word aangeraai om so gou as moontlik aan te meld en u wagwoord te verander.\n\nIgnoreer die boodskap as die gebruiker sonder u medewete geskep is.",
+ "login-throttled": "U het al te veel kere met 'n ongeldige wagwoord probeer aanmeld.\nWag asseblief alvorens u weer probeer.",
+ "login-abort-generic": "U is nie aangemeld nie. Die prosedure is gestaak.",
+ "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.",
+ "createacct-another-realname-tip": "Regte naam is opsioneel.\nAs u dit verskaf, sal dit gebruik word om u erkenning vir u werk te gee.",
+ "pt-login": "Meld aan",
+ "pt-login-button": "Meld aan",
+ "pt-createaccount": "Skep gebruiker",
+ "pt-userlogout": "Meld af",
+ "php-mail-error-unknown": "Onbekende fout in PHP se mail()-funksie",
+ "user-mail-no-addy": "Geprobeer om e-pos te stuur sonder 'n e-posadres.",
+ "user-mail-no-body": "Daar is probeer om 'n leë of 'n onredelike kort boodskap te stuur.",
+ "changepassword": "Verander wagwoord",
+ "resetpass_announce": "U het aangeteken met 'n tydelike e-poskode.\nOm voort te gaan moet u 'n nuwe wagwoord hier kies:",
+ "resetpass_text": "<!-- Voeg teks hier by -->",
+ "resetpass_header": "Verander wagwoord",
+ "oldpassword": "Ou wagwoord",
+ "newpassword": "Nuwe wagwoord",
+ "retypenew": "Tik nuwe wagwoord weer in",
+ "resetpass_submit": "Stel wagwoord en meld aan",
+ "changepassword-success": "U wagwoord is suksesvol gewysig!",
+ "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.\nU het moontlik reeds u wagwoord gewysig of 'n nuwe tydelike wagwoord aangevra.",
+ "resetpass-temp-password": "Tydelike wagwoord:",
+ "resetpass-abort-generic": "Wysiging van wagwoord is deur 'n uitbreiding gestop.",
+ "passwordreset": "Wagwoord herstel",
+ "passwordreset-text-one": "Voltooi hierdie vorm om u wagwoord te herstel.",
+ "passwordreset-text-many": "{{PLURAL:$1|Vul een van die velde in om 'n tydelike wagwoord per e-pos te ontvang.}}",
+ "passwordreset-legend": "Kry nuwe wagwoord",
+ "passwordreset-disabled": "Die herskik van U wagwoord is gedeaktiveer op hierdie wiki.",
+ "passwordreset-emaildisabled": "E-posfunksies is afgeskakel op hierdie wiki.",
+ "passwordreset-username": "Gebruiker:",
+ "passwordreset-domain": "Domein:",
+ "passwordreset-capture": "Wys resulterende e-pos?",
+ "passwordreset-capture-help": "As u die boks merk, word die e-pos (met die tydelike wagwoord) aan u getoon en aan die gebruiker gestuur.",
+ "passwordreset-email": "E-posadres:",
+ "passwordreset-emailtitle": "Gebruiker se details op {{site name}}",
+ "passwordreset-emailtext-ip": "Iemand, waarskynlik u vanaf die IP-adres $1, het u gebruikersgegewens vir {{SITENAME}} ($4) opgevra.\nDie volgende {{PLURAL:$3|gebruiker is|gebruikers is}} aan die e-posadres gekoppel:\n\n$2\n\n{{PLURAL:$3|Die tydelike wagwoord verval|Hierdie tydelike wagwoorde verval}} oor {{PLURAL:$5|een dag|$5 dae}}.\nMeld asseblief nou aan en wysig u wagwoord. As u dit nie versoek het nie, of as u die oorspronklike wagwoord nog ken en dit nie wil verander nie, ignoreer die berig en hou aan om u ou wagwoord te gebruik.",
+ "passwordreset-emailtext-user": "Gebruiker $1 op die webtuiste {{SITENAME}} het u gebruikersgegewens vir {{SITENAME}} ($4) opgevra.\nDie volgende {{PLURAL:$3|gebruiker is|gebruikers is}} aan die e-posadres gekoppel:\n\n$2\n\n{{PLURAL:$3|Die tydelike wagwoord verval|Hierdie tydelike wagwoorde verval}} oor {{PLURAL:$5|een dag|$5 dae}}.\nMeld asseblief aan en verander u wagwoord nou. As u dit nie versoek het nie, of as u die oorspronklike wagwoord nog ken en dit nie wil verander nie, ignoreer die berig en hou aan om u ou wagwoord te gebruik.",
+ "passwordreset-emailelement": "Gebruikersnaam: $1\nTydelike wagwoord: $2",
+ "passwordreset-emailsent": "'n E-pos is gestuur om u wagwoord te herstel.",
+ "passwordreset-emailsent-capture": "'n E-pos vir die herstel van 'n wagwoord is gestuur. Dit word hieronder vertoon.",
+ "passwordreset-emailerror-capture": "'n E-pos vir die herstel van 'n wagwoord is saamgestel. Dit word hieronder vertoon. Die uitstuur daarvan na die {{GENDER:$2|gebruiker}} het egter gefaal: $1",
+ "changeemail": "Wysig E-posadres",
+ "changeemail-header": "Wysig rekening se e-posadres",
+ "changeemail-text": "Voltooi die vorm om u e-posadres te verander. U sal u wagwoord moet insleutel om die verandering te bevestig.",
+ "changeemail-no-info": "U moet aangemeld wees om regstreeks toegang tot die bladsy te kry.",
+ "changeemail-oldemail": "Huidige e-posadres:",
+ "changeemail-newemail": "Nuwe e-posadres:",
+ "changeemail-none": "(geen)",
+ "changeemail-password": "U wagwoord vir {{SITENAME}}:",
+ "changeemail-submit": "Wysig E-posadres",
+ "changeemail-cancel": "Kanselleer",
+ "resettokens-token-label": "$1 (huidige waarde: $2)",
+ "bold_sample": "Vetgedrukte teks",
+ "bold_tip": "Vetdruk",
+ "italic_sample": "Skuinsgedrukte teks",
+ "italic_tip": "Skuinsdruk",
+ "link_sample": "Skakelnaam",
+ "link_tip": "Interne skakel",
+ "extlink_sample": "http://www.voorbeeld.org skakel se titel",
+ "extlink_tip": "Eksterne skakel (onthou http:// vooraan)",
+ "headline_sample": "Opskrif",
+ "headline_tip": "Vlak 2-opskrif",
+ "nowiki_sample": "Plaas ongeformatteerde teks hier",
+ "nowiki_tip": "Ignoreer wiki-formattering",
+ "image_sample": "Voorbeeld.jpg",
+ "image_tip": "Beeld/prentjie/diagram",
+ "media_sample": "Voorbeeld.ogg",
+ "media_tip": "Skakel na ander tipe medialêer",
+ "sig_tip": "Handtekening met datum",
+ "hr_tip": "Horisontale streep (selde nodig)",
+ "summary": "Opsomming:",
+ "subject": "Onderwerp/opskrif:",
+ "minoredit": "Klein wysiging",
+ "watchthis": "Hou bladsy dop",
+ "savearticle": "Stoor bladsy",
+ "preview": "Voorskou",
+ "showpreview": "Wys voorskou",
+ "showdiff": "Wys veranderings",
+ "anoneditwarning": "'''Waarskuwing:''' Aangesien u nie aangeteken is nie, sal u IP-adres in dié blad se wysigingsgeskiedenis gestoor word.",
+ "anonpreviewwarning": "''U is nie aangeteken nie.''\n''As u die bladsy stoor sal u IP-adres in die bladsy se geskeidenis aangeteken word.''",
+ "missingsummary": "'''Neem kennis''': Geen opsomming van die wysiging is verskaf nie. As \"Stoor\" weer gekliek word, word die wysiging sonder 'n opsomming gestoor.",
+ "missingcommenttext": "Tik die opsomming onder.",
+ "missingcommentheader": "'''Let op:''' U het geen onderwerp/opskrif vir die opmerking verskaf nie. As u weer op \"{{int:savearticle}}\" klik, sal u wysiging sonder die onderwerp/opskrif gestoor word.",
+ "summary-preview": "Opsommingsvoorskou:",
+ "subject-preview": "Onderwerp/opskrif voorskou:",
+ "blockedtitle": "Gebruiker is geblokkeer",
+ "blockedtext": "'''U gebruiker of IP-adres is geblokkeer.'''\n\nDie blokkade is deur $1 uitgevoer.\nDie rede verskaf is ''$2''.\n\n* Begin van blokkade: $8\n* Blokkade eindig: $6\n* Blokkade gemik teen: $7\n\nU mag $1 of een van die ander [[{{MediaWiki:Grouppage-sysop}}|administrateurs]] kontak om dit te bespreek.\nU kan nie die 'e-pos hierdie gebruiker'-opsie gebruik nie, tensy 'n geldige e-posadres in u [[Special:Preferences|voorkeure]] gespesifiseer is en u nie geblokkeer is om dit te gebruik nie.\nU huidige IP-adres is $3 en die blokkadenommer is #$5.\nSluit asseblief een of albei hierdie verwysings by enige navrae in.",
+ "autoblockedtext": "U IP-adres is outomaties geblok omdat dit deur 'n gebruiker gebruik was, wat deur $1 geblokkeer is.\nDie rede verskaf is:\n\n:''$2''\n\n* Aanvang van blok: $8\n* Einde van blok: $6\n* Bedoelde blokkeerder: $7\n\nU kan die blok met $1 of enige van die [[{{MediaWiki:Grouppage-sysop}}|administrateurs]] bespreek.\n\nNeem kennis dat u slegs die 'e-pos die gebruiker' funksionaliteit kan gebruik as u 'n geldige e-posadres het in u [[Special:Preferences|voorkeure]] het, en die gebruik daarvan is nie ook geblokkeer is nie.\n\nU huidige IP-adres is $3 en die blokkadenommer is #$5.\nVermeld asseblief die bovermelde bloknommer as u die saak rapporteer,",
+ "blockednoreason": "geen rede verskaf nie",
+ "whitelistedittext": "U moet $1 om bladsye te wysig.",
+ "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.\nDis was moontlik geskuif of verwyder terwyl u die bladsy gelees het.",
+ "loginreqtitle": "Aanmelding is verpligtend",
+ "loginreqlink": "meld aan",
+ "loginreqpagetext": "U moet $1 om ander bladsye te bekyk.",
+ "accmailtitle": "Wagwoord gestuur.",
+ "accmailtext": "'n Lukrake wagwoord vir [[User talk:$1|$1]] is na $2 gestuur.\n\nDie wagwoord vir hierdie nuwe gebruiker kan op die ''[[Special:ChangePassword|verander wagwoord]]''-bladsy verander word nadat ingeteken is.",
+ "newarticle": "(Nuut)",
+ "newarticletext": "Hierdie bladsy bestaan nie.\nTik iets in die invoerboks hier onder om 'n nuwe bladsy te skep. Meer inligting is op die [$1 hulpbladsy] beskikbaar.\nAs u per ongeluk hier uitgekom het, gebruik u blaaier se '''terug'''-knoppie.",
+ "anontalkpagetext": "----''Hierdie is die besprekingsblad vir 'n anonieme gebruiker wat nog nie 'n gebruiker geskep het nie, of wat dit nie gebruik nie.\nDaarom moet ons sy/haar numeriese IP-adres vir identifikasie gebruik.\nSó 'n adres kan deur verskeie gebruikers gedeel word.\nIndien u 'n anonieme gebruiker is wat voel dat ontoepaslike kommentaar teen u gerig is, [[Special:UserLogin/signup|skep 'n gebruiker]] of [[Special:UserLogin|meld aan]] om verwarring met ander anonieme gebruikers te voorkom.''",
+ "noarticletext": "Hierdie bladsy bevat geen teks nie.\nU kan [[Special:Search/{{PAGENAME}}|vir die bladsytitel in ander bladsye soek]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} die verwante logboeke deursoek]\nof [{{fullurl:{{FULLPAGENAME}}|action=edit}} hierdie bladsy wysig]</span>.",
+ "noarticletext-nopermission": "Hierdie bladsy bevat geen teks nie.\nU kan vir die term [[Special:Search/{{PAGENAME}}|in ander bladsye soek]] of\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} die verwante logboeke deursoek]</span>, maar u kan nie die bladsy skep nie.",
+ "missing-revision": "Die weergawe #$1 van die bladsy \"{{FULLPAGENAME}} bestaan nie.\n\nDit word meestal veroorsaak deur die volg van 'n verouderde verwysing na 'n bladsy wat verwyder is.\nMeer gegewens kan moontlik in die [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} skraplogboek] gevind word.",
+ "userpage-userdoesnotexist": "U is besig om 'n gebruikersblad wat nie bestaan nie te wysig (gebruiker \"<nowiki>$1</nowiki>\"). 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.\nDie laaste inskrywing in die blokkeerlogboek word hieronder vertoon:",
+ "clearyourcache": "'''Neem kennis''': Na die wysiging is dit dalk nodig om u blaaier se kasgeheue verfris voordat u die veranderinge sal sien:\n* '''Firefox / Safari:''' hou ''Shift'' en kliek ''Reload'', of druk ''Ctrl-F5'' of ''Ctrl-R'' (''⌘-R'' op 'n Mac)\n* '''Google Chrome:''' druk ''Ctrl-Shift-R'' (''⌘-Shift-R'' op 'n Mac)\n* '''Internet Explorer:''' hou ''Ctrl'' en kliek ''Refresh'', of druk ''Ctrl-F5''\n* '''Opera:''' maak die kas skoon by ''Tools → Preferences''",
+ "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.'''\n'''Dit is nog nie gestoor nie!'''",
+ "userjspreview": "'''Onthou hierdie is slegs 'n toets/voorskou van u gebruiker-JavaScript, dit is nog nie gestoor nie.'''",
+ "sitecsspreview": "'''Onthou dat u na 'n voorskou van die CSS-kode kyk.'''\n'''Dit is nog nie gestoor nie!'''",
+ "sitejspreview": "'''Onthou dat u na 'n voorskou van die JavaScript-kode kyk.'''\n'''Dit is nog nie gestoor nie!'''",
+ "userinvalidcssjstitle": "'''Waarskuwing:''' daar is nie 'n omslag \"$1\" nie.\nOnthou dat u eie .css- en .js-bladsye met 'n kleinletter begin, byvoorbeeld {{ns:user}}:Naam/vector.css in plaas van {{ns:user}}:Naam/Vector.css.",
+ "updated": "(Gewysig)",
+ "note": "'''Nota:'''",
+ "previewnote": "'''Onthou dat hierdie slegs 'n voorskou is.'''\nU teks is nog nie gestoor nie!",
+ "continue-editing": "Wysig verder",
+ "previewconflict": "Hierdie voorskou vertoon die teks in die boonste teksarea soos dit sou lyk as u die bladsy stoor.",
+ "session_fail_preview": "'''Jammer! Weens verlies aan sessie-inligting is die wysiging nie verwerk nie.\nProbeer asseblief weer. As dit steeds nie werk nie, probeer om [[Special:UserLogout|af te teken]] en dan weer aan te meld.'''",
+ "session_fail_preview_html": "'''Jammer! U wysigings is nie verwerk nie omdat sessie-data verlore gegaan het.'''\n\n''Omrede rou HTML hier by {{SITENAME}} ingevoer kan word, kan die voorskou nie gesien word nie ter beskerming teen aanvalle met JavaScript.''\n\n'''As dit 'n regmatige wysiging is, probeer asseblief weer. As dit daarna nog nie werk nie, [[Special:UserLogout|teken dan af]] en weer aan.'''",
+ "token_suffix_mismatch": "'''U wysiging is geweier omdat u webblaaier leestekens in die wysigingsveld verkeerdelik geïnterpreteer het.\nDie bewerking is geweier om verminking van die bladsy se teks te voorkom.\nDit gebeur soms as 'n webgebaseerde instaandiens (proxy) gebruik word wat foute bevat.",
+ "edit_form_incomplete": "'''Dele van die vorm het nie die bediener bereik nie. Kyk of alles reg lyk en probeer weer.'''",
+ "editing": "Besig om $1 te wysig",
+ "creating": "Besig om $1 te skep",
+ "editingsection": "Besig om $1 (onderafdeling) te wysig",
+ "editingcomment": "Besig om $1 te wysig (nuwe opskrif)",
+ "editconflict": "Wysigingskonflik: $1",
+ "explainconflict": "Iemand anders het hierdie bladsy gewysig sedert u dit begin wysig het.\nDie boonste invoerboks het die teks wat tans bestaan.\nU wysigings word in die onderste invoerboks gewys.\nU sal u wysigings moet saamsmelt met die huidige teks.\n'''Slegs''' die teks in die boonste invoerboks sal gestoor word wanneer u \"{{int:savearticle}}\" druk.",
+ "yourtext": "U teks",
+ "storedversion": "Gestoorde weergawe",
+ "nonunicodebrowser": "'''Waarskuwing: U webblaaier ondersteun nie Unikode nie.'''\nDie MediaWiki-sagteware hou hiermee rekening sodat u bladsye veilig kan wysig: nie-ASCII karakters word in die wysigingsvenster as heksadesimale kodes weergegee.",
+ "editingold": "'''WAARSKUWING: U is besig om 'n ouer weergawe van hierdie bladsy te wysig.\nAs u dit stoor, sal enige wysigings sedert hierdie een weer uitgewis word.'''",
+ "yourdiff": "Wysigings",
+ "copyrightwarning": "Alle bydraes aan {{SITENAME}} word onder die $2 beskikbaar gestel (lees $1 vir meer inligting).\nAs u nie wil toelaat dat u teks deur ander persone gewysig of versprei word nie, moet dit asseblief nie hier invoer nie.<br />\nHierdeur beloof u ons dat u die byvoegings self geskryf het, of gekopieer het van publieke domein of soortgelyke vrye bronne.\n'''MOENIE WERK WAT DEUR KOPIEREG BESKERM WORD HIER PLAAS SONDER TOESTEMMING NIE!'''",
+ "copyrightwarning2": "Enige bydraes op {{SITENAME}} mag genadeloos gewysig of selfs verwyder word; indien u dit nie met u bydrae wil toelaat nie, moenie dit hier bylas nie.<br />\nDeur enigiets hier te plaas, beloof u dat u dit self geskryf het, of dat dit gekopieer is vanuit \"publieke domein\" of soortgelyke vrye bronne (sien $1 vir details).\n'''MOENIE WERK WAT DEUR KOPIEREG BESKERM WORD HIER PLAAS SONDER TOESTEMMING NIE!'''",
+ "longpageerror": "'''Fout: die teks wat u bygevoeg het is {{PLURAL:$1|een kilogreep|$1 kilogrepe}} groot, wat groter is as die maksimum van {{PLURAL:$2|een kilogreep|$2 kilogrepe}}.'''\nDie bladsy kan nie gestoor word nie.",
+ "readonlywarning": "'''WAARSKUWING: Die databasis is gesluit vir onderhoud. Dus sal u nie nou u wysigings kan stoor nie.'''\nDit is miskien verstandig om die teks tydelik in 'n lêer plak en te stoor vir later wanneer die databasis weer oop is.\n\nDie administrateur wat dit gesluit het se verduideliking: $1",
+ "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 beskerm 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: Hierdie bladsy is beveilig. Slegs gebruikers met [[Special:ListGroupRights|spesiale regte]] sal dit kan skep.'''\nDie nuutste logboekinskrywing word hieronder ter verwysing vertoon:",
+ "templatesused": "{{PLURAL:$1|Sjabloon|Sjablone}} wat op hierdie bladsy gebruik word:",
+ "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ë}}:",
+ "edittools": "<!-- Die teks hier sal onderaan wysiging- en oplaaivorms vertoon word. -->",
+ "nocreatetext": "{{SITENAME}} het die skep van nuwe bladsye beperk.\nU kan slegs bestaande bladsye wysig, of u kan [[Special:UserLogin|aanmeld of 'n gebruiker 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": "Toestemmingsfout",
+ "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-moveddeleted-warn": "'''Waarskuwing: U herskep 'n bladsy wat vantevore verwyder is.'''\n\nU moet besluit of dit wys is om voort te gaan om aan hierdie bladsy te werk.\nDie skrap- en skuiflogboeke vir die bladsy word vir u gerief hier onder vertoon:",
+ "moveddeleted-notice": "Hierdie bladsy is verwyder.\nDie skrap- en skuiflogboeke word hieronder ter inligting weergegee.",
+ "log-fulllog": "Wys volledige logboek",
+ "edit-hook-aborted": "Die wysiging is deur 'n hoek gekanselleer.\nGeen verduideliking is verskaf nie.",
+ "edit-gone-missing": "Die bladsy is nie gewysig nie.\nDit lyk of dit verwyder is.",
+ "edit-conflict": "Wysigingskonflik",
+ "edit-no-change": "U wysiging was geignoreer omdat die teks nie verander is nie.",
+ "postedit-confirmation-created": "Die bladsy is geskep.",
+ "postedit-confirmation-restored": "Die bladsy is teruggeplaas.",
+ "postedit-confirmation-saved": "U wysigings is gestoor.",
+ "edit-already-exists": "Die bladsy is nie geskep nie.\nDit bestaan alreeds.",
+ "defaultmessagetext": "Verstekteks",
+ "content-failed-to-parse": "Dit was nie moontlik om die inhoud van die MIME-tipe $2 vir die model $1 te verwerk nie: $3.",
+ "invalid-content-data": "Ongeldige inhoud",
+ "content-not-allowed-here": "\"$1\" word nie op bladsy [[$2]] toegelaat nie.",
+ "editwarning-warning": "As u hierdie bladsy verlaat, verloor u moontlik al die wysigings wat u aangebring het.\nIndien u aangemeld is, kan u hierdie waarskuwing in die \"Wysigings\"-afdeling van u voorkeure afskakel.",
+ "content-model-wikitext": "Wikiteks",
+ "content-model-text": "eenvoudige teks",
+ "content-model-javascript": "JavaScript",
+ "content-model-css": "CSS",
+ "expensive-parserfunction-warning": "Waarskuwing: Die bladsy gebruik te veel duur ontlederfunksies.\n\nDaar is {{PLURAL:$1|$1 funksie|$1 funksies}}, terwyl die bladsy minder as $2 moet hê.",
+ "expensive-parserfunction-category": "Bladsye wat te veel duur ontlederfunkies gebruik",
+ "post-expand-template-inclusion-warning": "'''Waarskuwing:''' Die maksimum toelaatbare grootte vir die insluiting van sjablone is oorskry.\nSommige van die sjablone sal nie ingesluit word nie.",
+ "post-expand-template-inclusion-category": "Bladsye waar die maksimum sjabloon insluit grootte oorskry is",
+ "post-expand-template-argument-warning": "Waarskuwing: hierdie bladsy bevat ten minste een sjabloonparameter met 'n te groot transklusiegrootte.\nHierdie 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)",
+ "node-count-exceeded-category": "Bladsye waar die maksimum aantal nodes oorskry is",
+ "node-count-exceeded-warning": "Hierdie bladsy oorskry die maksimum aantal nodes",
+ "expansion-depth-exceeded-category": "Bladsye waar die uitbreidingsdiepte oorskry is",
+ "expansion-depth-exceeded-warning": "Die bladsy bevat te veel sjablone",
+ "parser-unstrip-loop-warning": "'n \"Unstrip\"-lus is bespreur.",
+ "parser-unstrip-recursion-limit": "Die rekursielimiet ($1) vir \"unstrip\" is oorskry",
+ "converter-manual-rule-error": "'n Fout is in 'n handmatig toegevoegde taalomskalelingsreël gevind.",
+ "undo-success": "Die wysiging kan ongedaan gemaak word.\nKontroleer die vergelyking hieronder om seker te maak dis wat u wil doen, en stoor dan om die terugrol te voltooi.",
+ "undo-failure": "Die wysiging kan nie ongedaan gemaak word nie omdat dit met intermediêre wysigings bots.",
+ "undo-norev": "Die wysiging kon nie ongedaan gemaak word nie omdat dit nie bestaan nie of reeds verwyder is.",
+ "undo-nochange": "Die wysiging is klaarblyklik reeds teruggerol.",
+ "undo-summary": "Rol weergawe $1 deur [[Special:Contributions/$2|$2]] ([[User talk:$2|bespreek]]) terug.",
+ "undo-summary-username-hidden": "Rol weergawe $1 deur 'n versteekte gebruiker terug",
+ "cantcreateaccounttitle": "Kan nie rekening skep nie",
+ "cantcreateaccount-text": "Die registrasie van nuwe rekeninge vanaf die IP-adres ('''$1''') is geblok deur [[User:$3|$3]].\n\nDie rede verskaf deur $3 is ''$2''",
+ "viewpagelogs": "Bekyk logboeke vir hierdie bladsy",
+ "nohistory": "Daar is geen wysigingsgeskiedenis vir hierdie bladsy nie.",
+ "currentrev": "Huidige wysiging",
+ "currentrev-asof": "Huidige wysiging per $1",
+ "revisionasof": "Wysiging soos op $1",
+ "revision-info": "Weergawe soos op $1 deur $2",
+ "previousrevision": "← Ouer weergawe",
+ "nextrevision": "Nuwer weergawe →",
+ "currentrevisionlink": "Huidige weergawe",
+ "cur": "huidige",
+ "next": "volgende",
+ "last": "vorige",
+ "page_first": "eerste",
+ "page_last": "laaste",
+ "histlegend": "Byskrif: (huidige) = verskil van huidige weergawe,\n(vorige) = verskil van vorige weergawe, M = klein wysiging",
+ "history-fieldset-title": "Blaai deur geskiedenis",
+ "history-show-deleted": "Slegs geskrapte",
+ "histfirst": "oudste",
+ "histlast": "nuutste",
+ "historysize": "({{PLURAL:$1|1 greep|$1 grepe}})",
+ "historyempty": "(leeg)",
+ "history-feed-title": "Weergawegeskiedenis",
+ "history-feed-description": "Wysigingsgeskiedenis vir die bladsy op die wiki",
+ "history-feed-item-nocomment": "$1 by $2",
+ "history-feed-empty": "Die verlangde bladsy bestaan nie.\nDit was moontlik geskrap of geskuif.\n[[Special:Search|Deursoek die wiki]] vir relevante bladsye.",
+ "rev-deleted-comment": "(opmerking verwyder)",
+ "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'''.\nVir meer besonderhede, raadpleeg die [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} skrapingslogboek].",
+ "rev-deleted-text-unhide": "Hierdie weergawe van die bladsy is '''verwyder'''.\nDetails kan in die [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} skraplogboek] gevind word.\nU kan steeds na [$1 die weergawe kyk] as u wil voortgaan.",
+ "rev-suppressed-text-unhide": "Hierdie weergawe van die bladsy word '''onderdruk'''.\nDetails kan in die [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} logboek van onderdrukte weergawes] gevind word.\nAs u wil voortgaan kan u steeds [$1 die weergawe sien].",
+ "rev-deleted-text-view": "Hierdie weergawe is '''verwyder'''.\nU dit wel sien. Details kan in die [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} skraplogboek] gevind word.",
+ "rev-suppressed-text-view": "Hierdie weergawe van die bladsy word '''onderdruk'''.\nU kan dit wel sien. Details kan in die [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} logboek van onderdrukte weergawes] gevind word.",
+ "rev-deleted-no-diff": "U kan nie die verskille sien nie omdat een van die weergawes '''verwyder''' is.\nDetails 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 die verskil wat u aangevra het is '''verwyder'''.\nDetails kan in die [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} skraplogboek] gevind word.\nU kan steeds [$1 die verskille sien] as u wil voortgaan.",
+ "rev-suppressed-unhide-diff": "Een van die weergawes vir die verskil wat u aangevra het is '''onderdruk'''.\nDetails kan in die [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} verbergingslogboek] gesien word.\nU kan 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'''.\nU kan steeds hierdie verskil sien. Details kan in die [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} skraplogboek] gevind word.",
+ "rev-suppressed-diff-view": "Een van die weergawes vir die verskil wat u aangevra het is '''onderdruk'''.\nU kan wel hierdie verskil sien. Meer details kan in die [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} verbergingslogboek] gevind word.",
+ "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-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",
+ "logdelete-selected": "Geselekteerde {{PLURAL:$1|logboek aksie|logboek aksies}}:",
+ "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:\n* Potensieel lasterlike inligting\n* Ongepaste persoonlike inligting\n*: ''woonadres, telefoonnommers, ID-nommers, ensovoorts.''",
+ "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": "Versteek",
+ "revdelete-radio-unset": "Sigbaar",
+ "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-success": "'''Die sigbaarheid van die wysiging is suksesvol opgedateer.'''",
+ "revdelete-failure": "'''Die sigbaarheid van die wysiging kon nie opgedateer word nie:'''\n$1",
+ "logdelete-success": "'''Sigbaarheid van die gebeurtenis suksesvol gestel.'''",
+ "logdelete-failure": "'''Sigbaarheid kon nie vir die logboekreël gestel word nie:'''\n$1",
+ "revdel-restore": "Verander sigbaarheid",
+ "pagehist": "Bladsy geskiedenis",
+ "deletedhist": "Verwyderde geskiedenis",
+ "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.\nU 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.\nKontroleer 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\n** Skending van outeursreg\n** Onbetaamlike persoonlike inligting\n** Onbetaamlike gebruikersnaam\n** Potensieel lasterlike gegewens",
+ "revdelete-otherreason": "Ander rede:",
+ "revdelete-reasonotherlist": "Ander rede",
+ "revdelete-edit-reasonlist": "Wysig skrap redes",
+ "revdelete-offender": "Outeur van hersiening:",
+ "suppressionlog": "Verbergingslogboek",
+ "suppressionlogtext": "Die onderstaande lys bevat verwyderings en blokkades wat vir administrateurs versteek is.\nKyk na die [[Special:BlockList|blokkeerlys]] om die huidige blokkades te sien.",
+ "mergehistory": "Geskiedenis van bladsy samesmeltings",
+ "mergehistory-header": "Hierdie bladsy laat u toe om weergawes uit die geskiedenis van 'n bronbladsy na 'n ander nuwer bladsy oor te dra.\nMaak asseblief seker dat die verandering historiese kontinuïteit sal handhaaf.",
+ "mergehistory-box": "Versmelt weergawes van twee bladsye:",
+ "mergehistory-from": "Bronbladsy:",
+ "mergehistory-into": "Bestemmingsbladsy:",
+ "mergehistory-list": "Versmeltbare wysigingsgeskiedenis",
+ "mergehistory-merge": "Die volgende weergawes van [[:$1]] kan met [[:$2]] versmelt word.\nGebruik die kolom met sirkeltjies om slegs die weergawes wat op en voor die gespesifiseerde tyd gemaak is saam te voeg.\nLet op dat die gebruik van navigasieskakels hierdie kolom se waardes sal herstel.",
+ "mergehistory-go": "Wys versmeltbare wysigings",
+ "mergehistory-submit": "Versmelt weergawes",
+ "mergehistory-empty": "Geen weergawes kan versmelt word nie.",
+ "mergehistory-success": "$3 {{PLURAL:$3|weergawe|weergawes}} van [[:$1]] is suksesvol versmelt met [[:$2]].",
+ "mergehistory-fail": "Kan nie geskiedenis versmelt nie, kontroleer asseblief die bladsy- en tydinstellings.",
+ "mergehistory-no-source": "Bronbladsy $1 bestaan nie.",
+ "mergehistory-no-destination": "Bestemmingsbladsy $1 bestaan nie.",
+ "mergehistory-invalid-source": "Bronbladsy moet 'n geldige titel wees.",
+ "mergehistory-invalid-destination": "Bestemmingsbladsy moet 'n geldige titel wees.",
+ "mergehistory-autocomment": "[[:$1]] saamgevoeg by [[:$2]]",
+ "mergehistory-comment": "[[:$1]] saamgevoeg by [[:$2]]: $3",
+ "mergehistory-same-destination": "Die oorsprong en bestemming kan nie dieselfde wees nie",
+ "mergehistory-reason": "Rede:",
+ "mergelog": "Versmeltingslogboek",
+ "pagemerge-logentry": "versmelt [[$1]] met [[$2]] (weergawes tot en met $3)",
+ "revertmerge": "Samesmelting ongedaan maak",
+ "mergelogpagetext": "Hieronder is 'n lys van die mees onlangse versmeltings van een bladsy se geskiedenis na 'n ander.",
+ "history-title": "$1: weergawegeskiedenis",
+ "difference-title": "$1: verskil tussen weergawes",
+ "difference-title-multipage": "$1 en $2: verskil tussen bladsye",
+ "difference-multipage": "(Verskil tussen bladsye)",
+ "lineno": "Lyn $1:",
+ "compareselectedversions": "Vergelyk gekose weergawes",
+ "showhideselectedversions": "Wys/versteek gekose weergawes",
+ "editundo": "maak ongedaan",
+ "diff-empty": "(Geen verskil)",
+ "diff-multi-manyusers": "({{PLURAL:$1|Een tussenin wysiging|$1 tussenin wysigings}} deur meer as $2 {{PLURAL:$2|gebruiker|gebruikers}} nie gewys nie)",
+ "difference-missing-revision": "{{PLURAL:$2|'n Weergawe|$2 weergawes}} van die verskil ($1) {{PLURAL:$2|is|is}} nie gevind nie.\n\nDit word meestal veroorsaak deur die volg van 'n verouderde verwysing na 'n bladsy wat verwyder is.\nDetails kan in die [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} skraplogboek] gevind word.",
+ "searchresults": "Soekresultate",
+ "searchresults-title": "Soekresultate vir \"$1\"",
+ "titlematches": "Artikeltitel resultate",
+ "textmatches": "Artikelteks resultate",
+ "notextmatches": "Geen artikelteks resultate nie",
+ "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": "Wys ($1 {{int:pipe-separator}} $2) ($3).",
+ "searchmenu-exists": "'''Daar is reeds 'n bladsy genaamd \"[[:$1]]\" op die wiki'''",
+ "searchmenu-new": "<strong>Skep die bladsy \"[[:$1]]\" op hierdie wiki</strong> {{PLURAL:$2|0=|Sien ook die bladsy wat in u soektog gevind is.|Sien ook die soekresultate wat gevind is.}}",
+ "searchprofile-articles": "Inhoudelike bladsye",
+ "searchprofile-images": "Multimedia",
+ "searchprofile-everything": "Alles",
+ "searchprofile-advanced": "Uitgebreid",
+ "searchprofile-articles-tooltip": "Soek in $1",
+ "searchprofile-images-tooltip": "Soek na lêers",
+ "searchprofile-everything-tooltip": "Soek deur alle inhoud (ook besprekingsbladsye)",
+ "searchprofile-advanced-tooltip": "Soek in spesifieke naamruimtes",
+ "search-result-size": "$1 ({{PLURAL:$2|1 woord|$2 woorde}})",
+ "search-result-category-size": "{{PLURAL:$1|1 kategorielid|$1 kategorielede}} ({{PLURAL:$2|1 subkategorie|$2 subkategorieë}}, {{PLURAL:$3|1 lêer|$3 lêers}})",
+ "search-redirect": "(aanstuur $1)",
+ "search-section": "(afdeling $1)",
+ "search-suggest": "Het u $1 bedoel?",
+ "search-interwiki-caption": "Susterprojekte",
+ "search-interwiki-default": "Resultate van $1:",
+ "search-interwiki-more": "(meer)",
+ "search-relatedarticle": "Verwante",
+ "searchrelated": "verwante",
+ "searchall": "alle",
+ "showingresults": "Hier volg {{PLURAL:$1|'''1''' resultaat|'''$1''' resultate}} vanaf #'''$2'''.",
+ "showingresultsheader": "{{PLURAL:$5|Resultaat '''$1''' van '''$3'''|Resultate '''$1 - $2''' van '''$3'''}} vir '''$4'''",
+ "search-nonefound": "Daar is geen resultate vir u soekopdrag nie.",
+ "powersearch-legend": "Gevorderde soektog",
+ "powersearch-ns": "Soek in naamruimtes:",
+ "powersearch-togglelabel": "Kies:",
+ "powersearch-toggleall": "Alle",
+ "powersearch-togglenone": "Geen",
+ "powersearch-remember": "Onthou keuse vir toekomstige soekopdragte",
+ "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.",
+ "search-error": "'n Fout het tydens die soektog voorgekom: $1",
+ "preferences": "Voorkeure",
+ "mypreferences": "Voorkeure",
+ "prefs-edits": "Aantal wysigings:",
+ "prefsnologintext2": "U moet $1 om voorkeure te stel.",
+ "prefs-skin": "Omslag",
+ "skin-preview": "Voorskou",
+ "datedefault": "Geen voorkeur",
+ "prefs-labs": "Labs-funksies",
+ "prefs-user-pages": "Gebruikersbladsye",
+ "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 $1 {{PLURAL:$1|dag|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-changeemail": "Wysig E-posadres",
+ "prefs-setemail": "Stel 'n e-posadres",
+ "prefs-email": "E-posopsies",
+ "prefs-rendering": "Voorkoms",
+ "saveprefs": "Stoor voorkeure",
+ "restoreprefs": "Herstel voorkeure",
+ "prefs-editing": "Wysigings",
+ "rows": "Rye",
+ "columns": "Kolomme",
+ "searchresultshead": "Soekresultate",
+ "stub-threshold": "Drempel vir merk as <a href=\"#\" class=\"stub\">saadjie</a> (grepe):",
+ "stub-threshold-disabled": "Afgeskakel",
+ "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.",
+ "savedprefs": "U voorkeure is gestoor.",
+ "timezonelegend": "Tydsone:",
+ "localtime": "Plaaslike tyd:",
+ "timezoneuseserverdefault": "Gebruik wiki se verstekwaarde ($1)",
+ "timezoneuseoffset": "Ander (spesifiseer 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": "Soek",
+ "prefs-namespaces": "Naamruimtes",
+ "default": "verstek",
+ "prefs-files": "Lêers",
+ "prefs-custom-css": "Persoonlike CSS",
+ "prefs-custom-js": "Persoonlike JS",
+ "prefs-common-css-js": "Gedeelde CSS/JS vir al die omslae:",
+ "prefs-reset-intro": "U kan die blad gebruik om u voorkeure terug te stel na die webwerf se verstekwaardes.\nDie aksie kan nie ongedaan gemaak word nie.",
+ "prefs-emailconfirm-label": "E-posbevestiging:",
+ "youremail": "E-posadres:",
+ "username": "{{GENDER:$1|Gebruikersnaam}}:",
+ "prefs-memberingroups": "{{GENDER:$2|Lid}} van {{PLURAL:$1|groep|groepe}}:",
+ "prefs-registration": "Registrasiedatum:",
+ "yourrealname": "Regte naam:",
+ "yourlanguage": "Taal:",
+ "yourvariant": "Taalvariant vir inhoud:",
+ "prefs-help-variant": "U voorkeursvariant of -spelling om die inhoudsbladsye van hierdie wiki in weer te gee.",
+ "yournick": "Bynaam (vir handtekening)",
+ "prefs-help-signature": "Kommentaar op besprekingsbladsye moet met \"<nowiki>~~~~</nowiki>\" onderteken word.\nDie 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.\nDit mag nie meer as $1 {{PLURAL:$1|karakter|karakters}} bevat nie.",
+ "yourgender": "Geslag:",
+ "gender-unknown": "Ek wil nie sê nie",
+ "gender-male": "Hy bewerk wikiblaaie",
+ "gender-female": "Sy bewerk wikiblaaie",
+ "prefs-help-gender": "Opsioneel: dit word gebruik om gebruikers korrek aan te spreek in die sagteware.\nDie inligting is vir ander gebruikers sigbaar.",
+ "email": "E-pos",
+ "prefs-help-realname": "Regte naam is opsioneel.\nAs u dit verskaf, sal dit gebruik word om erkenning vir u werk te gee.",
+ "prefs-help-email": "E-posadres is opsioneel, maar is nodig om u wagwoord aan u te stuur sou u dit vergeet.",
+ "prefs-help-email-others": "U kan ook kies om ander toe te laat om u deur u gebruikers- en besprekingsbladsy te kontak sonder om u identiteit te openbaar.",
+ "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": "Algemene instellings",
+ "prefs-editor": "Redigeerder",
+ "prefs-preview": "Voorskou",
+ "prefs-advancedrc": "Gevorderde instellings",
+ "prefs-advancedrendering": "Gevorderde instellings",
+ "prefs-advancedsearchoptions": "Gevorderde instellings",
+ "prefs-advancedwatchlist": "Gevorderde instellings",
+ "prefs-displayrc": "Vertoonopsies",
+ "prefs-displaywatchlist": "Weergaweopsies",
+ "prefs-diffs": "Verskille",
+ "email-address-validity-valid": "Die e-posadres lyk geldig",
+ "email-address-validity-invalid": "Verskaf 'n geldige e-posadres",
+ "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]]''' $2 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* 'n Geselekteerde boks beteken dat die gebruiker lid is van die groep.\n* 'n Ongeselekteerde boks beteken dat die gebruiker nie 'n lid van die groep is nie.\n* '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 wiki's te verander nie.",
+ "userrights-nodatabase": "Databasis $1 bestaan nie of is nie hier beskikbaar nie.",
+ "userrights-nologin": "U moet as 'n administrateur [[Special:UserLogin|aanmeld]] om gebruikersregte te kan toeken.",
+ "userrights-notallowed": "U het nie magtiging om gebruikersregte by te sit of weg te neem nie.",
+ "userrights-changeable-col": "Groepe wat u kan verander",
+ "userrights-unchangeable-col": "Groepe wat u nie kan verander nie",
+ "userrights-conflict": "Konflik met gebruikersregte! Pas asseblief weer u wysigings toe.",
+ "userrights-removed-self": "U het u eie regte suksesvol verwyder. Gevolglik het u nie meer toegang tot hierdie bladsy nie.",
+ "group": "Groep:",
+ "group-user": "Gebruikers",
+ "group-autoconfirmed": "Bevestigde gebruikers",
+ "group-bot": "Robotte",
+ "group-sysop": "Administrateurs",
+ "group-bureaucrat": "Burokrate",
+ "group-suppress": "Toesighouers",
+ "group-all": "(alle)",
+ "group-user-member": "{{GENDER:$1|gebruiker}}",
+ "group-autoconfirmed-member": "{{GENDER:$1|geregistreerde gebruiker}}",
+ "group-bot-member": "{{GENDER:$1|robot}}",
+ "group-sysop-member": "{{GENDER:$1|administrateur}}",
+ "group-bureaucrat-member": "{{GENDER:$1|burokraat}}",
+ "group-suppress-member": "{{GENDER:$1|toesighouer}}",
+ "grouppage-user": "{{ns:project}}:Gebruikers",
+ "grouppage-autoconfirmed": "{{ns:project}}:Geregistreerde gebruikers",
+ "grouppage-bot": "{{ns:project}}:Robotte",
+ "grouppage-sysop": "{{ns:project}}:Administrateurs",
+ "grouppage-bureaucrat": "{{ns:project}}:Burokrate",
+ "grouppage-suppress": "{{ns:project}}:Toesig",
+ "right-read": "Lees bladsye",
+ "right-edit": "Wysig bladsye",
+ "right-createpage": "Skep bladsye (nie besprekingsblaaie nie)",
+ "right-createtalk": "Skep besprekingsbladsye",
+ "right-createaccount": "Skep nuwe gebruikersrekeninge",
+ "right-minoredit": "Merk as 'n klein verandering",
+ "right-move": "Skuif bladsye",
+ "right-move-subpages": "skuif bladsye met hul subblaaie",
+ "right-move-rootuserpages": "Skuif gebruikersblaaie op hoogste vlak",
+ "right-move-categorypages": "Skuif kategoriebladsye",
+ "right-movefile": "Skuif lêers",
+ "right-suppressredirect": "Geen aansture agterlaat by die skuif van bladsye nie",
+ "right-upload": "Laai lêers op",
+ "right-reupload": "Oorskryf 'n bestaande lêer",
+ "right-reupload-own": "Oorskryf 'n lêer wat u self opgelaai het",
+ "right-reupload-shared": "Oorskryf lêers op die gedeelde mediabank plaaslik",
+ "right-upload_by_url": "Laai lêer van 'n URL",
+ "right-purge": "Maak kas vir 'n bladsy skoon sonder verdere bevestiging",
+ "right-autoconfirmed": "Uitgesonder van IP-adresgebaseerde tydsafhanklike beperkings",
+ "right-bot": "Behandel as 'n geoutomatiseerde proses",
+ "right-nominornewtalk": "Klein wysigings aan besprekingsbladsye lei nie tot vermelding van 'nuwe boodskappe' nie",
+ "right-apihighlimits": "Gebruik hoër limiete in API-soekopgragte",
+ "right-writeapi": "Bewerkings m.b.v. die API",
+ "right-delete": "Vee bladsye uit",
+ "right-bigdelete": "Skrap bladsye met groot geskiedenisse",
+ "right-deletelogentry": "Skrap en terugplaas van spesifieke logboekreëls",
+ "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",
+ "right-suppressionlog": "Besigtig privaat logboeke",
+ "right-block": "Ontneem ander gebruikers die reg om te wysig",
+ "right-blockemail": "Ontneem 'n gebruiker die reg om E-pos te stuur",
+ "right-hideuser": "Blokkeer 'n gebruiker, versteek dit van die publiek",
+ "right-ipblock-exempt": "Omseil IP-blokkades",
+ "right-proxyunbannable": "Blokkades vir instaanbedieners (proxy's) geld nie",
+ "right-unblockself": "Eie gebruiker deblokkeer",
+ "right-protect": "Verander beveiligingsvlakke en wysig kaskade-beskermde bladsye",
+ "right-editprotected": "Wysig bladsye beskermd as \"{{int:protect-level-sysop}}\"",
+ "right-editsemiprotected": "Wysig bladsye wat as \"{{int:protect-level-autoconfirmed}}\" beskerm is",
+ "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-editmyusercss": "Wysig u persoonlike CSS-bladsy",
+ "right-editmyuserjs": "Wysig u persoonlike JavaScript-bladsy",
+ "right-viewmywatchlist": "Wys u persoonlike dophoulys",
+ "right-editmywatchlist": "Wysig u persoonlike dophoulys. Sommige aksies sal steeds bladsye byvoeg, selfs sonder die bevoegdheid.",
+ "right-viewmyprivateinfo": "Wys u eie privaat data (bv. e-posadres, regte naam)",
+ "right-editmyprivateinfo": "Wysig u eie privaat data (bv. e-posadres, regte naam)",
+ "right-editmyoptions": "Wysig u eie voorkeure",
+ "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",
+ "right-import": "Importeer bladsye vanaf ander wiki's",
+ "right-importupload": "Importeer bladsye vanaf 'n lêer",
+ "right-patrol": "Merk ander se wysigings as gekontroleer",
+ "right-autopatrol": "Laat eie wysigings outomaties as gekontroleerd merk",
+ "right-patrolmarks": "Wys kontroleermerke in onlangse wysigings",
+ "right-unwatchedpages": "Wys lys van bladsye wat nie dopgehou word nie",
+ "right-mergehistory": "Versmelt die geskiedenis van bladsye",
+ "right-userrights": "Wysig alle gebruiker regte",
+ "right-userrights-interwiki": "Wysig gebruikersregte van gebruikers op ander wikis",
+ "right-siteadmin": "Sluit en ontsluit die datbasis",
+ "right-override-export-depth": "Eksporteer bladsye insluitend geskakelde bladsye tot 'n diepte van 5",
+ "right-sendemail": "Stuur e-pos aan ander gebruikers",
+ "right-passwordreset": "Wys e-posse vir herstel van wagwoord",
+ "newuserlogpage": "Logboek van nuwe gebruikers",
+ "newuserlogpagetext": "Dit is 'n logboek van gebruikers wat onlangs ingeteken het.",
+ "rightslog": "Gebruikersregtelogboek",
+ "rightslogtext": "Hier onder is die logboek van gebruikersregte wat verander is.",
+ "action-read": "lees die bladsy",
+ "action-edit": "hierdie bladsy te wysig nie",
+ "action-createpage": "skep bladsye",
+ "action-createtalk": "skep besprekingsblaaie",
+ "action-createaccount": "skep die gebruiker",
+ "action-history": "wys die bladsy se geskiedenis",
+ "action-minoredit": "merk die wysiging as 'n klein verandering",
+ "action-move": "skuif die bladsy",
+ "action-move-subpages": "skuif die bladsy met sy subbladsye",
+ "action-move-rootuserpages": "gebruikersbladsye van die hoogste vlak te skuif nie",
+ "action-move-categorypages": "skuif kategoriebladsye",
+ "action-movefile": "skuif die lêer",
+ "action-upload": "laai die lêer op",
+ "action-reupload": "oorskryf die bestaande lêer",
+ "action-reupload-shared": "die lêer op te laai, terwyl daar reeds 'n lêer met dieselfde naam in die gedeelde lêerbank is nie",
+ "action-upload_by_url": "laai die lêer vanaf 'n URL",
+ "action-writeapi": "die API te gebruik nie",
+ "action-delete": "verwyder die bladsy",
+ "action-deleterevision": "skrap die weergawe",