From d12096bbd3bccd0b590a0430f4563d7b89464caf Mon Sep 17 00:00:00 2001 From: Deon George Date: Tue, 30 Jun 2009 19:22:30 +1000 Subject: [PATCH] RELEASE 0.9.5 --- INSTALL | 18 +- VERSION | 2 +- add_attr.php | 141 + add_attr_form.php | 174 + add_oclass.php | 21 +- add_oclass_form.php | 45 +- add_value.php | 25 +- add_value_form.php | 53 +- blowfish.php | 471 +++ check_lang_files.php | 63 +- collapse.php | 21 +- common.php | 121 +- config.php.example | 299 +- copy.php | 36 +- copy_form.php | 78 +- create.php | 53 +- create_form.php | 118 +- creation_template.php | 51 +- custom_functions.php | 25 + delete.php | 17 +- delete_attr.php | 21 +- delete_form.php | 69 +- doc/CREDITS | 45 +- doc/ChangeLog | 233 +- doc/INSTALL-de.txt | 17 +- doc/INSTALL-es.txt | 1 + doc/INSTALL-fr.txt | 1 + doc/README-translation.txt | 101 + doc/ROADMAP | 63 +- doc/pla-test-i18n.ldif | 67 + documentation.php | 10 +- donate.php | 58 + download_binary_attr.php | 31 +- edit.php | 17 +- emuhash_functions.php | 104 + entry_chooser.js | 1 + entry_chooser.php | 35 +- expand.php | 28 +- export.php | 93 + export_form.php | 161 + export_functions.php | 857 +++++ functions.php | 3100 ++++++++++++++--- generic_utils.js | 21 + header.php | 23 +- help.php | 21 + ie_png_work_around.js | 29 + images/add.png | Bin 0 -> 528 bytes images/catalog.png | Bin 0 -> 1302 bytes images/children.png | Bin 438 -> 342 bytes images/countries/af.png | Bin 0 -> 1042 bytes images/countries/al.png | Bin 0 -> 1040 bytes images/countries/am.png | Bin 0 -> 1042 bytes images/countries/an.png | Bin 0 -> 1041 bytes images/countries/ao.png | Bin 0 -> 1041 bytes images/countries/ar.png | Bin 0 -> 1043 bytes images/countries/at.png | Bin 0 -> 1041 bytes images/countries/au.png | Bin 0 -> 1043 bytes images/countries/aw.png | Bin 0 -> 1043 bytes images/countries/az.png | Bin 0 -> 1042 bytes images/countries/ba.png | Bin 0 -> 1043 bytes images/countries/bb.png | Bin 0 -> 1043 bytes images/countries/bd.png | Bin 0 -> 1040 bytes images/countries/be.png | Bin 0 -> 1039 bytes images/countries/bf.png | Bin 0 -> 1042 bytes images/countries/bg.png | Bin 0 -> 1041 bytes images/countries/bh.png | Bin 0 -> 1031 bytes images/countries/bi.png | Bin 0 -> 1043 bytes images/countries/bj.png | Bin 0 -> 1042 bytes images/countries/bm.png | Bin 0 -> 1036 bytes images/countries/bn.png | Bin 0 -> 1043 bytes images/countries/bo.png | Bin 0 -> 1042 bytes images/countries/br.png | Bin 0 -> 1043 bytes images/countries/bs.png | Bin 0 -> 1042 bytes images/countries/bt.png | Bin 0 -> 1043 bytes images/countries/bw.png | Bin 0 -> 1032 bytes images/countries/by.png | Bin 0 -> 1043 bytes images/countries/bz.png | Bin 0 -> 1043 bytes images/countries/ca.png | Bin 0 -> 1043 bytes images/countries/cf.png | Bin 0 -> 1043 bytes images/countries/cg.png | Bin 0 -> 1040 bytes images/countries/ch.png | Bin 0 -> 1031 bytes images/countries/ci.png | Bin 0 -> 1040 bytes images/countries/ck.png | Bin 0 -> 1043 bytes images/countries/cl.png | Bin 0 -> 253 bytes images/countries/cm.png | Bin 0 -> 1043 bytes images/countries/cn.png | Bin 0 -> 624 bytes images/countries/co.png | Bin 0 -> 1030 bytes images/countries/cr.png | Bin 0 -> 1043 bytes images/countries/cu.png | Bin 0 -> 1043 bytes images/countries/cv.png | Bin 0 -> 1041 bytes images/countries/cy.png | Bin 0 -> 1041 bytes images/countries/cz.png | Bin 0 -> 1042 bytes images/countries/de.png | Bin 0 -> 1038 bytes images/countries/dk.png | Bin 0 -> 1037 bytes images/countries/dz.png | Bin 0 -> 1037 bytes images/countries/ec.png | Bin 0 -> 1042 bytes images/countries/ee.png | Bin 0 -> 1041 bytes images/countries/eg.png | Bin 0 -> 1041 bytes images/countries/er.png | Bin 0 -> 1043 bytes images/countries/es.png | Bin 0 -> 1043 bytes images/countries/et.png | Bin 0 -> 1043 bytes images/countries/fi.png | Bin 0 -> 1040 bytes images/countries/fj.png | Bin 0 -> 1043 bytes images/countries/fo.png | Bin 0 -> 1041 bytes images/countries/fr.png | Bin 0 -> 1041 bytes images/countries/ga.png | Bin 0 -> 1043 bytes images/countries/gb.png | Bin 0 -> 1043 bytes images/countries/ge.png | Bin 0 -> 628 bytes images/countries/gi.png | Bin 0 -> 1039 bytes images/countries/gl.png | Bin 0 -> 1038 bytes images/countries/gp.png | Bin 0 -> 1030 bytes images/countries/gr.png | Bin 0 -> 1043 bytes images/countries/gt.png | Bin 0 -> 1043 bytes images/countries/gu.png | Bin 0 -> 1043 bytes images/countries/gy.png | Bin 0 -> 1041 bytes images/countries/hk.png | Bin 0 -> 1041 bytes images/countries/hr.png | Bin 0 -> 1041 bytes images/countries/ht.png | Bin 0 -> 1043 bytes images/countries/hu.png | Bin 0 -> 1042 bytes images/countries/id.png | Bin 0 -> 1041 bytes images/countries/ie.png | Bin 0 -> 1042 bytes images/countries/il.png | Bin 0 -> 1042 bytes images/countries/in.png | Bin 0 -> 1043 bytes images/countries/iq.png | Bin 0 -> 1042 bytes images/countries/ir.png | Bin 0 -> 1043 bytes images/countries/is.png | Bin 0 -> 1043 bytes images/countries/it.png | Bin 0 -> 1040 bytes images/countries/jm.png | Bin 0 -> 1042 bytes images/countries/jo.png | Bin 0 -> 1042 bytes images/countries/jp.png | Bin 0 -> 648 bytes images/countries/ke.png | Bin 0 -> 1039 bytes images/countries/kg.png | Bin 0 -> 1041 bytes images/countries/kh.png | Bin 0 -> 1043 bytes images/countries/ki.png | Bin 0 -> 1042 bytes images/countries/kp.png | Bin 0 -> 1043 bytes images/countries/kr.png | Bin 0 -> 1040 bytes images/countries/ky.png | Bin 0 -> 1041 bytes images/countries/kz.png | Bin 0 -> 1042 bytes images/countries/lb.png | Bin 0 -> 1042 bytes images/countries/lc.png | Bin 0 -> 1043 bytes images/countries/lk.png | Bin 0 -> 1043 bytes images/countries/lt.png | Bin 0 -> 646 bytes images/countries/lu.png | Bin 0 -> 1041 bytes images/countries/lv.png | Bin 0 -> 1032 bytes images/countries/ly.png | Bin 0 -> 623 bytes images/countries/ma.png | Bin 0 -> 1175 bytes images/countries/mc.png | Bin 0 -> 1040 bytes images/countries/md.png | Bin 0 -> 1041 bytes images/countries/mg.png | Bin 0 -> 1041 bytes images/countries/mn.png | Bin 0 -> 1043 bytes images/countries/mo.png | Bin 0 -> 1041 bytes images/countries/mp.png | Bin 0 -> 1042 bytes images/countries/ms.png | Bin 0 -> 1043 bytes images/countries/mt.png | Bin 0 -> 873 bytes images/countries/mx.png | Bin 0 -> 1042 bytes images/countries/my.png | Bin 0 -> 1043 bytes images/countries/mz.png | Bin 0 -> 1043 bytes images/countries/na.png | Bin 0 -> 1043 bytes images/countries/nc.png | Bin 0 -> 1043 bytes images/countries/nf.png | Bin 0 -> 1041 bytes images/countries/nl.png | Bin 0 -> 1041 bytes images/countries/no.png | Bin 0 -> 1041 bytes images/countries/np.png | Bin 0 -> 730 bytes images/countries/nr.png | Bin 0 -> 1038 bytes images/countries/nz.png | Bin 0 -> 1042 bytes images/countries/om.png | Bin 0 -> 1041 bytes images/countries/pa.png | Bin 0 -> 1041 bytes images/countries/pe.png | Bin 0 -> 1043 bytes images/countries/pf.png | Bin 0 -> 1043 bytes images/countries/ph.png | Bin 0 -> 1043 bytes images/countries/pk.png | Bin 0 -> 1041 bytes images/countries/pl.png | Bin 0 -> 1040 bytes images/countries/pm.png | Bin 0 -> 1043 bytes images/countries/pr.png | Bin 0 -> 1043 bytes images/countries/pt.png | Bin 0 -> 1036 bytes images/countries/py.png | Bin 0 -> 1041 bytes images/countries/qa.png | Bin 0 -> 647 bytes images/countries/ro.png | Bin 0 -> 1042 bytes images/countries/ru.png | Bin 0 -> 1041 bytes images/countries/sa.png | Bin 0 -> 1042 bytes images/countries/sb.png | Bin 0 -> 1043 bytes images/countries/sd.png | Bin 0 -> 1041 bytes images/countries/se.png | Bin 0 -> 1041 bytes images/countries/sg.png | Bin 0 -> 1041 bytes images/countries/si.png | Bin 0 -> 1042 bytes images/countries/sk.png | Bin 0 -> 1042 bytes images/countries/sl.png | Bin 0 -> 1042 bytes images/countries/so.png | Bin 0 -> 1033 bytes images/countries/sr.png | Bin 0 -> 899 bytes images/countries/sy.png | Bin 0 -> 920 bytes images/countries/tc.png | Bin 0 -> 1040 bytes images/countries/tg.png | Bin 0 -> 1043 bytes images/countries/th.png | Bin 0 -> 1043 bytes images/countries/tn.png | Bin 0 -> 1041 bytes images/countries/to.png | Bin 0 -> 649 bytes images/countries/tp.png | Bin 0 -> 1043 bytes images/countries/tr.png | Bin 0 -> 1029 bytes images/countries/tt.png | Bin 0 -> 1043 bytes images/countries/tv.png | Bin 0 -> 1043 bytes images/countries/tw.png | Bin 0 -> 633 bytes images/countries/tz.png | Bin 0 -> 1040 bytes images/countries/ua.png | Bin 0 -> 1041 bytes images/countries/ug.png | Bin 0 -> 1043 bytes images/countries/us.png | Bin 0 -> 1043 bytes images/countries/uy.png | Bin 0 -> 1043 bytes images/countries/va.png | Bin 0 -> 1042 bytes images/countries/ve.png | Bin 0 -> 1043 bytes images/countries/vg.png | Bin 0 -> 1043 bytes images/countries/vi.png | Bin 0 -> 1043 bytes images/countries/vn.png | Bin 0 -> 1038 bytes images/countries/ws.png | Bin 0 -> 1027 bytes images/countries/ye.png | Bin 0 -> 1041 bytes images/countries/yu.png | Bin 0 -> 1042 bytes images/countries/za.png | Bin 0 -> 1043 bytes images/countries/zw.png | Bin 0 -> 1043 bytes images/device.png | Bin 0 -> 500 bytes images/document.png | Bin 0 -> 856 bytes images/door.png | Bin 0 -> 364 bytes images/files.png | Bin 0 -> 1113 bytes images/go.png | Bin 0 -> 440 bytes images/hard-drive.png | Bin 0 -> 1308 bytes images/help.png | Bin 0 -> 738 bytes images/home.png | Bin 0 -> 1105 bytes images/index.php | 36 + images/info.png | Bin 0 -> 510 bytes images/ldap-server.png | Bin 0 -> 1084 bytes images/lock.png | Bin 858 -> 1256 bytes images/logo.jpg | Bin 16958 -> 6763 bytes images/mail_account.png | Bin 0 -> 993 bytes images/mail_alias.png | Bin 0 -> 938 bytes images/n.png | Bin 0 -> 408 bytes images/network.png | Bin 0 -> 1107 bytes images/paypal-donate.png | Bin 0 -> 730 bytes images/question.png | Bin 1035 -> 0 bytes images/rename.png | Bin 0 -> 418 bytes images/server-settings.png | Bin 0 -> 1149 bytes images/server-small.png | Bin 0 -> 818 bytes images/smile.png | Bin 0 -> 852 bytes images/tools-no.png | Bin 0 -> 798 bytes images/tools.png | Bin 0 -> 503 bytes images/unknown.png | Bin 0 -> 924 bytes index.php | 64 +- lang/Makefile | 68 +- lang/auto.php | 16 +- lang/ca.php | 10 +- lang/cz.php | 510 +++ lang/de.php | 496 ++- lang/en.php | 451 ++- lang/es.php | 19 +- lang/fr.php | 269 +- lang/hu.php | 556 +++ lang/it.php | 8 +- lang/ja.php | 575 +++ lang/nl.php | 18 +- lang/pl.php | 617 ++++ lang/pt-br.php | 516 +++ lang/recoded/auto.php | 22 +- lang/recoded/ca.php | 10 +- lang/recoded/cz.php | 510 +++ lang/recoded/de.php | 496 ++- lang/recoded/en.php | 453 ++- lang/recoded/es.php | 19 +- lang/recoded/fr.php | 483 ++- lang/recoded/hu.php | 556 +++ lang/recoded/it.php | 8 +- lang/recoded/ja.php | 575 +++ lang/recoded/nl.php | 18 +- lang/recoded/pl.php | 617 ++++ lang/recoded/pt-br.php | 516 +++ lang/recoded/ru.php | 744 ++-- lang/recoded/sv.php | 387 ++ lang/recoded/zz.php | 13 + lang/recoded/zzz.php | 13 + lang/ru.php | 744 ++-- lang/sv.php | 387 ++ lang/zz.php | 13 + lang/zzz.php | 13 + ldap_error_codes.txt | 27 +- ldif_export.php | 136 - ldif_functions.php | 484 ++- ldif_import.php | 78 +- ldif_import_form.php | 31 +- login.php | 193 +- login_form.php | 61 +- logout.php | 86 +- mass_delete.php | 42 +- new_attr.php | 67 - password_checker.php | 49 + purge_cache.php | 37 + rdelete.php | 53 +- refresh.php | 11 +- rename.php | 32 +- rename_form.php | 46 + schema.php | 292 +- schema_functions.php | 1002 ++++-- search.php | 334 +- search_form_advanced.php | 35 +- search_form_predefined.php | 52 + search_form_simple.php | 32 +- search_results_list.php | 90 + search_results_table.php | 130 + search_util.js | 2 +- server_info.php | 69 +- session_functions.php | 119 + style.css | 178 +- templates/creation/custom.php | 242 +- templates/creation/new_address_template.php | 499 ++- templates/creation/new_alias_template.php | 95 + templates/creation/new_dns_entry.php | 182 +- templates/creation/new_kolab_template.php | 300 ++ .../new_mozillaOrgPerson_template.php | 224 ++ templates/creation/new_nt_machine.php | 6 +- templates/creation/new_organizationalRole.php | 240 ++ templates/creation/new_ou_template.php | 14 +- .../creation/new_posix_group_template.php | 19 +- .../creation/new_postfix_account_template.php | 169 + .../creation/new_postfix_alias_template.php | 94 + .../creation/new_security_object_template.php | 14 +- .../creation/new_sendmail_alias_template.php | 169 + .../new_sendmail_cluster_template.php | 118 + .../creation/new_sendmail_domain_template.php | 141 + .../creation/new_sendmail_relay_template.php | 213 ++ .../new_sendmail_virthost_template.php | 141 + .../new_sendmail_virtuser_template.php | 153 + templates/creation/new_smb3_nt_machine.php | 12 +- templates/creation/new_smb3_user_template.php | 390 ++- templates/creation/new_smbgroup_template.php | 136 +- templates/creation/new_smbuser_template.php | 6 +- templates/creation/new_user_template.php | 156 +- templates/modification/default.php | 707 ++-- templates/modification/group_of_names.php | 142 + templates/modification/samba_account.php | 32 + templates/modification/user.php | 5 +- templates/template_config.php | 268 +- tree.php | 334 +- tree_functions.php | 264 ++ unit_test.php | 145 +- update.php | 30 +- update_confirm.php | 432 +-- view_jpeg_photo.php | 4 +- welcome.php | 25 +- 341 files changed, 22846 insertions(+), 4908 deletions(-) create mode 100644 add_attr.php create mode 100644 add_attr_form.php create mode 100644 blowfish.php create mode 100644 doc/README-translation.txt create mode 100644 doc/pla-test-i18n.ldif create mode 100644 donate.php create mode 100644 emuhash_functions.php create mode 100755 export.php create mode 100755 export_form.php create mode 100755 export_functions.php create mode 100644 generic_utils.js create mode 100644 help.php create mode 100644 ie_png_work_around.js create mode 100644 images/add.png create mode 100644 images/catalog.png create mode 100644 images/countries/af.png create mode 100644 images/countries/al.png create mode 100644 images/countries/am.png create mode 100644 images/countries/an.png create mode 100644 images/countries/ao.png create mode 100644 images/countries/ar.png create mode 100644 images/countries/at.png create mode 100644 images/countries/au.png create mode 100644 images/countries/aw.png create mode 100644 images/countries/az.png create mode 100644 images/countries/ba.png create mode 100644 images/countries/bb.png create mode 100644 images/countries/bd.png create mode 100644 images/countries/be.png create mode 100644 images/countries/bf.png create mode 100644 images/countries/bg.png create mode 100644 images/countries/bh.png create mode 100644 images/countries/bi.png create mode 100644 images/countries/bj.png create mode 100644 images/countries/bm.png create mode 100644 images/countries/bn.png create mode 100644 images/countries/bo.png create mode 100644 images/countries/br.png create mode 100644 images/countries/bs.png create mode 100644 images/countries/bt.png create mode 100644 images/countries/bw.png create mode 100644 images/countries/by.png create mode 100644 images/countries/bz.png create mode 100644 images/countries/ca.png create mode 100644 images/countries/cf.png create mode 100644 images/countries/cg.png create mode 100644 images/countries/ch.png create mode 100644 images/countries/ci.png create mode 100644 images/countries/ck.png create mode 100644 images/countries/cl.png create mode 100644 images/countries/cm.png create mode 100644 images/countries/cn.png create mode 100644 images/countries/co.png create mode 100644 images/countries/cr.png create mode 100644 images/countries/cu.png create mode 100644 images/countries/cv.png create mode 100644 images/countries/cy.png create mode 100644 images/countries/cz.png create mode 100644 images/countries/de.png create mode 100644 images/countries/dk.png create mode 100644 images/countries/dz.png create mode 100644 images/countries/ec.png create mode 100644 images/countries/ee.png create mode 100644 images/countries/eg.png create mode 100644 images/countries/er.png create mode 100644 images/countries/es.png create mode 100644 images/countries/et.png create mode 100644 images/countries/fi.png create mode 100644 images/countries/fj.png create mode 100644 images/countries/fo.png create mode 100644 images/countries/fr.png create mode 100644 images/countries/ga.png create mode 100644 images/countries/gb.png create mode 100644 images/countries/ge.png create mode 100644 images/countries/gi.png create mode 100644 images/countries/gl.png create mode 100644 images/countries/gp.png create mode 100644 images/countries/gr.png create mode 100644 images/countries/gt.png create mode 100644 images/countries/gu.png create mode 100644 images/countries/gy.png create mode 100644 images/countries/hk.png create mode 100644 images/countries/hr.png create mode 100644 images/countries/ht.png create mode 100644 images/countries/hu.png create mode 100644 images/countries/id.png create mode 100644 images/countries/ie.png create mode 100644 images/countries/il.png create mode 100644 images/countries/in.png create mode 100644 images/countries/iq.png create mode 100644 images/countries/ir.png create mode 100644 images/countries/is.png create mode 100644 images/countries/it.png create mode 100644 images/countries/jm.png create mode 100644 images/countries/jo.png create mode 100644 images/countries/jp.png create mode 100644 images/countries/ke.png create mode 100644 images/countries/kg.png create mode 100644 images/countries/kh.png create mode 100644 images/countries/ki.png create mode 100644 images/countries/kp.png create mode 100644 images/countries/kr.png create mode 100644 images/countries/ky.png create mode 100644 images/countries/kz.png create mode 100644 images/countries/lb.png create mode 100644 images/countries/lc.png create mode 100644 images/countries/lk.png create mode 100644 images/countries/lt.png create mode 100644 images/countries/lu.png create mode 100644 images/countries/lv.png create mode 100644 images/countries/ly.png create mode 100644 images/countries/ma.png create mode 100644 images/countries/mc.png create mode 100644 images/countries/md.png create mode 100644 images/countries/mg.png create mode 100644 images/countries/mn.png create mode 100644 images/countries/mo.png create mode 100644 images/countries/mp.png create mode 100644 images/countries/ms.png create mode 100644 images/countries/mt.png create mode 100644 images/countries/mx.png create mode 100644 images/countries/my.png create mode 100644 images/countries/mz.png create mode 100644 images/countries/na.png create mode 100644 images/countries/nc.png create mode 100644 images/countries/nf.png create mode 100644 images/countries/nl.png create mode 100644 images/countries/no.png create mode 100644 images/countries/np.png create mode 100644 images/countries/nr.png create mode 100644 images/countries/nz.png create mode 100644 images/countries/om.png create mode 100644 images/countries/pa.png create mode 100644 images/countries/pe.png create mode 100644 images/countries/pf.png create mode 100644 images/countries/ph.png create mode 100644 images/countries/pk.png create mode 100644 images/countries/pl.png create mode 100644 images/countries/pm.png create mode 100644 images/countries/pr.png create mode 100644 images/countries/pt.png create mode 100644 images/countries/py.png create mode 100644 images/countries/qa.png create mode 100644 images/countries/ro.png create mode 100644 images/countries/ru.png create mode 100644 images/countries/sa.png create mode 100644 images/countries/sb.png create mode 100644 images/countries/sd.png create mode 100644 images/countries/se.png create mode 100644 images/countries/sg.png create mode 100644 images/countries/si.png create mode 100644 images/countries/sk.png create mode 100644 images/countries/sl.png create mode 100644 images/countries/so.png create mode 100644 images/countries/sr.png create mode 100644 images/countries/sy.png create mode 100644 images/countries/tc.png create mode 100644 images/countries/tg.png create mode 100644 images/countries/th.png create mode 100644 images/countries/tn.png create mode 100644 images/countries/to.png create mode 100644 images/countries/tp.png create mode 100644 images/countries/tr.png create mode 100644 images/countries/tt.png create mode 100644 images/countries/tv.png create mode 100644 images/countries/tw.png create mode 100644 images/countries/tz.png create mode 100644 images/countries/ua.png create mode 100644 images/countries/ug.png create mode 100644 images/countries/us.png create mode 100644 images/countries/uy.png create mode 100644 images/countries/va.png create mode 100644 images/countries/ve.png create mode 100644 images/countries/vg.png create mode 100644 images/countries/vi.png create mode 100644 images/countries/vn.png create mode 100644 images/countries/ws.png create mode 100644 images/countries/ye.png create mode 100644 images/countries/yu.png create mode 100644 images/countries/za.png create mode 100644 images/countries/zw.png create mode 100644 images/device.png create mode 100644 images/document.png create mode 100644 images/door.png create mode 100644 images/files.png create mode 100644 images/go.png create mode 100644 images/hard-drive.png create mode 100644 images/help.png create mode 100644 images/home.png create mode 100644 images/index.php create mode 100644 images/info.png create mode 100644 images/ldap-server.png create mode 100644 images/mail_account.png create mode 100644 images/mail_alias.png create mode 100644 images/n.png create mode 100644 images/network.png create mode 100644 images/paypal-donate.png delete mode 100644 images/question.png create mode 100644 images/rename.png create mode 100644 images/server-settings.png create mode 100644 images/server-small.png create mode 100644 images/smile.png create mode 100644 images/tools-no.png create mode 100644 images/tools.png create mode 100644 images/unknown.png create mode 100644 lang/cz.php create mode 100644 lang/hu.php create mode 100644 lang/ja.php create mode 100644 lang/pl.php create mode 100644 lang/pt-br.php create mode 100644 lang/recoded/cz.php create mode 100644 lang/recoded/hu.php create mode 100644 lang/recoded/ja.php create mode 100644 lang/recoded/pl.php create mode 100644 lang/recoded/pt-br.php create mode 100644 lang/recoded/sv.php create mode 100644 lang/recoded/zz.php create mode 100644 lang/recoded/zzz.php create mode 100644 lang/sv.php create mode 100644 lang/zz.php create mode 100644 lang/zzz.php delete mode 100644 ldif_export.php delete mode 100644 new_attr.php create mode 100644 password_checker.php create mode 100644 purge_cache.php create mode 100644 rename_form.php create mode 100644 search_form_predefined.php create mode 100644 search_results_list.php create mode 100644 search_results_table.php create mode 100644 session_functions.php create mode 100644 templates/creation/new_alias_template.php create mode 100644 templates/creation/new_kolab_template.php create mode 100644 templates/creation/new_mozillaOrgPerson_template.php create mode 100644 templates/creation/new_organizationalRole.php create mode 100644 templates/creation/new_postfix_account_template.php create mode 100644 templates/creation/new_postfix_alias_template.php create mode 100644 templates/creation/new_sendmail_alias_template.php create mode 100644 templates/creation/new_sendmail_cluster_template.php create mode 100644 templates/creation/new_sendmail_domain_template.php create mode 100644 templates/creation/new_sendmail_relay_template.php create mode 100644 templates/creation/new_sendmail_virthost_template.php create mode 100644 templates/creation/new_sendmail_virtuser_template.php create mode 100644 templates/modification/group_of_names.php create mode 100644 templates/modification/samba_account.php create mode 100644 tree_functions.php diff --git a/INSTALL b/INSTALL index 4a3e2ce..cec0dba 100644 --- a/INSTALL +++ b/INSTALL @@ -14,8 +14,24 @@ in the "doc" directory. 3. Copy 'config.php.example' to 'config.php' and edit to taste. 4. Then, point your browser to the phpldapadmin directory. -* For help +* For additional help See the files in the "doc" directory. Join our mailing list: https://lists.sourceforge.net/lists/listinfo/phpldapadmin-devel + +* Platform specific notes + + * OpenBSD with chroot'ed Apache: + + For jpeg photos to work properly, you must do this: + # mkdir /var/www/tmp, and then + # chown root:daemon /var/www/tmp + # chmod 1755 /var/www/tmp + Where tmp is the $jpeg_temp_dir configured in config.php + + * Windows + + For jpeg photos to work properly, be sure to change $jpeg_temp_dir + from "/tmp" to "c:\\temp" or similar. + diff --git a/VERSION b/VERSION index 965065d..b0bb878 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.9.3 +0.9.5 diff --git a/add_attr.php b/add_attr.php new file mode 100644 index 0000000..dadd99b --- /dev/null +++ b/add_attr.php @@ -0,0 +1,141 @@ +createSambaPasswords( $val ); + $val = $mkntPassword->valueOf($attr); +} + +$ds = pla_ldap_connect( $server_id ) or pla_error( $lang['could_not_connect'] ); +$new_entry = array( $attr => $val ); +$result = @ldap_mod_add( $ds, $dn, $new_entry ); + +if( $result ) + header( "Location: edit.php?server_id=$server_id&dn=$encoded_dn&modified_attrs[]=$encoded_attr" ); +else + pla_error( $lang['failed_to_add_attr'], ldap_error( $ds ) , ldap_errno( $ds ) ); + +// check if we need to append the ;binary option to the name +// of some binary attribute + +function is_binary_option_required( $server_id, $attr ){ + + // list of the binary attributes which need the ";binary" option + $binary_attributes_with_options = array( + // Superior: Ldapv3 Syntaxes (1.3.6.1.4.1.1466.115.121.1) + '1.3.6.1.4.1.1466.115.121.1.8' => "userCertificate", + '1.3.6.1.4.1.1466.115.121.1.8' => "caCertificate", + '1.3.6.1.4.1.1466.115.121.1.10' => "crossCertificatePair", + '1.3.6.1.4.1.1466.115.121.1.9' => "certificateRevocationList", + '1.3.6.1.4.1.1466.115.121.1.9' => "authorityRevocationList", + // Superior: Netscape Ldap attributes types (2.16.840.1.113730.3.1) + '2.16.840.1.113730.3.1.40' => "userSMIMECertificate" + ); + + // quick check by attr name (short circuits the schema check if possible) + //foreach( $binary_attributes_with_options as $oid => $name ) + //if( 0 == strcasecmp( $attr, $name ) ) + //return true; + + $schema_attr = get_schema_attribute( $server_id, $attr ); + if( ! $schema_attr ) + return false; + + $syntax = $schema_attr->getSyntaxOID(); + if( isset( $binary_attributes_with_options[ $syntax ] ) ) + return true; + + return false; +} + +?> diff --git a/add_attr_form.php b/add_attr_form.php new file mode 100644 index 0000000..ed0eef8 --- /dev/null +++ b/add_attr_form.php @@ -0,0 +1,174 @@ + + + + +

+

:     :

+ +getMustAttrNames( $schema_oclasses ), + $schema_oclass->getMayAttrNames( $schema_oclasses ), + $avail_attrs ); +} + +$avail_attrs = array_unique( $avail_attrs ); +$avail_attrs = array_filter( $avail_attrs, "not_an_attr" ); +sort( $avail_attrs ); + +$avail_binary_attrs = array(); +foreach( $avail_attrs as $i => $attr ) { + if( is_attr_binary( $server_id, $attr ) ) { + $avail_binary_attrs[] = $attr; + unset( $avail_attrs[ $i ] ); + } +} + +?> + +
+
+ + + + + 0 ) { ?> + +
+
+
+ + + + + + +
+ + +
+
+ () +
+
+ + + + + 0 ) { ?> + +
+ + + +
+ + + + " . $lang['warning_file_uploads_disabled'] . "
"; + else + echo "
" . sprintf( $lang['max_file_size'], ini_get( 'upload_max_filesize' ) ) . "
"; + ?> +
+ + +
+
+ () + + + +
+ + + + $values ) + if( 0 == strcasecmp( $attr, $x ) ) + return false; + return true; +} + + +?> diff --git a/add_oclass.php b/add_oclass.php index 13e4e65..502a691 100644 --- a/add_oclass.php +++ b/add_oclass.php @@ -1,4 +1,6 @@ $new_oclass ); if( is_array( $new_attrs ) && count( $new_attrs ) > 0 ) - foreach( $new_attrs as $attr => $val ) + foreach( $new_attrs as $attr => $val ) { + + // Check to see if this is a unique Attribute + if( $badattr = checkUniqueAttr( $server_id, $dn, $attr, array($val) ) ) { + $search_href='search.php?search=true&form=advanced&server_id=' . $server_id . '&filter=' . $attr . '=' . $badattr; + pla_error(sprintf( $lang['unique_attr_failed'] , $attr,$badattr,$dn,$search_href ) ); + } + $new_entry[ $attr ] = $val; + } //echo "
"; 
 //print_r( $new_entry );
 //exit;
 
-$ds = pla_ldap_connect( $server_id ) or pla_error( $lang['could_not_connect'] );
+$ds = pla_ldap_connect( $server_id );
+pla_ldap_connection_is_error( $ds );
 $add_res = @ldap_mod_add( $ds, $dn, $new_entry );
 
 if( ! $add_res )
@@ -51,7 +64,7 @@ if( ! $add_res )
 }
 else
 {
-	header( "Location: edit.php?server_id=$server_id&dn=$encoded_dn" );
+	header( "Location: edit.php?server_id=$server_id&dn=$encoded_dn&modified_attrs[]=objectclass" );
 }
 
 ?>
diff --git a/add_oclass_form.php b/add_oclass_form.php
index 00ba27a..cbe624f 100644
--- a/add_oclass_form.php
+++ b/add_oclass_form.php
@@ -1,4 +1,6 @@
- $attr )
-	$must_attrs[$i] = $attr->getName();
+//foreach( $must_attrs as $i => $attr )
+	//$must_attrs[$i] = $attr->getName();
 
 // build a list of the attributes that this new objectClass requires,
 // but that the object does not currently contain
 $needed_attrs = array();
-foreach( $must_attrs as $attr )
-	if( ! in_array( strtolower($attr), $current_attrs ) )
-		$needed_attrs[] = $attr;
+foreach( $must_attrs as $attr ) {
+    $attr = get_schema_attribute( $server_id, $attr->getName() );
+    //echo "
"; var_dump( $attr ); echo "
"; + // First, check if one of this attr's aliases is already an attribute of this entry + foreach( $attr->getAliases() as $alias_attr_name ) + if( in_array( strtolower( $alias_attr_name ), $current_attrs ) ) + // Skip this attribute since it's already in the entry + continue; + if( in_array( strtolower($attr->getName()), $current_attrs ) ) + continue; + + // We made it this far, so the attribute needs to be added to this entry in order + // to add this objectClass + $needed_attrs[] = $attr; +} if( count( $needed_attrs ) > 0 ) { - include 'header.php'; ?> + include './header.php'; ?>

@@ -83,14 +97,8 @@ if( count( $needed_attrs ) > 0 ) $attr ) { ?> - - - - - - - - + getName()); ?> + @@ -106,12 +114,13 @@ if( count( $needed_attrs ) > 0 ) } else { - $ds = pla_ldap_connect( $server_id ) or pla_error( "Could not connect to LDAP server." ); + $ds = pla_ldap_connect( $server_id ); + pla_ldap_connection_is_error( $ds ); $add_res = @ldap_mod_add( $ds, $dn, array( 'objectClass' => $new_oclass ) ); if( ! $add_res ) pla_error( "Could not perform ldap_mod_add operation.", ldap_error( $ds ), ldap_errno( $ds ) ); else - header( "Location: edit.php?server_id=$server_id&dn=$encoded_dn" ); + header( "Location: edit.php?server_id=$server_id&dn=$encoded_dn&modified_attrs[]=objectClass" ); } diff --git a/add_value.php b/add_value.php index 98a55b9..681cece 100644 --- a/add_value.php +++ b/add_value.php @@ -1,4 +1,6 @@ - $new_value ); +$new_entry = array( $attr => $new_value ); + +// Check to see if this is a unique Attribute +if( $badattr = checkUniqueAttr( $server_id, $dn, $attr, $new_entry ) ) { + $search_href='search.php?search=true&form=advanced&server_id=' . $server_id . '&filter=' . $attr . '=' . $badattr; + pla_error(sprintf( $lang['unique_attr_failed'] , $attr,$badattr,$dn,$search_href ) ); +} + +// Call the custom callback for each attribute modification +// and verify that it should be modified. +if( preAttrAdd( $server_id, $dn, $attr, $new_entry ) ) { $add_result = @ldap_mod_add( $ds, $dn, $new_entry ); if( ! $add_result ) pla_error( $lang['could_not_perform_ldap_mod_add'], ldap_error( $ds ), ldap_errno( $ds ) ); +} header( "Location: edit.php?server_id=$server_id&dn=$encoded_dn&modified_attrs[]=$encoded_attr" ); diff --git a/add_value_form.php b/add_value_form.php index 90e8e02..6c9d429 100644 --- a/add_value_form.php +++ b/add_value_form.php @@ -1,4 +1,6 @@ - +include './header.php'; ?> @@ -49,7 +54,7 @@ include 'header.php'; ?> - +

:     @@ -61,7 +66,7 @@ include 'header.php'; ?>
- +
@@ -115,25 +120,29 @@ include 'header.php'; ?> +

- +
-
> @@ -143,17 +152,23 @@ include 'header.php'; ?> + + + getMaxLength() ) echo "maxlength=\"" . $schema_attr->getMaxLength() . "\" "; - ?>name="new_value" size="40" value="" /> + ?>name="new_value" size="40" value="" /> + - +
getDescription() ) { ?> - Description: getDescription(); ?>
+ : getDescription(); ?>
getType() ) { ?> @@ -161,7 +176,7 @@ include 'header.php'; ?> getMaxLength() ) { ?> - Max length: getMaxLength() ); ?> characters
+ : getMaxLength() ); ?>
diff --git a/blowfish.php b/blowfish.php new file mode 100644 index 0000000..4848c57 --- /dev/null +++ b/blowfish.php @@ -0,0 +1,471 @@ + + * + * See the enclosed file COPYING for license information (LGPL). If you + * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html. + * + * @author Mike Cochrane + * @version $Revision: 1.1 $ + * @since Horde 2.2 + * @package horde.cipher + */ + +// Change for phpMyAdmin by lem9: +//class Horde_Cipher_blowfish extends Horde_Cipher { +class Horde_Cipher_blowfish { + + /* Pi Array */ + var $p = array( + 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344, + 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89, + 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C, + 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917, + 0x9216D5D9, 0x8979FB1B); + + /* S Boxes */ + var $s1 = array( + 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7, + 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99, + 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16, + 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E, + 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE, + 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013, + 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF, + 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E, + 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60, + 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440, + 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE, + 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A, + 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E, + 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677, + 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193, + 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032, + 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88, + 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239, + 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E, + 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0, + 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3, + 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98, + 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88, + 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE, + 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6, + 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D, + 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B, + 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7, + 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA, + 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463, + 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F, + 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09, + 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3, + 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB, + 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279, + 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8, + 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB, + 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82, + 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB, + 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573, + 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0, + 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B, + 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790, + 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8, + 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4, + 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0, + 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7, + 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C, + 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD, + 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1, + 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299, + 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9, + 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477, + 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF, + 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49, + 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF, + 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA, + 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5, + 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41, + 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915, + 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400, + 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915, + 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664, + 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A); + var $s2 = array( + 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623, + 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266, + 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1, + 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E, + 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6, + 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1, + 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E, + 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1, + 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737, + 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8, + 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF, + 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD, + 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701, + 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7, + 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41, + 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331, + 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF, + 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF, + 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E, + 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87, + 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C, + 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2, + 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16, + 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD, + 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B, + 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509, + 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E, + 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3, + 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F, + 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A, + 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4, + 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960, + 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66, + 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28, + 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802, + 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84, + 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510, + 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF, + 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14, + 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E, + 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50, + 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7, + 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8, + 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281, + 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99, + 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696, + 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128, + 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73, + 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0, + 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0, + 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105, + 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250, + 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3, + 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285, + 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00, + 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061, + 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB, + 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E, + 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735, + 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC, + 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9, + 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340, + 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20, + 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7); + var $s3 = array( + 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934, + 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068, + 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF, + 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840, + 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45, + 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504, + 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A, + 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB, + 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE, + 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6, + 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42, + 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B, + 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2, + 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB, + 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527, + 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B, + 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33, + 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C, + 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3, + 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC, + 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17, + 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564, + 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B, + 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115, + 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922, + 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728, + 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0, + 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E, + 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37, + 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D, + 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804, + 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B, + 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3, + 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB, + 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D, + 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C, + 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350, + 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9, + 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A, + 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE, + 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D, + 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC, + 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F, + 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61, + 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2, + 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9, + 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2, + 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C, + 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E, + 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633, + 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10, + 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169, + 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52, + 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027, + 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5, + 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62, + 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634, + 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76, + 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24, + 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC, + 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4, + 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C, + 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837, + 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0); + var $s4 = array( + 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B, + 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE, + 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B, + 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4, + 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8, + 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6, + 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304, + 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22, + 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4, + 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6, + 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9, + 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59, + 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593, + 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51, + 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28, + 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C, + 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B, + 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28, + 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C, + 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD, + 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A, + 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319, + 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB, + 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F, + 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991, + 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32, + 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680, + 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166, + 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE, + 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB, + 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5, + 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47, + 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370, + 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D, + 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84, + 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048, + 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8, + 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD, + 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9, + 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7, + 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38, + 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F, + 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C, + 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525, + 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1, + 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442, + 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964, + 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E, + 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8, + 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D, + 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F, + 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299, + 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02, + 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC, + 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614, + 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A, + 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6, + 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B, + 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0, + 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060, + 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E, + 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9, + 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F, + 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6); + + /* The number of rounds to do */ + var $_rounds = 16; + + /* Constructor */ + function Cipher_blowfish($params = null) + { + } + + /** + * Set the key to be used for en/decryption + * + * @param String $key The key to use + */ + function setKey($key) + { + $key = $this->_formatKey($key); + $keyPos = $keyXor = 0; + + $iMax = count($this->p); + $keyLen = count($key); + for ($i = 0; $i < $iMax; $i++) { + for ($t = 0; $t < 4; $t++) { + $keyXor = ($keyXor << 8) | (($key[$keyPos]) & 0x0ff); + if (++$keyPos == $keyLen) { + $keyPos = 0; + } + } + $this->p[$i] = $this->p[$i] ^ $keyXor; + } + + $encZero = array('L' => 0, 'R' => 0); + for ($i = 0; $i + 1 < $iMax; $i += 2) { + $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']); + $this->p[$i] = $encZero['L']; + $this->p[$i + 1] = $encZero['R']; + } + + $iMax = count($this->s1); + for ($i = 0; $i < $iMax; $i += 2) { + $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']); + $this->s1[$i] = $encZero['L']; + $this->s1[$i + 1] = $encZero['R']; + } + + $iMax = count($this->s2); + for ($i = 0; $i < $iMax; $i += 2) { + $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']); + $this->s2[$i] = $encZero['L']; + $this->s2[$i + 1] = $encZero['R']; + } + + $iMax = count($this->s3); + for ($i = 0; $i < $iMax; $i += 2) { + $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']); + $this->s3[$i] = $encZero['L']; + $this->s3[$i + 1] = $encZero['R']; + } + + $iMax = count($this->s4); + for ($i = 0; $i < $iMax; $i += 2) { + $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']); + $this->s4[$i] = $encZero['L']; + $this->s4[$i + 1] = $encZero['R']; + } + + } + + /** + * Return the size of the blocks that this cipher needs + * + * @return Integer The number of characters per block + */ + function getBlockSize() + { + return 8; + } + + /** + * Encrypt a block on data. + * + * @param String $block The data to encrypt + * @param optional String $key The key to use + * + * @return String the encrypted output + */ + function encryptBlock($block, $key = null) + { + if (!is_null($key)) { + $this->setKey($key); + } + + list($L, $R) = array_values(unpack('N*', $block)); + $parts = $this->_encryptBlock($L, $R); + return pack("NN", $parts['L'], $parts['R']); + } + + /** + * Encrypt a block on data. + * + * @param String $L The data to encrypt. + * @param String $R The data to encrypt. + * + * @return String The encrypted output. + */ + function _encryptBlock($L, $R) + { + $L ^= $this->p[0]; + $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[1]; + $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[2]; + $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[3]; + $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[4]; + $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[5]; + $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[6]; + $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[7]; + $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[8]; + $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[9]; + $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[10]; + $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[11]; + $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[12]; + $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[13]; + $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[14]; + $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[15]; + $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[16]; + $R ^= $this->p[17]; + + return array('L' => $R, 'R' => $L); + } + + /** + * Decrypt a block on data. + * + * @param String $block The data to decrypt + * @param optional String $key The key to use + * + * @return String the decrypted output + */ + function decryptBlock($block, $key = null) + { + if (!is_null($key)) { + $this->setKey($key); + } + + list($L, $R) = array_values(unpack('N*', $block)); + + $L ^= $this->p[17]; + $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[16]; + $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[15]; + $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[14]; + $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[13]; + $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[12]; + $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[11]; + $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[10]; + $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[9]; + $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[8]; + $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[7]; + $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[6]; + $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[5]; + $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[4]; + $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[3]; + $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[2]; + $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[1]; + + $decrypted = pack("NN", $R ^ $this->p[0], $L); + return $decrypted; + } + + /** + * Converts a text key into an array. + * + * @return array The key. + */ + function _formatKey($key) + { + return array_values(unpack('C*', $key)); + } + +} +?> diff --git a/check_lang_files.php b/check_lang_files.php index 28aab12..9422a40 100644 --- a/check_lang_files.php +++ b/check_lang_files.php @@ -1,42 +1,75 @@ - +phpldapadmin - check of translation"; -echo "

Incomplete or Erroneous Language Files

\n\n"; -include realpath( 'lang/en.php' ); +include realpath( './lang/en.php' ); $english_lang = $lang; unset( $lang ); -$lang_dir = realpath( 'lang' ); +$lang_dir = realpath( './lang/recoded' ); $dir = opendir( $lang_dir ); +// First, detect any unused strings from the english language: +echo "

Checking English language file for unused strings

\n"; +echo "
    \n"; +$unused_keys = false; + +// special case keys that do not occur hard-coded but are dynamically generated +$ignore_keys['equals'] = 1; +$ignore_keys['starts with'] = 1; +$ignore_keys['ends with'] = 1; +$ignore_keys['sounds like'] = 1; +$ignore_keys['contains'] = 1; +foreach( $english_lang as $key => $string ) { + if( isset( $ignore_keys[$key] ) ) + continue; + $grep_cmd = "grep -r \"lang\[['\\\"]$key\" *.php templates/"; + $used = `$grep_cmd`; + if( ! $used ) { + $unused_keys = true; + echo "
  1. Unused English key: $key
        (" . htmlspecialchars( $grep_cmd ) . ")
  2. \n"; + flush(); + } +} +if( false === $unused_keys ) + echo "No unused English strings."; +echo "
\n"; + +echo "

Incomplete or Erroneous Language Files

\n\n"; +echo "

check all languages

\n"; +flush(); while( ( $file = readdir( $dir ) ) !== false ) { + // skip the devel languages, english, and auto + if( $file == "zz.php" || $file == "zzz.php" || $file == "auto.php" || $file == "en.php" ) + continue; + // Sanity check. Is this really a PHP file? if( ! preg_match( "/\.php$/", $file ) ) continue; - if( $file == 'en.php' // is the mother of all language-files - || $file == 'auto.php' // and ignore auto.php - ) - continue; - echo "

$file

"; - echo "
    "; + echo "

    $file

    \n"; + echo "
      \n"; unset( $lang ); $lang = array(); include realpath( $lang_dir.'/'.$file ); $has_errors = false; + if ($CHECKLANG=="" || $file===$CHECKLANG ){ foreach( $english_lang as $key => $string ) if( ! isset( $lang[ $key ] ) ) { $has_errors = true; - echo "
    1. missing entry: $key
    2. "; + echo "
    3. missing entry: $key
    4. \n"; } foreach( $lang as $key => $string ) if( ! isset( $english_lang[ $key ] ) ){ $has_errors = true; - echo "
    5. extra entry: $key
    6. "; + echo "
    7. extra entry: $key
    8. \n"; } if( ! $has_errors ) - echo "(No errors)"; - echo "
    "; + echo "(No errors)\n"; + } + echo "
\n"; + } diff --git a/collapse.php b/collapse.php index 57b1f64..498bde5 100644 --- a/collapse.php +++ b/collapse.php @@ -1,4 +1,6 @@ -= "5" ) + ini_set( "zend.ze1_compatibility_mode", 1 ); + // Turn on all notices and warnings. This helps us write cleaner code (we hope at least) -error_reporting( E_ALL ); +if( phpversion() >= "5" ) + // E_DEBUG is PHP5 specific and prevents warnings about using 'var' to declar class members + error_reporting( 'E_DEBUG' ); +else + // For PHP4 + error_reporting( E_ALL ); -// We require this version or newer (use @ to surpress errors if we are included twice) -@define( 'REQUIRED_PHP_VERSION', '4.1.0' ); -@define( 'HTTPS_PORT', 443 ); -// config.php might not exist (if the user hasn't configured PLA yet) -// Only include it if it does exist. -if( file_exists( realpath( 'config.php' ) ) ) { - ob_start(); - is_readable( realpath( 'config.php' ) ) or pla_error( "Could not read config.php, its permissions are too strict." ); - require realpath( 'config.php' ); - ob_end_clean(); +// For PHP5 backward/forward compatibility +if( ! defined( 'E_STRICT' ) ) { + define( 'E_STRICT', 2048 ); } -// General functions (pla_ldap_search(), pla_error(), get_object_attrs(), etc.) -is_readable( realpath( 'functions.php' ) ) - or pla_error( "Cannot read the file 'functions.php' its permissions are too strict." ); -ob_start(); -require_once realpath( 'functions.php' ); -ob_end_clean(); +/** The minimum version of PHP required to run phpLDAPadmin. */ +@define( 'REQUIRED_PHP_VERSION', '4.1.0' ); +/** The default setting for $search_deref if unspecified or misconfigured by user. */ +@define( 'DEFAULT_SEARCH_DEREF_SETTING', LDAP_DEREF_ALWAYS ); +/** The default setting for $tree_deref if unspecified or misconfigured by user. */ +@define( 'DEFAULT_TREE_DEREF_SETTING', LDAP_DEREF_NEVER ); +/** The default setting for $export_deref if unspecified or misconfigured by user. */ +@define( 'DEFAULT_EXPORT_DEREF_SETTING', LDAP_DEREF_NEVER ); +/** The default setting for $view_deref if unspecified or misconfigured by user. */ +@define( 'DEFAULT_VIEW_DEREF_SETTING', LDAP_DEREF_NEVER ); -// Functions for reading the server schema (get_schema_object_classes(), etc.) -is_readable( realpath( 'schema_functions.php' ) ) - or pla_error( "Cannot read the file 'schema_functions.php' its permissions are too strict." ); +// General functions needed to proceed (pla_ldap_search(), pla_error(), get_object_attrs(), etc.) ob_start(); -require_once realpath( 'schema_functions.php' ); -ob_end_clean(); - -// Functions that can be defined by the user (preEntryDelete(), postEntryDelete(), etc.) -is_readable( realpath( 'custom_functions.php' ) ) - or pla_error( "Cannot read the file 'custom_functions.php' its permissions are too strict." ); -ob_start(); -require_once realpath( 'custom_functions.php' ); +if( ! file_exists( realpath( './functions.php' ) ) ) { + ob_end_clean(); + die( "Fatal error: Required file 'functions.php' does not exist." ); +} +if( ! is_readable( realpath( './functions.php' ) ) ) { + ob_end_clean(); + die( "Cannot read the file 'functions.php' its permissions are too strict." ); +} +require_once realpath( './functions.php' ); ob_end_clean(); // Our custom error handler receives all error notices that pass the error_reporting() @@ -51,16 +57,41 @@ set_error_handler( 'pla_error_handler' ); // based on the user-configured language. $lang = array(); -// Little bit of sanity checking -if( ! file_exists( realpath( 'lang/recoded' ) ) ) { - pla_error( "Your install of phpLDAPadmin is missing the 'lang/recoded' directory. This should not happen. You can try running 'make' in the lang directory" ); +// config.php might not exist (if the user hasn't configured PLA yet) +// Only include it if it does exist. +if( file_exists( realpath( './config.php' ) ) ) { + ob_start(); + is_readable( realpath( './config.php' ) ) or pla_error( "Could not read config.php, its permissions are too strict." ); + include realpath( './config.php' ); + ob_end_clean(); } -// use English as a base-line (in case the selected language is missing strings) -if( file_exists( realpath( 'lang/recoded/en.php' ) ) ) - include realpath( 'lang/recoded/en.php' ); -else - pla_error( "Error! Missing recoded English language file. Run 'make' in the lang/ directory." ); +$required_files = array( + // The base English language strings + './lang/recoded/en.php', + // Functions for managing the session (pla_session_start(), etc.) + './session_functions.php', + // Functions for reading the server schema (get_schema_object_classes(), etc.) + './schema_functions.php', + // Functions that can be defined by the user (preEntryDelete(), postEntryDelete(), etc.) + './custom_functions.php', + // Functions for hashing passwords with OpenSSL binary (only if mhash not present) + './emuhash_functions.php' ); + + +// Include each required file and check for sanity. +foreach( $required_files as $file_name ) { + file_exists( realpath( $file_name ) ) + or pla_error( "Fatal error: Required file '$file_name' does not exist." ); + is_readable( realpath( $file_name ) ) + or pla_error( "Fatal error: Cannot read the file '$file_name', its permissions are too strict." ); + ob_start(); + require_once realpath( $file_name ); + ob_end_clean(); +} + +if( pla_session_start() ) + postSessionInit(); // Language configuration. Auto or specified? // Shall we attempt to auto-determine the language? @@ -83,7 +114,9 @@ if( isset( $language ) ) { // try to grab one after the other the language file if( file_exists( realpath( "lang/recoded/$HTTP_LANG.php" ) ) && is_readable( realpath( "lang/recoded/$HTTP_LANG.php" ) ) ) { + ob_start(); include realpath( "lang/recoded/$HTTP_LANG.php" ); + ob_end_clean(); break; } } @@ -95,10 +128,12 @@ if( isset( $language ) ) { $language = 'en'; if( file_exists( realpath( "lang/recoded/$language.php" ) ) && is_readable( realpath( "lang/recoded/$language.php" ) ) ) { + ob_start(); include realpath( "lang/recoded/$language.php" ); + ob_end_clean(); } else { pla_error( "Could not read language file 'lang/recoded/$language.php'. Either the file - does not exist, or permissions do not allow phpLDAPadmin to read it." ); + does not exist, or its permissions do not allow phpLDAPadmin to read it." ); } } } @@ -117,20 +152,10 @@ $templates['custom'] = // Strip slashes from GET, POST, and COOKIE variables if this // PHP install is configured to automatically addslashes() if ( get_magic_quotes_gpc() && ( ! isset( $slashes_stripped ) || ! $slashes_stripped ) ) { - if( ! function_exists( "array_stripslashes" ) ) { - function array_stripslashes(&$array) { - if( is_array( $array ) ) - while ( list( $key ) = each( $array ) ) - if ( is_array( $array[$key] ) && $key != $array ) - array_stripslashes( $array[$key] ); - else - $array[$key] = stripslashes( $array[$key] ); - } - } - array_stripslashes($_GET); array_stripslashes($_POST); array_stripslashes($_COOKIE); + array_stripslashes($_FILES); $slashes_stripped = true; } diff --git a/config.php.example b/config.php.example index d1e2f5d..6a63f3c 100644 --- a/config.php.example +++ b/config.php.example @@ -11,65 +11,134 @@ * */ +/** + * phpLDAPadmin can encrypt the content of sensitive cookies if you set this + * to a big random string. + */ +$blowfish_secret = ''; + // Your LDAP servers $i=0; $servers = array(); $servers[$i]['name'] = 'My LDAP Server'; /* A convenient name that will appear in - the tree viewer */ -$servers[$i]['host'] = 'ldap.example.com'; /* Examples: 'ldap.example.com', - 'ldaps://ldap.example.com/' - Note: Leave blank to remove it from the list - of servers in the tree viewer*/ + the tree viewer and throughout phpLDAPadmin to + identify this LDAP server to users. */ +$servers[$i]['host'] = 'ldap.example.com'; /* Examples: + 'ldap.example.com', + 'ldaps://ldap.example.com/', + 'ldapi://%2fusr%local%2fvar%2frun%2fldapi' + (Unix socket at /usr/local/var/run/ldap) + Note: Leave 'host' blank to make phpLDAPadmin + ignore this server. */ $servers[$i]['base'] = 'dc=example,dc=com'; /* The base DN of your LDAP server. Leave this - blank to have phpLDAPadmin - auto-detect it for you. */ + blank to have phpLDAPadmin auto-detect it for you. */ $servers[$i]['port'] = 389; /* The port your LDAP server listens on - (no quotes) */ -$servers[$i]['auth_type'] = 'config'; /* 2 options: 'form': you will be prompted, and - a cookie stored with your login dn and - password. 'config': specify your login dn - and password here. In both cases, use caution! */ + (no quotes). 389 is standard. */ +$servers[$i]['auth_type'] = 'config'; /* Three options for auth_type: + 1. 'cookie': you will login via a web form, + and a client-side cookie will store your + login dn and password. + 2. 'session': same as cookie but your login dn + and password are stored on the web server in + a persistent session variable. + 3. 'config': specify your login dn and password + here in this config file. No login will be + required to use phpLDAPadmin for this server. + Choose wisely to protect your authentication + information appropriately for your situation. If + you choose 'cookie', your cookie contents will be + encrypted using blowfish and the secret your specify + above as $blowfish_secret. */ $servers[$i]['login_dn'] = 'cn=Manager,dc=example,dc=com'; - /* For anonymous binds, leave the - login_dn and login_pass blank */ -$servers[$i]['login_pass'] = 'secret'; /* Your password (only if you specified 'config' - for 'auth_type' */ -$servers[$i]['tls'] = false; /* Use TLS to connect. Requires PHP 4.2 or newer */ -$servers[$i]['default_hash'] = 'crypt'; /* Default password hashing algorith; - One of md5, ssha, sha, md5crpyt, smd5, blowfish or + /* The DN of the user for phpLDAPadmin to bind with. + For anonymous binds or 'cookie' or 'session' auth_types, + leave the login_dn and login_pass blank. If you specify a + login_attr in conjunction with a cookie or session auth_type, + then you can also specify the login_dn/login_pass here for + searching the directory for users (ie, if your LDAP server + does not allow anonymous binds. */ +$servers[$i]['login_pass'] = 'secret'; /* Your LDAP password. If you specified an empty login_dn above, this + MUST also be blank. */ +$servers[$i]['tls'] = false; /* Use TLS (Transport Layer Security) to connect to the LDAP + server. */ +$servers[$i]['low_bandwidth'] = false; /* If the link between your web server and this LDAP server is + slow, it is recommended that you set 'low_bandwidth' to true. + This will cause phpLDAPadmin to forego some "fancy" features + to conserve bandwidth. */ +$servers[$i]['default_hash'] = 'crypt'; /* Default password hashing algorithm. + One of md5, ssha, sha, md5crpyt, smd5, blowfish, crypt or leave blank for now default algorithm. */ -$servers[$i]['login_attr'] = 'dn'; /* If you specified 'form' as the auth_type above, +$servers[$i]['login_attr'] = 'dn'; /* If you specified 'cookie' or 'session' as the auth_type above, you can optionally specify here an attribute - to use when logging in. If you enter 'uid', - then login as 'dsmith', phpLDAPadmin will - search for uid=dsmith and log in as such. Leave + to use when logging in. If you enter 'uid' + and login as 'dsmith', phpLDAPadmin will + search for (uid=dsmith) and log in as that user. Leave blank or specify 'dn' to use full DN for - logging in .*/ + logging in. Note also that if your LDAP server requires + you to login to perform searches, you can enter + the DN to use when searching in 'login_dn' and + 'login_pass' above. You may also specify 'string', in which case + you can provide a string to use for logging users + in. See 'login_string' directly below. */ +$servers[$i]['login_string'] = 'uid=,ou=People,dc=example,dc=com'; + /* If you specified 'cookie' or 'session' as the auth_type above, + and you specified 'string' for 'login_attr' above, you must provide + a string here for logging users in. If, for example, I + I have a lot of user entries with DNs like + "uid=dsmith,ou=People,dc=example,dc=com", then I can specify a string + "uid=,ou=People,dc=example,dc=com" and my users can login with + their user names alone, i.e., "dsmith" in this case. */ +$servers[$i]['login_class'] = ''; /* If 'login_attr' is used above such that phpLDAPadmin will + search for your DN at login, you may restrict the search to + a specific objectClass. E.g., set this to 'posixAccount' or + 'inetOrgPerson', depending upon your setup. */ $servers[$i]['read_only'] = false; /* Specify true If you want phpLDAPadmin to not display or permit any modification to the LDAP server. */ +$servers[$i]['show_create'] = true; /* Specify false if you do not want phpLDAPadmin to + draw the 'Create new' links in the tree viewer. */ $servers[$i]['enable_auto_uid_numbers'] = false; /* This feature allows phpLDAPadmin to automatically determine the next available uidNumber for a new entry. */ $servers[$i]['auto_uid_number_mechanism'] = 'search'; - /* The mechanism to use when finding the next available uidNumber. - Two possible values: 'uidpool' or 'search'. The 'uidpool' - mechanism uses an existing uidPool entry in your LDAP server - to blindly lookup the next available uidNumber. The 'search' - mechanism searches for entries with a uidNumber value and finds - the first available uidNumber (slower). */ + /* The mechanism to use when finding the next available uidNumber. + Two possible values: 'uidpool' or 'search'. The 'uidpool' + mechanism uses an existing uidPool entry in your LDAP server + to blindly lookup the next available uidNumber. The 'search' + mechanism searches for entries with a uidNumber value and finds + the first available uidNumber (slower). */ $servers[$i]['auto_uid_number_search_base'] = 'ou=People,dc=example,dc=com'; - /* The DN of the search base when the 'search' - mechanism is used above. */ + /* The DN of the search base when the 'search' + mechanism is used above. */ $servers[$i]['auto_uid_number_min'] = 1000; - /* The minimum number to use when searching for the next - available UID number (only when 'search' is used for - auto_uid_number_mechanism' */ + /* The minimum number to use when searching for the next + available UID number (only when 'search' is used for + auto_uid_number_mechanism' */ $servers[$i]['auto_uid_number_uid_pool_dn'] = 'cn=uidPool,dc=example,dc=com'; - /* The DN of the uidPool entry when 'uidpool' - mechanism is used above. */ + /* The DN of the uidPool entry when 'uidpool' + mechanism is used above. */ +$servers[$i]['auto_uid_number_search_dn'] = ''; + /* If you set this, then phpldapadmin will bind to LDAP with this user + ID when searching for the uidnumber. The idea is, this user id would + have full (readonly) access to uidnumber in your ldap directory (the + logged in user may not), so that you can be guaranteed to get a unique + uidnumber for your directory. */ +$servers[$i]['auto_uid_number_search_dn_pass'] = ''; + /* The password for the dn above. */ +$servers[$i]['disable_anon_bind'] = false; + /* Disable the anonymous login. */ +$servers[$i]['custom_pages_prefix'] = 'custom_'; + /* Use customized page with prefix when available. */ +$servers[$i]['unique_attrs_dn'] = ''; + /* If you set this, then phpldapadmin will bind to LDAP with this user + when testing for unique attributes (as set in unique_attrs array). If you + want to enforce unique attributes, than this id should have full (readonly) + access to the attributes in question (the logged in user may not have + enough access) */ +$servers[$i]['unique_attrs_dn_pass'] = ''; + /* The password for the dn above */ // If you want to configure additional LDAP servers, do so below. $i++; @@ -81,9 +150,12 @@ $servers[$i]['auth_type'] = 'config'; $servers[$i]['login_dn'] = ''; $servers[$i]['login_pass'] = ''; $servers[$i]['tls'] = false; +$servers[$i]['low_bandwidth'] = false; $servers[$i]['default_hash'] = 'crypt'; -$servers[$i]['login_attr'] = ''; +$servers[$i]['login_attr'] = 'dn'; +$servers[$i]['login_class'] = ''; $servers[$i]['read_only'] = false; +$servers[$i]['show_create'] = true; $servers[$i]['enable_auto_uid_numbers'] = false; $servers[$i]['auto_uid_number_mechanism'] = 'search'; $servers[$i]['auto_uid_number_search_base'] = 'ou=People,dc=example,dc=com'; @@ -101,6 +173,60 @@ $jpeg_temp_dir = "/tmp"; // Example for Unix systems /** Appearance and Behavior **/ /** **/ +// Set this to true if you want to hide the Request New Feature and Report bugs. +$hide_configuration_management = false; + + +// A format string used to display enties in the tree viewer (left-hand side) +// You can use special tokens to draw the entries as you wish. You can even mix in HTML to format the string +// Here are all the tokens you can use: +// %rdn - draw the RDN of the entry (ie, "cn=Dave") +// %dn - draw the DN of the entry (ie, "cn=Dave,ou=People,dc=example,dc=com" +// %rdnValue - draw the value of the RDN (ie, instead of "cn=Dave", just draw "Dave") +// %[attrname]- draw the value (or values) of the specified attribute. +// examle: %gidNumber +$tree_display_format = '%rdn'; +// +// Examples: +// +// To draw the gidNumber and uidNumber to the right of the RDN in a small, gray font: +//$tree_display_format = '%rdn ( %gidNumber / %uidNumber )'; +// To draw the full DN of each entry: +//$tree_display_format = '%dn'; +// To draw the objectClasses to the right in parenthesis: +//$tree_display_format = '%rdn ( %objectClass )'; +// To draw the user-friendly RDN value (ie, instead of "cn=Dave", just draw "Dave"): +//$tree_display_format = '%rdnValue'; + + +// Aliases and Referrrals +// +// Similar to ldapsearh's -a option, the following options allow you to configure +// how phpLDAPadmin will treat aliases and referrals in the LDAP tree. +// For the following four settings, avaialable options include: +// +// LDAP_DEREF_NEVER - aliases are never dereferenced (eg, the contents of +// the alias itself are shown and not the referenced entry). +// LDAP_DEREF_SEARCHING - aliases should be dereferenced during the search but +// not when locating the base object of the search. +// LDAP_DEREF_FINDING - aliases should be dereferenced when locating the base +// object but not during the search. +// LDAP_DEREF_ALWAYS - aliases should be dereferenced always (eg, the contents +// of the referenced entry is shown and not the aliasing entry) + +// How to handle references and aliases in the search form. See above for options. +$search_deref = LDAP_DEREF_ALWAYS; + +// How to handle references and aliases in the tree viewer. See above for options. +$tree_deref = LDAP_DEREF_NEVER; + +// How to handle references and aliases for exports. See above for options. +$export_deref = LDAP_DEREF_NEVER; + +// How to handle references and aliases when viewing entries. See above for options. +$view_deref = LDAP_DEREF_NEVER; + + // The language setting. If you set this to 'auto', phpLDAPadmin will // attempt to determine your language automatically. Otherwise, available // lanaguages are: 'ct', 'de', 'en', 'es', 'fr', 'it', 'nl', and 'ru' @@ -116,6 +242,11 @@ $enable_mass_delete = false; // when a user logs in to a server anonymously $anonymous_bind_implies_read_only = true; +// Set to true if you want phpLDAPadmin to redirect anonymous +// users to a search form with no tree viewer on the left after +// logging in. +$anonymous_bind_redirect_no_tree = false; + // If you used auth_type 'form' in the servers list, you can adjust how long the cookie will last // (default is 0 seconds, which expires when you close the browser) $cookie_time = 0; // seconds @@ -132,21 +263,46 @@ $show_hints = true; // set to false to disable hints // When using the search page, limit result size to this many entries $search_result_size_limit = 50; +// By default, when searching you may display a list or a table of results. +// Set this to 'table' to see table formatted results. +// Set this to 'list' to see "Google" style formatted search results. +$default_search_display = 'list'; + +// If true, display all password hash values as "******". Note that clear-text +// passwords will always be displayed as "******", regardless of this setting. +$obfuscate_password_display = false; + /** **/ /** Simple Search Form Config **/ /** **/ // Which attributes to include in the drop-down menu of the simple search form (comma-separated) -// Change this to suit your needs for convenient searching. Be sure to change the correlating +// Change this to suit your needs for convenient searching. Be sure to change the corresponding // list below ($search_attributes_display) $search_attributes = "uid, cn, gidNumber, objectClass, telephoneNumber, mail, street"; -// This list correlates to the list directly above. If you want to present more readable names +// This list corresponds to the list directly above. If you want to present more readable names // for your search attributes, do so here. Both lists must have the same number of entries. $search_attributes_display = "User Name, Common Name, Group ID, Object Class, Phone Number, Email, Address"; -// The list of attributes to display in each search result entry summary -$search_result_attributes = "dn, cn"; +// The list of attributes to display in each search result entry. +// Note that you can add * to the list to display all attributes +$search_result_attributes = "cn, sn, uid, postalAddress, telephoneNumber"; + +// You can re-arrange the order of the search criteria on the simple search form by modifying this array +// You cannot however change the names of the criteria. Criteria names will be translated at run-time. +$search_criteria_options = array( "equals", "starts with", "contains", "ends with", "sounds like" ); + +// If you want certain attributes to be editable as multi-line, include them in this list +// A multi-line textarea will be drawn instead of a single-line text field +$multi_line_attributes = array( "postalAddress", "homePostalAddress", "personalSignature" ); + +// A list of syntax OIDs which support multi-line attribute values: +$multi_line_syntax_oids = array( + // octet string syntax OID: + "1.3.6.1.4.1.1466.115.121.1.40", + // postal address syntax OID: + "1.3.6.1.4.1.1466.115.121.1.41" ); /** **/ /** User-friendly attribute translation **/ @@ -168,7 +324,66 @@ $friendly_attrs[ 'telephoneNumber' ] = 'Phone'; // Do this by adding the desired attributes to this list (and uncomment it). This // only affects the editor screen. Attributes will still be visible in the schema // browser and elsewhere. An example is provided below: +// NOTE: The user must be able to read the hidden_except_dn entry to be excluded. //$hidden_attrs = array( 'jpegPhoto', 'objectClass' ); +//$hidden_except_dn = "cn=PLA UnHide,ou=Groups,c=AU"; + +// Hidden attributes in read-only mode. If undefined, it will be equal to $hidden_attrs. +//$hidden_attrs_ro = array( 'objectClass','shadowWarning', 'shadowLastChange', 'shadowMax', +// 'shadowFlag', 'shadowInactive', 'shadowMin', 'shadowExpire' ); + +/** **/ +/** Read-only attributes **/ +/** **/ + +// You may want to phpLDAPadmin to display certain attributes as read only, meaning +// that users will not be presented a form for modifying those attributes, and they +// will not be allowed to be modified on the "back-end" either. You may configure +// this list here: +// NOTE: The user must be able to read the read_only_except_dn entry to be excluded. + +//$read_only_attrs = array( 'objectClass' ); +//$read_only_except_dn = "cn=PLA ReadWrite,ou=Groups,c=AU"; + +// An example of how to specify multiple read-only attributes: +// $read_only_attrs = array( 'jpegPhoto', 'objectClass', 'someAttribute' ); + +/** **/ +/** Unique attributes **/ +/** **/ +// You may want phpLDAPadmin to enforce some attributes to have unique values (ie: +// not belong to other entries in your tree. This (together with "unique_attrs_dn" +// and "unique_attrs_dn_pass" option will not let updates to occur with other attributes +// have the same value. +// NOTE: Currently the unique_attrs is NOT enforced when copying a dn. (Need to present a user with +// the option of changing the unique attributes. +//$unique_attrs = array('uid','uidNumber','mail'); + +/** **/ +/** Predefined Queries (canned views) **/ +/** **/ + +// To make searching easier, you may setup predefined queries below (activate the lines by removing "//") +$q=0; +$queries = array(); +$queries[$q]['name'] = 'Samba Users'; /* The name that will appear in the simple search form */ +$queries[$q]['server'] = '0'; /* The ldap server to query, must be defined in the $servers list above */ +$queries[$q]['base'] = 'dc=example,dc=com'; /* The base to search on */ +$queries[$q]['scope'] = 'sub'; /* The search scope (sub, base, one) */ +$queries[$q]['filter'] = '(&(|(objectClass=sambaAccount)(objectClass=sambaSamAccount))(objectClass=posixAccount)(!(uid=*$)))'; + /* The LDAP filter to use */ +$queries[$q]['attributes'] = 'uid, smbHome, uidNumber'; + /* The attributes to return */ + +// Add more pre-defined queries by copying the text below +$q++; +$queries[$q]['name'] = 'Samba Computers'; +$queries[$q]['server'] = '0'; +$queries[$q]['base'] = 'dc=example,dc=com'; +$queries[$q]['scope'] = 'sub'; +$queries[$q]['filter'] = '(&(objectClass=sambaAccount)(uid=*$))'; +$queries[$q]['attributes'] = 'uid, homeDirectory'; + ?> diff --git a/copy.php b/copy.php index 9ce8834..a5db1b5 100644 --- a/copy.php +++ b/copy.php @@ -1,4 +1,6 @@ \n"; @@ -51,7 +52,7 @@ if( $do_recursive ) { echo "\n"; echo $lang['copy_building_snapshot']; flush(); - build_tree( $source_server_id, $source_dn, $snapshot_tree ); + build_tree( $source_server_id, $source_dn, $snapshot_tree, $filter ); echo " " . $lang['success'] . "
\n"; flush(); @@ -69,8 +70,11 @@ if( $copy_result ) $edit_url="edit.php?server_id=$dest_server_id&dn=" . rawurlencode( $dest_dn ); $new_rdn = get_rdn( $dest_dn ); $container = get_container( $dest_dn ); - if( session_is_registered( 'tree' ) ) + + if( array_key_exists( 'tree', $_SESSION ) ) { + // do we not have a tree and tree icons yet? Build a new ones. + initialize_session_tree(); $tree = $_SESSION['tree']; $tree_icons = $_SESSION['tree_icons']; if( isset( $tree[$dest_server_id][$container] ) ) @@ -92,7 +96,7 @@ if( $copy_result )
- " . $lang['copy_view_new_entry'] ."?"?> + " . $lang['copy_view_new_entry'] .""?>


@@ -141,7 +145,10 @@ function r_copy_dn( $source_server_id, $dest_server_id, $tree, $root_dn, $dest_d function copy_dn( $source_server_id, $source_dn, $dest_server_id, $dest_dn ) { global $ds, $lang; - $ds = pla_ldap_connect( $dest_server_id ) or pla_error( $lang['could_not_connect'] ); + + $ds = pla_ldap_connect( $dest_server_id ); + pla_ldap_connection_is_error( $ds ); + $attrs = get_object_attrs( $source_server_id, $source_dn ); $new_entry = $attrs; // modify the prefix-value (ie "bob" in cn=bob) to match the destination DN's value. @@ -167,14 +174,13 @@ function copy_dn( $source_server_id, $source_dn, $dest_server_id, $dest_dn ) } } -function build_tree( $source_server_id, $root_dn, &$tree ) +function build_tree( $source_server_id, $root_dn, &$tree, $filter='(objectClass=*)' ) { - $children = get_container_contents( $source_server_id, $root_dn ); + $children = get_container_contents( $source_server_id, $root_dn, 0, $filter ); if( is_array( $children ) && count( $children ) > 0 ) { $tree[ $root_dn ] = $children; foreach( $children as $child_dn ) - build_tree( $source_server_id, $child_dn, $tree ); + build_tree( $source_server_id, $child_dn, $tree, $filter ); } - } diff --git a/copy_form.php b/copy_form.php index 2ebe9b8..555537e 100644 --- a/copy_form.php +++ b/copy_form.php @@ -1,4 +1,6 @@ $server ) -{ +if (count($servers)>1){ + $select_server_html .= ''; +} else { + $server = reset($servers); if( $server['host'] ) - { - $select_server_html .= "\n"; - } + $select_server_html .= '' . + '' . $server['name'] . ''; } $children = get_container_contents( $server_id, $dn ); -include 'header.php'; ?> +include './header.php'; + +// Draw some javaScrpt to enable/disable the filter field if this may be a recursive copy +if( is_array( $children ) && count( $children ) > 0 ) { ?> + +

-

Server:     :

+

:     :

:
@@ -50,7 +70,7 @@ include 'header.php'; ?> - +
- + - - - - - 0 ) { ?> - + + + + + + - +
: @@ -61,27 +81,39 @@ include 'header.php'; ?>
:
- : + ()
:
+ + + + + +
diff --git a/create.php b/create.php index b46fa79..36aee34 100644 --- a/create.php +++ b/create.php @@ -1,4 +1,6 @@ $val ) { if( $val == '' ) pla_error( sprintf( $lang['create_required_attribute'], htmlspecialchars( $attr ) ) ); - $new_entry[ $attr ][] = utf8_encode( $val ); + $new_entry[ $attr ][] = $val; } } -if( isset( $vals ) && is_array( $vals ) ) { - foreach( $vals as $i => $val ) { - $attr = $attrs[$i]; +if( isset( $attrs ) && is_array( $attrs ) ) { + foreach( $attrs as $i => $attr ) { if( is_attr_binary( $server_id, $attr ) ) { - if( $_FILES['vals']['name'][$i] != '' ) { + if( isset( $_FILES['vals']['name'][$i] ) && $_FILES['vals']['name'][$i] != '' ) { // read in the data from the file $file = $_FILES['vals']['tmp_name'][$i]; $f = fopen( $file, 'r' ); @@ -55,8 +57,9 @@ if( isset( $vals ) && is_array( $vals ) ) { $new_entry[ $attr ][] = $val; } } else { + $val = isset( $vals[$i] ) ? $vals[$i] : ''; if( '' !== trim($val) ) - $new_entry[ $attr ][] = utf8_encode( $val ); + $new_entry[ $attr ][] = $val; } } } @@ -65,18 +68,26 @@ $new_entry['objectClass'] = $object_classes; if( ! in_array( 'top', $new_entry['objectClass'] ) ) $new_entry['objectClass'][] = 'top'; -// UTF-8 magic. Must decode the values that have been passed to us -foreach( $new_entry as $attr => $vals ) +foreach( $new_entry as $attr => $vals ) { + + // Check to see if this is a unique Attribute + if( $badattr = checkUniqueAttr( $server_id, $new_dn, $attr, $vals ) ) { + $search_href='search.php?search=true&form=advanced&server_id=' . $server_id . '&filter=' . $attr . '=' . $badattr; + pla_error(sprintf( $lang['unique_attr_failed'] , $attr,$badattr,$new_dn,$search_href ) ); + } + if( ! is_attr_binary( $server_id, $attr ) ) if( is_array( $vals ) ) foreach( $vals as $i => $v ) - $new_entry[ $attr ][ $i ] = utf8_decode( $v ); + $new_entry[ $attr ][ $i ] = $v; else - $new_entry[ $attr ] = utf8_decode( $vals ); + $new_entry[ $attr ] = $vals; +} //echo "
"; var_dump( $new_dn );print_r( $new_entry ); echo "
"; $ds = pla_ldap_connect( $server_id ); +pla_ldap_connection_is_error( $ds ); // Check the user-defined custom call back first if( true === preEntryCreate( $server_id, $new_dn, $new_entry ) ) @@ -86,11 +97,12 @@ else if( $add_result ) { postEntryCreate( $server_id, $new_dn, $new_entry ); - $edit_url="edit.php?server_id=$server_id&dn=" . rawurlencode( $new_dn ); + if( $redirect ) + $redirect_url = $redirect; + else + $redirect_url = "edit.php?server_id=$server_id&dn=" . rawurlencode( $new_dn ); - // update the session tree to reflect the change - session_start(); - if( session_is_registered( 'tree' ) ) + if( array_key_exists( 'tree', $_SESSION ) ) { $tree = $_SESSION['tree']; $tree_icons = $_SESSION['tree_icons']; @@ -109,20 +121,21 @@ if( $add_result ) ?> - + - + - ... . + . '; -$js_dn_list = ''; -foreach( $servers as $id => $server ) { - if( $server['host'] ) { - $server_menu_html .= ''; +$server_menu_html = ''; +if (count($servers)>1){ + $server_menu_html .= ''; +} else { + $server = reset($servers); + if( $server['host'] ) + $server_menu_html .= '' . + '' . $server['name'] . ''; } -$server_menu_html .= ''; -include 'header.php'; ?> +include './header.php'; ?> @@ -46,54 +56,66 @@ include 'header.php'; ?> - + - - "> + + + - + - - +
Server::
Template: - - - $template ) { - - // Check and see if this template should be shown in the list - $isValid = false; - if (isset($template['regexp'])) { - if (@preg_match("/".$template['regexp']."/i", $container)) { - $isValid = true; - } - } else { - $isValid = true; - } - - if ($isValid) { - ?> - - - - - - + + - +
- checked - - />
+ : + + + + + +
+ + $template ) { + $i++; + // Balance the columns properly + if( ( count( $templates ) % 2 == 0 && $i == intval( $count / 2 ) ) || + ( count( $templates ) % 2 == 1 && $i == intval( $count / 2 ) + 1 ) ) + echo "
"; + // Check and see if this template should be shown in the list + $isValid = false; + if( isset($template['regexp'] ) ) { + if( @preg_match( "/".$template['regexp']."/i", $container ) ) { + $isValid = true; + } + } else { + $isValid = true; + } + + ?> + + + + + +
/> + +
+
diff --git a/creation_template.php b/creation_template.php index 6a161f9..6bda774 100644 --- a/creation_template.php +++ b/creation_template.php @@ -1,5 +1,5 @@ $template ) { + if( $template['handler'] == 'custom.php' ) { + $template = $id; + break; + } + } +} + +isset( $templates[$template] ) or pla_error( sprintf( $lang['invalid_template'], htmlspecialchars( $template ) ) ); +$template_id = $template; +$template = isset( $templates[$template] ) ? $templates[$template_id] : null; +$server_id = http_get_value( 'server_id' ); +check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] ); have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] ); -pla_ldap_connect( $server_id ) or pla_error( $lang['could_not_connect'] ); +$ds = pla_ldap_connect( $server_id ); +pla_ldap_connection_is_error( $ds ); $server_name = $servers[ $server_id ][ 'name' ]; if( is_server_read_only( $server_id ) ) pla_error( $lang['no_updates_in_read_only_mode'] ); -include 'header.php'; +include './header.php'; ?>

-

'', - using template ''

+

'', ''

" . htmlspecialchars( $template['handler'] ) . - " " . $lang['ctemplate_handler_does_not_exist']); +if( ! file_exists( $handler ) ) + pla_error( sprintf( $lang['template_does_not_exist'], htmlspecialchars( $template['handler'] ) ) ); +if( ! is_readable( $handler ) ) + pla_error( sprintf( $lang['template_not_readable'], htmlspecialchars( $template['handler'] ) ) ); +include $handler; +echo "\n"; + +?> diff --git a/custom_functions.php b/custom_functions.php index b33d4d3..4df7f34 100644 --- a/custom_functions.php +++ b/custom_functions.php @@ -1,4 +1,6 @@ ' . pretty_print_dn( $dn ) . '' ) ); -$ds = pla_ldap_connect( $server_id ) or pla_error( $lang['could_not_connect'] ); +$ds = pla_ldap_connect( $server_id ); +pla_ldap_connection_is_error( $ds ); // Check the user-defined custom callback first. if( true === preEntryDelete( $server_id, $dn ) ) { @@ -41,8 +45,7 @@ if( $del_result ) // kill the DN from the tree browser session variable and // refresh the tree viewer frame (left_frame) - session_start(); - if( session_is_registered( 'tree' ) ) + if( array_key_exists( 'tree', $_SESSION ) ) { $tree = $_SESSION['tree']; if( isset( $tree[$server_id] ) && is_array( $tree[$server_id] ) ) { @@ -61,7 +64,7 @@ if( $del_result ) session_write_close(); } - include 'header.php'; + include './header.php'; ?> @@ -71,13 +74,13 @@ if( $del_result )

-
+
' .pretty_print_dn($dn) . '' ); ?>
' . pretty_print_dn( $dn ) . '' ), ldap_error( $ds ), ldap_errno( $ds ) ); } diff --git a/delete_attr.php b/delete_attr.php index c9b5773..787a137 100644 --- a/delete_attr.php +++ b/delete_attr.php @@ -1,4 +1,6 @@ - diff --git a/delete_form.php b/delete_form.php index 9fc0d28..37fc373 100644 --- a/delete_form.php +++ b/delete_form.php @@ -1,4 +1,6 @@ -0 ? true : false; -include 'header.php'; ?> +include './header.php'; ?> -

Delete

-

Server:     Distinguished Name:

- - - -
You cannot delete the base DN entry of the LDAP server.
- - - - - - +

+

:     :

-
Permanently delete all children also?

+


-

This object is the root of a sub-tree containing objects - -phpLDAPadmin can recursively delete this object and all of its children. See below for a list of DNs -that this will delete. Do you want to do this?
+

+ +()
-Note: This is potentially very dangerous and you do this at your own risk. This operation cannot be undone. -Take into consideration aliases and other such things that may cause problems. +
+ +
+
+ +

@@ -76,16 +71,16 @@ Take into consideration aliases and other such things that may cause problems. - + @@ -96,7 +91,7 @@ Take into consideration aliases and other such things that may cause problems.

-A list of all the DNs that this action will delete:
+
- + - +
-Are you sure you want to permanently delete this object?
+

-DN:
-
Server:
+:
+
:

@@ -137,7 +132,7 @@ Are you sure you want to permanently delete this object?
- + @@ -154,5 +149,3 @@ Are you sure you want to permanently delete this object?
- - diff --git a/doc/CREDITS b/doc/CREDITS index 08f3c9c..252a48f 100644 --- a/doc/CREDITS +++ b/doc/CREDITS @@ -1,35 +1,50 @@ - * Project Developers: - David Smith Maintainer - - Xavier Renard LDIF master - - Marius Rieder Schema master - - Nate Rotschafer Release manager + - Xavier Renard Import/Export and Samba + - Uwe Ebel I18n * Patch writers: - Bayu Irawan userPassword hash, html fixes, ldap_modify fixes - Uwe Ebel short_open_tags fix - Andrew Tipton SUP support in schema parser - - Eigil Bjørgum UTF-8 support + - Eigil Bjørgum UTF-8 support - Brandon Lederer DNS entry template Nathan Rotschafer - Steve Rigler Password hash patch - Chris Jackson Blowfish and md5crypt passwords - - Marius Rieder Enhanced schema parser - - Nick Burch Many realpath() fixes + - Marius Rieder Perfected schema parser + - Nick Burch realpath() fixes for *BSD + - Matt Perlman Fix for IBM LDAP schema support + - K Yoder Predefined searches + - Piotr Tarnowski i18n fixes + - Deon George Auto-uidNumber enhancements and many fixes + - Pierre Belanger Speed-ups to auto-uidNumber * Translators: - - Uwe Ebel & Marius Reider German - - Xavier Renard French - - Dave Smith English ;) - - Richard Lucassen Dutch - - Andreu Sanchez Spanish and Català - - Dmitry Gorpinenko Russian - - Unknown Italian - + - Marius Reider, German + Uwe Ebel, + Dieter Kluenter + - Xavier Renard French + - Dave Smith English ;) + - Richard Lucassen Dutch + - Andreu Sanchez Spanish and Català + - Dmitry Gorpinenko, Russian + Aleksey Soldatov + Sergey Saukh + - Unknown Italian + - Alexandre Maciel Portuguese (Brasilian) + Elton Schroeder Fenner (CLeGi) + - Piotr Tarnowski (DrFugazi) Polish + - Gunnar Nystrom Swedish + - VOROSBARANYI Zoltan, Hungarian + SIPOS Agnes + - Tadashi Jokagi (elf2000) Japanese If you can help translate, please join the phpldapadmin-devel mailing list: https://lists.sourceforge.net/mailman/listinfo/phpldapadmin-devel + + diff --git a/doc/ChangeLog b/doc/ChangeLog index db68b62..e15d6f2 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,212 @@ + +* Version 0.9.5, 2004-12-17 + + * Notes: + + This version adds substantial new features and several minor bug fixes as well as PHP5 support! + + * Changes: + + - Added PHP5 support using Zend1 compatibility options. + - Users can now specify a format string for custom display of DNs in the tree viewer + (see $tree_display_format in config.php.example) + - If using http auth_type, DNs and passwords are now encrypted int he cookie using blowfish. + - If base entry is missing, phpLDAPadmin will prompt you to create it and give you some + sane default values to get started. + - Added index file for viewing of all PLA icons (see phpldapadmin/images/index.php) + - Added custom country flag icons for DNs in the form "c=us" + - Added more custom icons (ipNetwork, Device, Room) + - Made it easier to create the base entry of an empty tree. + - Fixed bug related to predefined search queries with patch from Olivier Mounier + - Added a template for mozillaOrgPerson + - Improved error handling for non-existent or unreadable template files. + - "Create new" now displays at the top *and* bottom of the tree viewer list if there are + more than 10 entries in the container (make it easier for users by reducing scrolling) + - Optimized several pages by closing the session early if not needed. + - By request, reversed the order of first name / last name in the inetOrgPerson template. + - Added a login_string feature for admins who have all their users in a single container, + so they can specify a string like "uid=,ou=People,dc=example,dc=com" instead + of setting up the painful login_attr stuff. + - Changed the delete button to be red (like phpMyAdmin) to make it more obvious. + - Consolidated the links at the top of the tree viewer to make better use of real estate. + - New logo! + - Patch from Dimitre to fix unique attrs enforcement. + - Templates can now redirect wherever they want using a hidden form input. + - Added a "Home" button in the tree viewer to get back to the main PLA page if desired. + - PLA now looks up the gidNumber to display group description and name in user accounst. + - Improved the hint about structural objectClasses in the custom creation template + - Added ability to purge caches (mostly just schema objects) and caches are auto-purged + when the schema is viewed in the schema browser. + - Changed the arrow icon next to objectClass values to be an information button. + - Search results can be displayed in table format now. + - Fixes to LDIF import. + - Added support for exporting to VCard 2.1 format. + - Lots of little session fixes. + - Structural objectClasses are now shown in bold in the custom creation template. + - Fixed lots of bugs, some big some minor: + 1025353 1037715 1029103 1026427 1025353 1020606 + 1020376 1010576 1009410 1007281 1007132 1004042 + 1002794 1001941 1000185 999605 999170 996842 + 995362 995297 995296 994343 993875 992419 + 991891 989219 984587 983375 981283 979395 + 977598 974369 973520 973323 965165 964410 + 962074 959950 958372 957284 954453 + +* Version 0.9.4b, 2004-05-11 + + * Notes: + + This follow-on release fixes one critical bug contained in 0.9.4 + relating to session.auto_start and schema caching. + + * Changes + + - Fixed bugs (all duplicates of single bug): + 947981 + 951003 + 951140 + - Fixed binary attribute creation (create.php) + +* Version 0.9.4a, 2004-05-08 + + * Notes: + + This follow-on release fixes several critical bugs contained in 0.9.4. + + * Changes: + + - Fixed bugs: + 949500 Error while adding New User Account + 949500 Creating a new uid under ou=People + 948695 is_executable() error using phpldapadmin - windows + 948741 Level: E_WARNING + 948413 Undefined variable: lang (E_NOTICE) after install + +* Version 0.9.4, 2004-05-04 + + * Notes: + + This release adds many new features and fixes many minor bugs. + General performance has improved, especially for handling large data + sets. Of particular note is that users can page through search results, + flag individual attributes as read-only, view in-line jpegPhotos in + search results, export DSML, all from the comfort of their own language. + phpLDAPadmin is now availble in 11 languages. + + * Changes: + - Fixed bug 936223 by adding more robust error-handling to the binary + attr viewing code. + - Improved support for Microsoft Active Direcotry + Added many new icons and logic to detect "special" Active Directory + objects. + Fixed a bug which prevented phpLDAPadmin's tree viewer from + properly browsing an Active Directory. + - Improved support for Novell eDirectory + Added many new icons and logic to detect Novell eDirectory (NDS) + entries. + - Enhanced export form + Users can specify the type of export, line ends, search scope, and more + from one handy form similar in appearance to phpMyAdmin export forms (though + more simple). As a result, I cleaned up the links at the top of the default + mod template (removed mac | win | unix links, for example). + - Cleaned up the entry browser link + It now better aligns itself with neighboring form elements. + - Fixed several E_NOTICE bugs + - Added paging to search results Search results are now paged into groups + of 50 entries and users can step through the pages like Google. This is not + only a nicety, but with large searches users may have waited for hours for + their browser to render all the entries. That problem is fixed by paging. + - DNs are pretty-printed + DNs in the tree viewer and else-where are now "syntax-highlighted". + - Faster schema surfing + You can "jump to" schema elements without rendering all other elements in + the schema browser. This is a major speed enhancement. + - Configurable: hide "Create new" + Thanks to a patch from Deon George, users can hide the "create new" link in the + tree viewer if desired. + - DSML exports + - Various XHTML fixes supplied by Uwe Ebel. + - More binary safety: + get_object_attrs() is now completely binary safe. Developers can use it to + fetch jpegPhotos and any other binary data. + - Re-order the search criteria menu + Users can re-order the search criteria drop-down box (for simple search + form) as desired from the config. + - Obfuscated passwords with **** + Users can configure PLA to display userPasswords as ****** if desired. + - Tree browser displays child counts + We found a fast solution to display child counts below each node without + having to expand the node in the tree viewer. Works great. + - "Used by" hyperlinks + The "used by" list in matching rules are now hyper-linked to attributes in + the schema viewer. + - jpegPhotos in the search results. + When a search result includes jpegPhotos, they will be displayed inline + with other attributes. Very handy for address books! + - We can draw any jpeg now + Modified the infrastrucutre to draw any jpegPhoto attribute, regardless of + its name. + - Added a groupOfNames template + For editing groupOfNames and groupOfUniqueNames + - Fixes to the entry browser + The entry browser can be clicked and closed before it's finished loading + - Read-only attributes + Users can now mark certain attributes as read-only, and PLA will refuse to + modify them (ie, objectClasses) and display them without form input fields. + - Configurable handling of aliases and referrals + Admins can configure how phpLDAPadmin should handle aliases and + referrals with fine-grained control. + - Schema caching + Network traffic between the web server and LDAP server has been reduced + drastically and user page loads should run much faster thanks to a + two-level session-based and memory-based schema cache. + - Low bandwidth mode + Users who have a slow link between their LDAP server and web server can + run phpLDAPadmin in low-bandwidth mode to discourage excessive network + traffic. + - Fixed DN explosion + A bug in PHP's LDAP API caused common segmentation faults in + ldap_explode_dn(). We have re-implemented this function in PHP and have + eliminated all segmentation faults. + - Almost complete localization + phpLDAPadmin is 100% internationalized with the exception of creation + templates, available in 11 languages. + - Added support for IBM LDAP and ISODE M-Vault LDAP servers. + - Linkable displayed DNs + When a user views an attribute that contains a DN, an arrow will appear + to the left side. When clicked, the user is taken to the referenced DN. + - Recursive copy fliters + When users copy a sub-tree, they may apply a filter to the copy such + that only entries that match the filter will be copied. + - Auto uidNumber enhancements + Admins can now specify a DN to bind with when auto-searching for the next + available uidNumber. + - Schema code cleanups + Applied object-oriented inheritance to schema items and cleaned up + access functions. No affect on end user, just a developers' itch. + - Custom creation template usability enhancements + - Fixed session bugs + If PHP is auto-starting sessions, we will not throw errors anymore. + - Added new auth_type: http + Users can now use http auth_types for form-based logins. Their + DN/password will be stored on the server in memory rather than in + a cookie on the client. + - TLS fixes + More robust coverage. If users have configured 'tls' = true in + config.php, we use TLS for all transactions with the LDAP + server. + - Error handling fixes + pla_verbose_error() is more tolerant of crappy input (ie, bad LDAP + error codes). + - Cleaned up default mod template + Editing entries is now much cleaner-looking. Buttons at the top are + in two columns. The browser doesn't have to be full-screen anymore + to edit an entry. + - Minor cosmetic fixes to custom creation template + - Added phpDoc commentary to all functions in functions.php and + schema_functions.php, and export_functions.php. This allows us to + auto-doc the code using phpDocumentor. + * Version 0.9.3, 2003-12-19 * Notes: @@ -13,18 +222,18 @@ fixes: 862225 an E_NOTICE on delete fixed 861730 (and many duplicates of it) an E_NOTICE on determining the - language in 'auto' lanuage mode for browsers who don't - set HTTP_ACCEPT_LANGUAGE (like Opera). - 861491 (and many duplicates of it) Anonymous form-based logins - often failed due to several E_NOTICE problems. - 856832 IBM LDAP servers refernece SUP attributes by OID, not name. - A patch was provided to accomodate this circumstance. - 860179 Another anonymous form-based login bug. - 858611 (lots of dups of this one) Fixed the error handler so that - it will not cause a "cannot send header information" message. - 844547 A coulpe E_NOTICE bugs in the posix group creation template. - 841816 An E_NOTICE bug during creation of an entry. - 844340 A sprintf error during login + language in 'auto' lanuage mode for browsers who don't + set HTTP_ACCEPT_LANGUAGE (like Opera). + 861491 (and many duplicates of it) Anonymous form-based logins + often failed due to several E_NOTICE problems. + 856832 IBM LDAP servers refernece SUP attributes by OID, not name. + A patch was provided to accomodate this circumstance. + 860179 Another anonymous form-based login bug. + 858611 (lots of dups of this one) Fixed the error handler so that + it will not cause a "cannot send header information" message. + 844547 A coulpe E_NOTICE bugs in the posix group creation template. + 841816 An E_NOTICE bug during creation of an entry. + 844340 A sprintf error during login - Many many more bug fixes. - The schema viewer was also streamlined. - Support work-around for IBM LDAP Server was added. diff --git a/doc/INSTALL-de.txt b/doc/INSTALL-de.txt index f7a27a2..1de071e 100644 --- a/doc/INSTALL-de.txt +++ b/doc/INSTALL-de.txt @@ -1,13 +1,18 @@ +Installationsanleitung von phpldapadmin auf Deutsch +=================================================== + +$Header: /cvsroot/phpldapadmin/phpldapadmin/doc/INSTALL-de.txt,v 1.3 2004/03/01 19:48:58 i18phpldapadmin Exp $ + Die Installationsanweisung geht davon aus das: a) Ein Webserver (Apache, IIS, etc.) b) PHP 4.1.0 oder neuer (mit LDAP-Support) -installiert und funktioniert +installiert sind und auch funktionieren * Installation von phpLDAPadmin in vier einfachen Schritten: 1. Entpacken des Archives (wenn man diesen Text lesen kann, - dann ist das schon geschechen) + dann ist das schon geschehen) 2. Das entpackte Verzeichnis phpldapadmin sollte vom webroot aus erreicht werden 3. Kopieren der 'config.php.example' nach 'config.php' @@ -43,19 +48,21 @@ installiert und funktioniert Bitte in der Datei INSTALL unter 'Translators:' nachsehen Wer in der Uebersetzung helfen moechte sollte an der Mailingliste - phpldapadmin-devel teilnehmen. + phpldapadmin-devel teilnehmen: + https://lists.sourceforge.net/mailman/listinfo/phpldapadmin-devel * Hinweise zur Konfiguration von config.php - Wer eine Benuetzerfuehrung auf deutsch haben moechte sollte in der + Wer eine Benuetzerfuehrung auf Deutsch haben moechte sollte in der config.php die Zeile $language = 'en'; mit + $language = 'de'; - abaendern. Andere Sprachen sieht man im Unterverzeichnis 'lang' + abaendern. Weitere Sprachen sieht man im Unterverzeichnis 'lang' diff --git a/doc/INSTALL-es.txt b/doc/INSTALL-es.txt index 16e004c..6f75276 100644 --- a/doc/INSTALL-es.txt +++ b/doc/INSTALL-es.txt @@ -1,3 +1,4 @@ +$Header: /cvsroot/phpldapadmin/phpldapadmin/doc/INSTALL-es.txt,v 1.3 2004/03/19 20:22:54 i18phpldapadmin Exp $ Estas instrucciones dejan por sentado que tienes una instalación funcionando de: a. Servidor Web (Apache, IIS, etc). diff --git a/doc/INSTALL-fr.txt b/doc/INSTALL-fr.txt index 403128d..e29b1a8 100644 --- a/doc/INSTALL-fr.txt +++ b/doc/INSTALL-fr.txt @@ -1,3 +1,4 @@ +$Header: /cvsroot/phpldapadmin/phpldapadmin/doc/INSTALL-fr.txt,v 1.3 2004/03/19 20:22:54 i18phpldapadmin Exp $ Les instructions suivantes supposent une installation en état de marche de: a. Un serveur web (Apache, IIS, etc). b. PHP 4.1.0 ou une version plus récente (avec le support LDAP). diff --git a/doc/README-translation.txt b/doc/README-translation.txt new file mode 100644 index 0000000..8c1d8f7 --- /dev/null +++ b/doc/README-translation.txt @@ -0,0 +1,101 @@ +README-translation +================== +$Header: /cvsroot/phpldapadmin/phpldapadmin/doc/README-translation.txt,v 1.3 2004/06/03 12:45:21 uugdave Exp $ + +This readme is for translators. +phpLDAPadmin currently supports the following languages: + + - en, of course + - de, german + - es, spanish + - fr, french + - it, italien + - nl, netherland + - pl, polish + - pt-br, portuguese (brazilian) + - ru, russian + - sv, swedish + +* Where are the files located? + +All files are in the directory: + + phpldapadmin/lang/ + +* How are the files named? + +Every language is named by its local representation. For example English is "en" and +British English is "en_GB" (though phpLDAPadmin does not have an "en_GB" translation). + +* Is the location phpldapadmin/lang/ used in the application? + +No, there is a Makefile in phpldapadmin/lang/ that converts the +native encoding of the language file to utf8 into the directory +phpldapadmin/lang/recoded. For example the file +phpldapadmin/lang/de.php is converted via the programm iconv to the +the encoding utf8 to the file phpldapadmin/lang/recoded/de.php. + +* Is there a rule for the form of the translation? + +Yes, all translation is stored in an array called lang[]. +The "mother" of all translation is english (en.php). +Use your native encoding like iso8859-1 for european +or iso8859-2 for polish. +Every translated string is in single quotes "'" +Don't use html-code in the translation. +If you need to enclose text in quotes, use a double quote '"' (no escaping required). + +* Why shouldn't I use html-code? + +To avoid problemens wich htmlspecialchars (which coverts "<" to "<", for example). +To avoid JavaScript problems. +To keep the way open for other targets like xml. +To keep the output well formed. + +* How could I start? + +First, the base for translation is the CVS version. +Checkout the CVS version and start your translation. +Create a file that contains your translation. +For me the easiest way was to copy the file phpldapadmin/lang/en.php +to the phpldapadmin/lang/[new-langage].php +That gives the way to put the original translation at the end +as a comment. Look at the de.php and you can see what I mean. +Add a target to Makefile so that your langugage is also converted. + +* How could I verify that my translation is complete? + +phpLDAPadmin contains the file phpldapadmin/check_lang_files.php +Open it in your browser and it will tell you if your lang file has any +omissions or extraneous strings. + + - extra entries: if entry is not in the en.php, maybe the value was + changed in en.php or you type in a wrong key. + - missing entries: the entry is present in en.php but is missing in + the translated langugage. + +* What is zz.php and the zzz.php in the phpldapadmin/lang/ directory? + +Well that is not really a language. That is only for developers +and translators to make sure that all strings are translated in the +application. + +The zz.php replace all characters in the lang[] to Z. That helps +in finding hardcoding translation in the the source. + +The ZZZ.php helps you to find the used "key". + +* How could I enable the zz and zzz language? + +Well, one is to set $language to 'zz' or 'zzz' in the config.php file. That is not the +best way - but the way that always works. + +Mozilla users do this: + * Click Edit->Preferences + * Option Navigator->Lanugages + Klick the button "add" and type into "Other" the + language "zz" + * With Move up / Move down you can change your priority. + * With the Button "OK" you can activate your choice. + +Do the same if you want to activate/test your translation. diff --git a/doc/ROADMAP b/doc/ROADMAP index 51dc23b..aae71e1 100644 --- a/doc/ROADMAP +++ b/doc/ROADMAP @@ -1,3 +1,4 @@ +$Header: /cvsroot/phpldapadmin/phpldapadmin/doc/ROADMAP,v 1.19 2004/03/25 12:50:39 uugdave Exp $ phpLDAPadmin roadmap 0.9.3 planned features: @@ -7,31 +8,49 @@ phpLDAPadmin roadmap Move template config to a new config file: template_config.php (or something) 0.9.4 planned features: - Complete i18n. All strings localized. - Add mass-update feature (user provides filter and set of attrs/vals to modify) - No-schema mode of operation (some servers simply won't give us schema. This becomes a problem for normal operation) - Search filter builder for simple search form (just select AND or OR for a group of criteria) + * Complete i18n. All strings localized. + Modification templates: + * gropOfNames (view full DNs and browse buttons) + * groupOfUniqueNames (view full DNs and browse buttons) + * http auth_type (a la phpMyAdmin) + * read-only attributes (similar to hidden attributes) in config + * Default mod template: Add a "browse" button for attributes that store DNs. + caveat: We don't have a way to reference form elements with "[]" in the name, causing a proble + with our default mod template. The "browser" button is present, but cannot populate the form + element. + * Add output buffering when including lang files so no output is sent to the browser (which could cause problems for sessions and cookies) + * Paging search results. + * Anonymous binds redirect to search page with no tree viewer (as an option in config) + * pretty-printed DNs + * DSML exports + * obfuscated password display + * more linkage in the schema browser (used by links) + * jpegs drawn in-line in searches + * configurable read-only attributes + * paging in search results (ie, viewing entries 1-50 of 436) + * Configuration for templates. + +0.9.5 planned features: + Maybe create a class called Config with static functions for fetching configuration data (ie, Config::isServerReadOnly()). + or: Object-oriented server and general configuration (ie, add a class Server) + Support and test ActiveDirectory and iMail LDAP schema. + Add link to objectClass values in default mod template to jump to that objectClass in the schema viewer. + Make deref param modifiable in the advanced search form (LDAP_DEREF_ALWAYS, LDAP_DEREF_NEVER, etc.) + Better handling of aliases and referals (display the actual alias with aliasedObjectName or ref attrs, and don't follow or perhaps make it configurable like ldapsearch) + Remove all HTML from language files. + Add a random hint on the welcome page + Add blowfish encryption to encrypt cookie-stored passwords and DNs. + Support for modifying replica entries (using ldap_set_rebind_proc()) Modification templates user oragnizationalUnit - posixGroup (view full DNs and browse buttons) sambaUser (v 2 and 3) sambaMachine - http auth_type (a la phpMyAdmin) - read-only attributes (similar to hidden attributes) in config - Support and test ActiveDirectory and iMail LDAP schema. - Support for modifying replica entries (using ldap_set_rebind_proc()) - Add blowfish encryption to encrypt cookie-stored passwords and DNs. - Default mod template: Add a "browse" button for attributes that store DNs. - Add output buffering when including lang files so no output is sent to the browser (which could cause problems for sessions and cookies) - Add a random hint on the welcome page - Paging search results. - Anonymous binds redirect to search page with no tree viewer (as an option in config) - Remove all HTML from language files. - -0.9.5 planned features: + Search filter builder for simple search form (just select AND or OR for a group of criteria) + Add mass-update feature (user provides filter and set of attrs/vals to modify) + No-schema mode of operation (some servers simply won't give us schema. This becomes a problem for normal operation) + i18n localization of all creation templates Hidden/read-only attrs on a filter-basis (ie, different users have different viewable, writable attributes) - Seious compatibility testing for additional LDAP servers. - Configuration for templates. - Template instances with unique config. - Object Oriented migration for server and general configuration (ie, add a class Server) + Serious compatibility testing for additional LDAP servers. + +(* means an item is complete and checed into CVS) diff --git a/doc/pla-test-i18n.ldif b/doc/pla-test-i18n.ldif new file mode 100644 index 0000000..b094593 --- /dev/null +++ b/doc/pla-test-i18n.ldif @@ -0,0 +1,67 @@ +# $Header: /cvsroot/phpldapadmin/phpldapadmin/doc/pla-test-i18n.ldif,v 1.4 2004/03/19 20:22:54 i18phpldapadmin Exp $ +# This is a Test-File for characters / encoding +# 1. Change the +# ,dc=example,dc=com +# to avalue for your organisation +# 2. Import it with phpldapadmin +# +# pla-i18n, example.com +# +dn: ou=pla-i18n,dc=example,dc=com +ou: pla-i18n +objectClass: top +objectClass: organizationalUnit + +# pl, pla-i18n, example.com +dn: ou=pl,ou=pla-i18n,dc=example,dc=com +description:: IGRvcMOza2k= +description:: xITFu8WaxbnEhsWDxYHDk8SYIMSFxbzFm8W6xIfFhMWCw7PEmQ== +description:: V3NrYXrDs3drYQ== +objectClass: top +objectClass: organizationalUnit +ou: pl + +# ru, pla-i18n, example.com +dn: ou=ru,ou=pla-i18n,dc=example,dc=com +description:: 0LfQstGD0YfQuNGCINC/0L7QtNC+0LHQvdC+ +description:: 0J/RgNC+0YHRgtCw0Y8g0YTQvtGA0LzQsCDQv9C+0LjRgdC6 +objectClass: top +objectClass: organizationalUnit +ou: ru + +# jp, pla-i18n, example.com +dn: ou=jp,ou=pla-i18n,dc=example,dc=com +ou: jp +objectClass: top +objectClass: organizationalUnit +description:: SVNPLTIwMjItSlDjga7lpJrlm73nsY3oqIDoqp7jgbjjga7mi6HlvLXmgKc= + +# pt-br, pla-i18n, example.com +dn: ou=pt-br,ou=pla-i18n,dc=example,dc=com +ou: pt-br +objectClass: top +objectClass: organizationalUnit +description:: VmVyIGFzIHJlcXVpc2nDp8O1ZXMgZW0gYWJlcnRv + +# de, pla-i18n, example.com +dn: ou=de,ou=pla-i18n,dc=example,dc=com +ou: de +objectClass: top +objectClass: organizationalUnit +description:: U29uZGVyemVpY2hlbiDDtsOkw7zDnyDDlsOEw5w= +description:: w5bDliDDnMOcIMOEw4Q= + +# sv, pla-i18n, example.com +dn: ou=sv,ou=pla-i18n,dc=example,dc=com +ou: sv +objectClass: top +objectClass: organizationalUnit +description:: U8O2a29tZsOlbmc= +description:: bMOldGVyIHNvbQ== + +# ca, pla-i18n, example.com +dn: ou=ca,ou=pla-i18n,dc=example,dc=com +ou: ca +objectClass: top +objectClass: organizationalUnit +description:: RXMgdGluZHLDoSBxdWUgY29uZmlybWFyIGFxdWVzdGEgZGVjaXNpw7M= diff --git a/documentation.php b/documentation.php index e6f5624..71d6e12 100644 --- a/documentation.php +++ b/documentation.php @@ -1,7 +1,11 @@ -"; $view = isset( $_GET['view'] ) ? $_GET['view'] : false; switch( $view ) { diff --git a/donate.php b/donate.php new file mode 100644 index 0000000..6f0ea74 --- /dev/null +++ b/donate.php @@ -0,0 +1,58 @@ + + + + +

Donate

+
+
+
+

+
+ +
- + - +
+ + + + + + + + + + + + + + + + +
+ [<?php echo sprintf( $lang['donate_amount'], '$US ' . $amount ); ?>] +
+ +
+
+
+ +
+
+ +
+ + + + + diff --git a/download_binary_attr.php b/download_binary_attr.php index 4e88a4a..1fe9cec 100644 --- a/download_binary_attr.php +++ b/download_binary_attr.php @@ -1,6 +1,8 @@ + * + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + ******************************************************************************/ + +/******************************************************************************/ +/* Do we have builtin mhash support in this PHP version ? */ +/******************************************************************************/ + +if( ! function_exists( 'mhash' ) && ! function_exists( 'mhash_keygen_s2k' ) ) { + if( ! isset( $emuhash_openssl ) ) + $emuhash_openssl = '/usr/bin/openssl'; + + // don't create mhash functions if we don't have a working openssl + if( ! file_exists( $emuhash_openssl ) ) + unset( $emuhash_openssl ); + elseif ( function_exists( 'is_executable' ) && ! is_executable( $emuhash_openssl ) ) { + unset( $emuhash_openssl ); + } else { + + if( ! isset( $emuhash_temp_dir ) ) + $emuhash_temp_dir = '/tmp'; + +/******************************************************************************/ +/* Define constants used in the mhash emulation code. */ +/******************************************************************************/ + +define('MHASH_MD5', 'md5'); +define('MHASH_SHA1', 'sha1'); +define('MHASH_RIPEMD160', 'rmd160'); + +/******************************************************************************/ +/* Functions to emulate parts of php-mash. */ +/******************************************************************************/ + +function openssl_hash( $openssl_hash_id, $password_clear ) { + global $emuhash_openssl, $emuhash_temp_dir; + + $current_magic_quotes = get_magic_quotes_runtime(); + set_magic_quotes_runtime( 0 ); + $tmpfile = tempnam( $emuhash_temp_dir, "emuhash" ); + $pwhandle = fopen( $tmpfile, "w" ); + if( ! $pwhandle ) + pla_error( "Unable to create a temporary file '$tmpfile' to create hashed password" ); + fwrite( $pwhandle, $password_clear ); + fclose( $pwhandle ); + $cmd = $emuhash_openssl . ' ' . $openssl_hash_id . ' -binary < ' . $tmpfile; + $prog = popen( $cmd, "r" ); + $pass = fread( $prog, 1024 ); + pclose( $prog ); + unlink( $tmpfile ); + set_magic_quotes_runtime( $current_magic_quotes ); + + return $pass; +} + +function mhash( $hash_id, $password_clear ) { + switch( $hash_id ) { + case MHASH_MD5: + $emuhash = openssl_hash( MHASH_MD5, $password_clear ); + break; + case MHASH_SHA1: + $emuhash = openssl_hash( MHASH_SHA1, $password_clear ); + break; + case MHASH_RIPEMD160: + $emuhash = openssl_hash( MHASH_RIPEMD160, $password_clear ); + break; + default: + $emuhash = FALSE; + } + + return $emuhash; +} + +function mhash_keygen_s2k( $hash_id, $password_clear, $salt, $bytes ) { + return substr(pack("H*", bin2hex(mhash($hash_id, ($salt . $password_clear)))), 0, $bytes); +} + +/******************************************************************************/ + + } + +} + +?> diff --git a/entry_chooser.js b/entry_chooser.js index 4f0aeca..b9529bf 100644 --- a/entry_chooser.js +++ b/entry_chooser.js @@ -1,3 +1,4 @@ +// $Header: /cvsroot/phpldapadmin/phpldapadmin/entry_chooser.js,v 1.2 2004/03/19 20:18:41 i18phpldapadmin Exp $ function dnChooserPopup( form_element ) { mywindow=open('entry_chooser.php','myname','resizable=no,width=600,height=370,scrollbars=1'); diff --git a/entry_chooser.php b/entry_chooser.php index 8ad6851..2a6978a 100644 --- a/entry_chooser.php +++ b/entry_chooser.php @@ -1,6 +1,8 @@ Automagic Entry Chooser\n"; +echo "

" . $lang['entry_chooser_title'] . "

\n"; +flush(); +?> + + + +" . htmlspecialchars( $servers[ $server_id ][ 'name' ] ) . "
\n"; @@ -20,15 +34,18 @@ if( $server_id !== false && $container !== false ) { check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] ); have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] ); - pla_ldap_connect( $server_id ) or pla_error( $lang['could_not_connect'] ); - $dn_list = get_container_contents( $server_id, $container ); + + $ds = pla_ldap_connect( $server_id ); + pla_ldap_connection_is_error( $ds ); + + $dn_list = get_container_contents( $server_id, $container, 0, '(objectClass=*)', get_tree_deref_setting() ); sort( $dn_list ); $base_dn = $servers[ $server_id ][ 'base' ]; if( ! $base_dn ) $base_dn = try_to_get_root_dn( $server_id ); - if( $container == $base_dn ) { + if( 0 == pla_compare_dns( $container, $base_dn ) ) { $parent_container = false; $up_href = "entry_chooser.php?form_element=$return_form_element"; } else { @@ -87,11 +104,3 @@ $elmpart =substr($return_form_element,strpos($return_form_element,".")+1); $return_form_element = $formpart . ".elements[\"" . $elmpart . "\"]"; ?> - - diff --git a/expand.php b/expand.php index 19c41a5..6073185 100644 --- a/expand.php +++ b/expand.php @@ -1,4 +1,6 @@ "; //var_dump( $contents ); //exit; -usort( $contents, 'pla_compare_dns' ); -$tree[$server_id][$dn] = $contents; - foreach( $contents as $dn ) $tree_icons[$server_id][$dn] = get_icon( $server_id, $dn ); @@ -62,8 +64,8 @@ $random_junk = md5( strtotime( 'now' ) . $time['usec'] ); // If cookies were disabled, build the url parameter for the session id. // It will be append to the url to be redirect $id_session_param=""; -if(SID != ""){ - $id_session_param = "&".session_name()."=".session_id(); +if( SID != "" ){ + $id_session_param = "&".session_name()."=".session_id(); } session_write_close(); diff --git a/export.php b/export.php new file mode 100755 index 0000000..9b684f9 --- /dev/null +++ b/export.php @@ -0,0 +1,93 @@ +pla_close(); + pla_error( $lang['no_exporter_found'] ); +} + +// set the CLRN +$exporter->setOutputFormat($br); + +// prevent script from bailing early for long search +@set_time_limit( 0 ); + +// send the header +if( $save_as_file ) + header( "Content-type: application/download" ); +else + header( "Content-type: text/plain" ); +header( "Content-Disposition: filename=$friendly_rdn.".$exporters[$exporter_id]['extension'] ); +header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); +header( "Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT" ); +header( "Cache-Control: post-check=0, pre-check=0", false ); + +// and export +$exporter->export(); +?> diff --git a/export_form.php b/export_form.php new file mode 100755 index 0000000..e5e7a11 --- /dev/null +++ b/export_form.php @@ -0,0 +1,161 @@ + 'UNIX (Linux, BSD)', + 'mac' => 'Macintosh', + 'win' => 'Windows' +); + +$available_scopes = array( + 'base' => $lang['scope_base'], + 'one' => $lang['scope_one'], + 'sub' => $lang['scope_sub'] +); + + +include './header.php'; ?> + + +

+
+
+
+ + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ 1 ){ + echo ''; + } else { + $server = reset($servers); + if( $server['host'] ) + echo '' . + '' . $server['name'] . ''; + } + ?> +
+ $desc ) { + $id = htmlspecialchars( $id ); + $desc = htmlspecialchars( $desc ); ?> + + />
+ + +
 />
 
+
+
+ + + +
+
+ + + $exporter){?> + + /> +
+ + + +
+
+
+ + $desc ) { + $id = htmlspecialchars( $id ); + $desc = htmlspecialchars( $desc ); + ?> + + />
+ + +
+
+
+
+ +
+
+
+
+ + + +'ldif', + 'desc' => 'LDIF', + 'extension' => 'ldif' + ); + +$exporters[] = array('output_type'=>'dsml', + 'desc' => 'DSML V.1', + 'extension' => 'xml' + ); + +$exporters[] = array('output_type'=>'vcard', + 'desc' => 'VCARD 2.1', + 'extension' => 'vcf' + ); +$exporters[] = array('output_type'=>'csv', + 'desc' => $lang['csv_spreadsheet'], + 'extension' => 'csv' + ); + +/** + * This class encapsulate informations about the ldap server + * from which the export is done. + * The following info are provided within this class: + * + * $server_id: the id of the server. + * $base_dn: if the source of the export is the ldap server, + * it indicates the base dn of the search. + * $query_filter: if the source of the export is the ldap server, + * it indicates the query filter for the search. + * $scope: if the source of the export is the ldap server, + * it indicates the scope of the search. + * $server_host: the host name of the server. + * $server_name: the name of the server. + */ + +class LdapInfo{ + + var $base_dn; + var $query_filter; + var $scope; + var $server_host = NULL; + var $server_name = NULL; + var $server_id = NULL; + + /** + * Create a new LdapInfo object + * + * @param int $server_id the server id + * @param String $base_dn the base_dn for the search in a ldap server + * @param String $query_filter the query filter for the search + * @param String scope the scope of the search in a ldap server + */ + + function LdapInfo($server_id,$base_dn = NULL,$query_filter = NULL,$scope = NULL){ + global $servers; + $this->base_dn = $base_dn; + $this->query_filter = $query_filter; + $this->scope = $scope; + $this->server_name = $servers[ $server_id ][ 'name' ]; + $this->server_host = $servers[ $server_id ][ 'host' ]; + $this->server_id = $server_id; + } +} + + +/** + * This class represents the base class of all exporters + * It can be subclassed directly if your intend is to write + * a source exporter(ie. it will act only as a decoree + * which will be wrapped by an another exporter.) + * If you consider writting an exporter for filtering data + * or directly display entries, please consider subclass + * the PlaExporter + * + * @see PlaExporter + */ + +class PlaAbstractExporter{ + + /** + * Return the number of entries + * @return int the number of entries to be exported + */ + function pla_num_entries(){} + + /** + * Return true if there is some more entries to be processed + * @return bool if there is some more entries to be processed + */ + function pla_has_entry(){} + + /** + * Return the entry as an array + * @return array an entry as an array + */ + function pla_fetch_entry_array(){} + + /** + * Return the entry as an Entry object + * @return Entry an entry as an Entry Object + */ + function pla_fetch_entry_object(){} + + /** + * Return a PlaLdapInfo Object + * @return LdapInfo Object with info from the ldap serveur + */ + function pla_get_ldap_info(){} + + /** + * May be call when the processing is finished + * and to free some ressources. + * @return bool true or false if any errors is encountered + */ + function pla_close(){} + +}// end PlaAbstractExporter + + + +/** + * PlaExporter acts a wrapper around another exporter. + * In other words, it will act as a decorator for another decorator + */ + +class PlaExporter extends PlaAbstractExporter{ + // the default CRLN + var $br="\n"; + // the wrapped $exporter + var $exporter; + + /** + * Constructor + * @param source $source the decoree for this exporter + */ + function PlaExporter( $source ){ + $this->exporter = $source; + } + + /** + * Return the number of entries + * @return int the number of entries to be exported + */ + function pla_num_entries(){ + return $this->exporter->pla_num_entries(); + } + + /** + * Return true if there is some more entries to be processed + * @return bool if there is some more entries to be processed + */ + function pla_has_entry(){ + return $this->exporter->pla_has_entry(); + } + + /** + * Return the entry as an array + * @return array an entry as an array + */ + function pla_fetch_entry_array(){ + return $this->exporter->pla_fetch_entry_array(); + } + + /** + * Return the entry as an Entry object + * @return Entry an entry as an Entry Object + */ + function pla_fetch_entry_object(){ + return $this->exporter->pla_fetch_entry_object(); + } + + /** + * Return a PlaLdapInfo Object + * @return LdapInfo Object with info from the ldap serveur + */ + function pla_get_ldap_info(){ + return $this->exporter->pla_get_ldap_info(); + } + + /** + * May be call when the processing is finished + * and to free some ressources. + * @return bool false if any errors are encountered,false otherwise + */ + function pla_close(){ + return $this->exporter->pla_close(); + } + + /** + * Helper method to check if the attribute value should be base 64 encoded. + * @param String $str the string to check. + * @return bool true if the string is safe ascii, false otherwise. + */ + function is_safe_ascii( $str ){ + for( $i=0; $i 127 ) + return false; + return true; + } + + /** + * Abstract method use to export data. + * Must be implemented in a sub-class if you write an exporter + * which export data. + * Leave it empty if you write a sub-class which do only some filtering. + */ + function export(){} + + /** + * Set the carriage return /linefeed for the export + * @param String $br the CRLF to be set + */ + function setOutputFormat( $br ){ + $this->br = $br; + } + +}// end PlaExporter + + +/** + * Export data from a ldap server + * @extends PlaAbstractExporter + */ + +class PlaLdapExporter extends PlaAbstractExporter{ + var $entry_id; + var $results; + var $server_id; + var $scope; + var $entry_array; + var $num_entries; + var $ldap_info; + var $queryFilter; + var $hasNext; + var $connection_open_state; + var $attributes; + /** + * Create a PlaLdapExporter object. + * @param int $server_id the server id + * @param String $queryFilter the queryFilter for the export + * @param String $base_dn the base_dn for the data to export + * @param String $scope the scope for export + */ + function PlaLdapExporter( $server_id , $queryFilter , $base_dn , $scope, $attributes){ + global $lang; + $this->scope = $scope; + $this->base_dn = $base_dn; + $this->server_id = $server_id; + $this->queryFilter = $queryFilter; + // infos for the server + $this->ldap_info = new LdapInfo($server_id,$base_dn,$queryFilter,$scope); + // boolean to check if there is more entries + $this->hasNext = 0; + // boolean to check the state of the connection + $this->connection_open_state = 0; + + $this->attributes = $attributes; + // connect to the server + $this->ds = @pla_ldap_connect( $this->server_id ); + pla_ldap_connection_is_error( $this->ds ); + $this->connection_open_state = 1; + + // get the data to be exported + if( $this->scope == 'base' ) + $this->results = @ldap_read( $this->ds, $this->base_dn, $this->queryFilter,$this->attributes, + 0, 0, 0, get_export_deref_setting() ); + elseif( $this->scope == 'one' ) + $this->results = @ldap_list( $this->ds, $this->base_dn, $this->queryFilter, $this->attributes, + 0, 0, 0, get_export_deref_setting() ); + else // scope == 'sub' + $this->results = @ldap_search( $this->ds, $this->base_dn, $this->queryFilter, $this->attributes, + 0, 0, 0, get_export_deref_setting() ); + + // if no result, there is a something wrong + if( ! $this->results ) + pla_error( $lang['error_performing_search'], ldap_error( $this->ds ), ldap_errno( $this->ds ) ); + + // get the number of entries to be exported + $this->num_entries = @ldap_count_entries( $this->ds,$this->results ); + + if( $this->entry_id = @ldap_first_entry( $this->ds,$this->results ) ){ + $this->hasNext = 1; + } + }//end constructor + + /** + * Return the entry as an array + * @return array an entry as an array + */ + function pla_fetch_entry_array(){ + return $this->entry_array; + } + + /** + * Return the entry as an Entry object + * @return Entry an entry as an Entry Object + */ + function pla_fetch_entry_object(){ + // to do + } + + /** + * Return a PlaLdapInfo Object + * @return LdapInfo Object with info from the ldap serveur + */ + function pla_get_ldap_info(){ + return $this->ldap_info; + } + + /** + * Return the number of entries + * @return int the number of entries to be exported + */ + function pla_num_entries(){ + return $this->num_entries; + } + + /** + * Return true if there is some more entries to be processed + * @return bool if there is some more entries to be processed + */ + function pla_has_entry(){ + if( $this->hasNext ){ + unset( $this->entry_array ); + $dn = @ldap_get_dn( $this->ds,$this->entry_id ); + $this->entry_array['dn'] = $dn; + + //get the attributes of the entry + $attrs = @ldap_get_attributes($this->ds,$this->entry_id); + if( $attr = @ldap_first_attribute( $this->ds,$this->entry_id,$attrs ) ){ + + //iterate over the attributes + while( $attr ){ + if( is_attr_binary( $this->server_id,$attr ) ){ + $this->entry_array[$attr] = @ldap_get_values_len( $this->ds,$this->entry_id,$attr ); + } + else{ + $this->entry_array[$attr] = @ldap_get_values( $this->ds,$this->entry_id,$attr ); + } + unset( $this->entry_array[$attr]['count'] ); + $attr = @ldap_next_attribute( $this->ds,$this->entry_id,$attrs ); + }// end while attr + + if(!$this->entry_id = @ldap_next_entry( $this->ds,$this->entry_id ) ){ + $this->hasNext = 0; + } + }// end if attr + return true; + } + else{ + $this->pla_close(); + return false; + } + } + + /** + * May be call when the processing is finished + * and to free some ressources. + * @return bool true or false if any errors is encountered + */ + function pla_close(){ + if($this->connection_open_state){ + return @ldap_close( $this->ds ); + } + else{ + return true; + } + } +} // end PlaLdapExporter + +/** + * Export entries to ldif format + * @extends PlaExporter + */ + +class PlaLdifExporter extends PlaExporter{ + + // variable to keep the count of the entries + var $counter = 0; + + // the maximum length of the ldif line + var $MAX_LDIF_LINE_LENGTH = 76; + + /** + * Create a PlaLdifExporter object + * @param PlaAbstractExporter $exporter the source exporter + */ + function PlaLdifExporter( $exporter ){ + $this->exporter = $exporter; + } + + /** + * Export entries to ldif format + */ + function export(){ + $pla_ldap_info = $this->pla_get_ldap_info(); + $this->displayExportInfo($pla_ldap_info); + + //While there is an entry, fecth the entry as an array + while($this->pla_has_entry()){ + $entry = $this->pla_fetch_entry_array(); + $this->counter++; + + // display comment before each entry + global $lang; + $title_string = "# " . $lang['entry'] . " " . $this->counter . ": " . $entry['dn'] ; + if( strlen( $title_string ) > $this->MAX_LDIF_LINE_LENGTH-3 ) + $title_string = substr( $title_string, 0, $this->MAX_LDIF_LINE_LENGTH-3 ) . "..."; + echo "$title_string$this->br"; + + // display dn + if( $this->is_safe_ascii( $entry['dn'] )) + $this->multi_lines_display("dn:". $entry['dn']); + else + $this->multi_lines_display("dn:: " . base64_encode( $entry['dn'] )); + array_shift($entry); + + // display the attributes + foreach( $entry as $key => $attr ){ + foreach( $attr as $value ){ + if( !$this->is_safe_ascii($value) || is_attr_binary($pla_ldap_info->server_id,$key ) ){ + $this->multi_lines_display( $key.":: " . base64_encode( $value ) ); + } + else{ + $this->multi_lines_display( $key.": ".$value ); + } + } + }// end foreach $entry + + echo $this->br; + // flush every 5th entry (sppeds things up a bit) + if( 0 == $this->counter % 5 ) + flush(); + } + } + + // display info related to this export + function displayExportInfo($pla_ldap_info){ + global $lang; + echo "version: 1$this->br$this->br"; + echo "# " . sprintf( $lang['ldif_export_for_dn'], $pla_ldap_info->base_dn ) . $this->br; + echo "# " . sprintf( $lang['generated_on_date'], date("F j, Y g:i a") ) . $this->br; + echo "# " . $lang['server'] . ": " .$pla_ldap_info->server_name . " (" . $pla_ldap_info->server_host . ")" . $this->br; + echo "# " . $lang['search_scope'] . ": " . $pla_ldap_info->scope . $this->br; + echo "# " . $lang['total_entries'] . ": " . $this->pla_num_entries() . $this->br; + echo $this->br; + } + + /** + * Helper method to wrap ldif lines + * @param String $str the line to be wrapped if needed. + */ + function multi_lines_display( $str ){ + + $length_string = strlen($str); + $max_length = $this->MAX_LDIF_LINE_LENGTH; + + while ($length_string > $max_length){ + echo substr($str,0,$max_length).$this->br." "; + $str= substr($str,$max_length,$length_string); + $length_string = strlen($str); + + // need to do minus one to align on the right + // the first line with the possible following lines + // as these will have an extra space + $max_length = $this->MAX_LDIF_LINE_LENGTH-1; + } + echo $str."".$this->br; + } + +} + +/** + * Export entries to DSML v.1 + * @extends PlaExporter + */ + +class PlaDsmlExporter extends PlaExporter{ + + //not in use + var $indent_step = 2; + var $counter = 0; + + /** + * Create a PlaDsmlExporter object + * @param PlaAbstractExporter $exporter the decoree exporter + */ + function PlaDsmlExporter( $exporter ){ + $this->exporter = $exporter; + } + + /** + * Export the entries to DSML + */ + function export(){ + global $lang; + $pla_ldap_info = $this->pla_get_ldap_info(); + // not very elegant, but do the job for the moment as we have just 4 level + $directory_entries_indent = " "; + $entry_indent= " "; + $attr_indent = " "; + $attr_value_indent = " "; + + // print declaration + echo "$this->br"; + + // print root element + echo "$this->br"; + + // print info related to this export + echo "" . $this->br; + + + echo $directory_entries_indent."$this->br"; + //While there is an entry, fetch the entry as an array + while($this->pla_has_entry()){ + $entry = $this->pla_fetch_entry_array(); + $this->counter++; + // display dn + echo $entry_indent."".$this->br; + array_shift($entry); + + // echo the objectclass attributes first + if(isset($entry['objectClass'])){ + echo $attr_indent."".$this->br; + foreach($entry['objectClass'] as $ocValue){ + echo $attr_value_indent."$ocValue".$this->br; + } + echo $attr_indent."".$this->br; + unset($entry['objectClass']); + } + + $binary_mode = 0; + // display the attributes + foreach($entry as $key=>$attr){ + echo $attr_indent."".$this->br; + + // if the attribute is binary, set the flag $binary_mode to true + $binary_mode = is_attr_binary($pla_ldap_info->server_id,$key)?1:0; + + foreach($attr as $value){ + echo $attr_value_indent."".($binary_mode?base64_encode( $value): htmlspecialchars( $value ) )."".$this->br; + } + echo $attr_indent."".$this->br; + }// end foreach $entry + echo $entry_indent."".$this->br; + + // flush every 5th entry (speeds things up a bit) + if( 0 == $this->counter % 5 ) + flush(); + } + echo $directory_entries_indent."$this->br"; + echo "".$this->br; + } +} + + +class PlaVcardExporter extends PlaExporter{ + + // mappping one to one attribute + var $vcardMapping = array('cn' => 'FN', + 'title' => 'TITLE', + 'homePhone' => 'TEL;HOME', + 'mobile' => 'TEL;CELL', + 'mail' => 'EMAIL;Internet', + 'labeledURI' =>'URL', + 'o' => 'ORG', + 'audio' => 'SOUND', + 'facsmileTelephoneNumber' =>'TEL;WORK;HOME;VOICE;FAX', + 'jpegPhoto' => 'PHOTO;ENCODING=BASE64', + 'businessCategory' => 'ROLE', + 'description' => 'NOTE' + ); + + var $deliveryAddress = array("postOfficeBox", + "street", + "l", + "st", + "postalCode", + "c"); + + function PlaVcardExporter($exporter){ + $this->exporter = $exporter; + } + + /** + * When doing an exporter, the method export need to be overriden. + * A basic implementation is provided here. Customize to your need + **/ + + function export(){ + + // With the method pla->get_ldap_info, + // you have access to some values related + // to you ldap server + $ldap_info = $this->pla_get_ldap_info(); + $base_dn = $ldap_info->base_dn; + $server_id = $ldap_info->server_id; + $scope = $ldap_info->scope; + $server_name = $ldap_info->server_name; + $server_host = $ldap_info->server_host; + + while( $this->pla_has_entry() ){ + $entry = $this->pla_fetch_entry_array(); + + //fetch the dn + $dn = $entry['dn']; + unset( $entry['dn'] ); + + // check the attributes needed for the delivery address + // field + $addr = "ADR:"; + foreach( $this->deliveryAddress as $attr_name ){ + if( isset( $entry[$attr_name] ) ){ + $addr .= $entry[$attr_name][0]; + unset($entry[$attr_name]); + } + $addr .= ';'; + } + echo "BEGIN:VCARD$this->br"; + + // loop for the attributes + foreach( $entry as $attr_name=>$attr_values ){ + + // if an attribute of the ldap entry exist + // in the mapping array for vcard + if( isset( $this->vcardMapping[$attr_name] ) ){ + + // case of organisation. Need to append the + // possible ou attribute + if( 0 == strcasecmp( $attr_name , 'o' )){ + echo $this->vcardMapping[$attr_name].":$attr_values[0]"; + if( isset($entry['ou'] ) ) + foreach( $entry['ou'] as $ou_value ){ + echo ";$ou_value"; + } + } + // the attribute is binary. (to do : need to fold the line) + else if( 0 == strcasecmp( $attr_name,'audio') || 0 == strcasecmp( $attr_name,'jpegPhoto') ){ + echo $this->vcardMapping[$attr_name].":$this->br"; + echo " ".base64_encode( $attr_values[0]); + } + /* else if( $attr_name == "sn"){ + echo $this->vcardMapping[$attr_name].":$attr_values[0]"; + } + elseif( $attr_name == "homePostalAddress"){ + }*/ + // else just print the value with the relevant attribute name + else{ + echo $this->vcardMapping[$attr_name].":$attr_values[0]"; + } + echo $this->br; + } + } + // need to check + echo "UID:$dn"; + echo $this->br; + echo "VERSION:2.1"; + echo $this->br; + echo $addr; + echo $this->br; + echo "END:VCARD"; + echo $this->br; + }// end while + } +} + + + + +/** + * Export to cvs format + * + * @author Glen Ogilvie + */ + +class PlaCSVExporter extends PlaExporter{ + + function PlaCSVExporter($exporter){ + $this->exporter = $exporter; + } + + /** + * When doing an exporter, the method export need to be overriden. + * A basic implementation is provided here. Customize to your need + **/ + + var $separator = ","; + var $qualifier = '"'; + var $multivalue_separator = " | "; + var $escapeCode = '"'; + + function export(){ + + // With the method pla->get_ldap_info, + // you have access to some values related + // to you ldap server + $ldap_info = $this->pla_get_ldap_info(); + $base_dn = $ldap_info->base_dn; + $server_id = $ldap_info->server_id; + $scope = $ldap_info->scope; + $server_name = $ldap_info->server_name; + $server_host = $ldap_info->server_host; + + $entries = array(); + $headers = array(); + + // go thru and find all the attribute names first. This is needed, because, otherwise we have + // no idea as to which search attributes were actually populated with data + while( $this->pla_has_entry() ) { + $entry = $this->pla_fetch_entry_array(); + foreach (array_keys($entry) as $key) { + if (!in_array($key, $headers)) + array_push($headers,$key); + } + array_push($entries, $entry); + } + + $num_headers = count($headers); + + // print out the headers + for ($i = 0; $i < $num_headers; $i++) { + echo $this->qualifier. $headers[$i].$this->qualifier; + if ($i < $num_headers-1) + echo $this->separator; + } + + array_shift($headers); + $num_headers--; + + echo $this->br; + + // loop on every entry + foreach ($entries as $entry) { + + //print the dn + $dn = $entry['dn']; + unset( $entry['dn'] ); + echo $this->qualifier. $this->LdapEscape($dn).$this->qualifier.$this->separator; + + // print the attributes + for($j=0;$j<$num_headers;$j++){ + + $attr_name = $headers[$j]; + + echo $this->qualifier; + if (key_exists($attr_name, $entry)) { + $binary_attribute = is_attr_binary( $server_id, $attr_name )?1:0; + + $attr_values = $entry[$attr_name]; + + $num_attr_values = count( $attr_values ); + for( $i=0 ; $i<$num_attr_values; $i++){ + if($binary_attribute) + echo base64_encode($attr_values[$i]); + else + echo $this->LdapEscape($attr_values[$i]); + + if($i < $num_attr_values - 1) + echo $this->multivalue_separator; + + } + }// end if key + echo $this->qualifier; + if( $j < $num_headers - 1 ) + echo $this->separator; + } + echo $this->br; + } + }//end export + + // function to escape data, where the qualifier happens to also + // be in the data. + function LdapEscape ($var) { + return str_replace($this->qualifier, $this->escapeCode.$this->qualifier, $var); + } +} + + + + + +class MyCustomExporter extends PlaExporter{ + + function MyCutsomExporter($exporter){ + $this->exporter = $exporter; + } + + /** + * When doing an exporter, the method export need to be overriden. + * A basic implementation is provided here. Customize to your need + **/ + + + function export(){ + + // With the method pla->get_ldap_info, + // you have access to some values related + // to you ldap server + $ldap_info = $this->pla_get_ldap_info(); + $base_dn = $ldap_info->base_dn; + $server_id = $ldap_info->server_id; + $scope = $ldap_info->scope; + $server_name = $ldap_info->server_name; + $server_host = $ldap_info->server_host; + + + // Just a simple loop. For each entry + // do your custom export + // see PlaLdifExporter or PlaDsmlExporter as an example + while( $this->pla_has_entry() ){ + $entry = $this->pla_fetch_entry_array(); + + //fetch the dn + $dn = $entry['dn']; + unset( $entry['dn'] ); + + // loop for the attributes + foreach( $entry as $attr_name=>$attr_values ){ + foreach( $attr_values as $value ){ + + // simple example + // echo "Attribute Name:".$attr_name; + // echo " - value:".$value; + // echo $this->br; + } + } + + }// end while + } + +} +?> diff --git a/functions.php b/functions.php index 51ead3a..1321faa 100644 --- a/functions.php +++ b/functions.php @@ -1,31 +1,327 @@ + * if( is_muli_line_attr( "postalAddress" ) ) + * echo ""; + * else + * echo ""; + * + * + * @param string $attr_name The name of the attribute of interestd (case insensivite) + * @param string $val (optional) The current value of the attribute (speeds up the + * process by searching for carriage returns already in the attribute value) + * @param int $server_id (optional) The ID of the server of interest. If specified, + * is_multi_line_attr() will read the schema from the server to determine if + * the attr is multi-line capable. (note that schema reads can be expensive, + * but that impact is lessened due to PLA's new caching mechanism) + * @return bool + */ +function is_multi_line_attr( $attr_name, $val=null, $server_id=null ) +{ + // First, check the optional val param for a \n or a \r + if( null != $val && + ( false !== strpos( $val, "\n" ) || + false !== strpos( $val, "\r" ) ) ) + return true; -function login_attr_enabled( $server_id ) + // Next, compare strictly by name first + global $multi_line_attributes; + if( isset( $multi_line_attributes ) && is_array( $multi_line_attributes ) ) + foreach( $multi_line_attributes as $multi_line_attr_name ) + if( 0 == strcasecmp( $multi_line_attr_name, $attr_name ) ) + return true; + + // If unfound, compare by syntax OID + if( null !== $server_id ) { + global $multi_line_syntax_oids; + if( isset( $multi_line_syntax_oids ) && is_array( $multi_line_syntax_oids ) ) { + $schema_attr = get_schema_attribute( $server_id, $attr_name ); + if( ! $schema_attr ) + return false; + $syntax_oid = $schema_attr->getSyntaxOID(); + if( ! $syntax_oid ) + return false; + foreach( $multi_line_syntax_oids as $multi_line_syntax_oid ) + if( $multi_line_syntax_oid == $syntax_oid ) + return true; + } + } + + return false; + +} + +/** + * Fetches the user setting for $search_deref from config.php. The returned value + * will be one of the four LDAP_DEREF_* constancts defined by the PHP LDAP API. If + * the user has failed to configure this setting or configured an inappropriate + * value, the constant DEFAULT_SEARCH_DEREF_SETTING is returned. + * + * @see DEFAULT_SEARCH_DEREF_SETTING + * @see is_valid_deref_setting() + * @return int + */ +function get_search_deref_setting() +{ + global $search_deref; + if( ! isset( $search_deref ) || ! is_valid_deref_setting( $search_deref ) ) + return DEFAULT_SEARCH_DEREF_SETTING; + else + return $search_deref; +} + +/** + * Fetches the user setting for $tree_deref from config.php. The returned value + * will be one of the four LDAP_DEREF_* constancts defined by the PHP LDAP API. If + * the user has failed to configure this setting or configured an inappropriate + * value, the constant DEFAULT_TREE_DEREF_SETTING is returned. + * + * @see DEFAULT_TREE_DEREF_SETTING + * @see is_valid_deref_setting() + * @return int + */ +function get_tree_deref_setting() +{ + global $tree_deref; + if( ! isset( $tree_deref ) || ! is_valid_deref_setting( $tree_deref ) ) + return DEFAULT_TREE_DEREF_SETTING; + else + return $tree_deref; +} + +/** + * Fetches the user setting for $export_deref from config.php. The returned value + * will be one of the four LDAP_DEREF_* constancts defined by the PHP LDAP API. If + * the user has failed to configure this setting or configured an inappropriate + * value, the constant DEFAULT_EXPORT_DEREF_SETTING is returned. + * + * @see DEFAULT_EXPORT_DEREF_SETTING + * @see is_valid_deref_setting() + * @return int + */ +function get_export_deref_setting() +{ + global $export_deref; + if( ! isset( $export_deref ) || ! is_valid_deref_setting( $export_deref ) ) + return DEFAULT_EXPORT_DEREF_SETTING; + else + return $export_deref; +} + +/** + * Fetches the user setting for $view_deref from config.php. The returned value + * will be one of the four LDAP_DEREF_* constancts defined by the PHP LDAP API. If + * the user has failed to configure this setting or configured an inappropriate + * value, the constant DEFAULT_VIEW_DEREF_SETTING is returned. + * + * @see DEFAULT_VIEW_DEREF_SETTING + * @see is_valid_deref_setting() + * @return int + */ +function get_view_deref_setting() +{ + global $view_deref; + if( ! isset( $view_deref ) || ! is_valid_deref_setting( $view_deref ) ) + return DEFAULT_VIEW_DEREF_SETTING; + else + return $view_deref; +} + +/** + * Checks the user-configured parameter for sanity. For the various *_deref settings, users + * may only use one of LDAP_DEREF_NEVER, LDAP_DEREF_SEARCHING, LDAP_DEREF_FINDING, or + * LDAP_DEREF_ALWAYS. This function can be used to conveniently enforce this. + * + * @param int $deref_setting The deref setting to validate. + * @return bool + */ +function is_valid_deref_setting( $deref_setting ) +{ + if( $deref_setting == LDAP_DEREF_NEVER || + $deref_setting == LDAP_DEREF_SEARCHING || + $deref_setting == LDAP_DEREF_FINDING || + $deref_setting == LDAP_DEREF_ALWAYS ) + return true; + else + return false; + +} + +/** + * Fetch whether the user has configured a certain server as "low bandwidth". Users may + * choose to configure a server as "low bandwidth" in config.php thus: + * + * $servers[$i]['low_bandwidth'] = true; + * + * @param int $server_id The ID of the server of interest from config.php. + * @return bool + */ +function is_server_low_bandwidth( $server_id ) +{ + global $servers; + if( isset( $servers[$server_id]['low_bandwidth'] ) && true == $servers[$server_id]['low_bandwidth'] ) + return true; + else + return false; +} + +/** + * Fetch whether the user has configured a certain server login to be non anonymous + * + * + * $servers[$i]['disable_anon_bind'] = true; + * + * @param int $server_id The ID of the server of interest from config.php. + * @return bool + */ +function is_anonymous_bind_allowed( $server_id ) { global $servers; - if( isset( $servers[$server_id]['login_attr'] ) && - 0 != strcasecmp( $servers[$server_id]['login_attr'], "dn" ) && - $servers[$server_id]['login_attr'] != "" ) + + return ( ! isset( $servers[$server_id]['disable_anon_bind'] ) + || false == $servers[$server_id]['disable_anon_bind'] ) + ? true + : false; +} + +/** + * Fetches whether TLS has been configured for use with a certain server. + * Users may configure phpLDAPadmin to use TLS in config,php thus: + * + * $servers[$i]['tls'] = true; + * + * @param int $server_id The ID of the server of interest from config.php. + * @return bool + */ +function tls_enabled( $server_id ) +{ + global $servers; + if( isset( $servers[$server_id]['tls'] ) && true == $servers[$server_id]['tls'] ) + return true; + else + return false; +} + +/** + * Fetches whether phpLDAPadmin has been configured to redirect anonymously bound users + * to a search form with no tree displayed. + * This is configured in config.php thus: + * + * $anonymous_bind_redirect_no_tree = true; + * + * @return bool + */ +function anon_bind_tree_disabled() +{ + global $anonymous_bind_redirect_no_tree; + if( isset( $anonymous_bind_redirect_no_tree ) && true == $anonymous_bind_redirect_no_tree ) return true; else return false; } -/* +/** + * Fetches whether phpLDAPadmin has been configured to display configuration + * management links (report bug, request feature, etc) + * @return bool + */ +function hide_configuration_management() +{ + global $hide_configuration_management; + if( isset( $hide_configuration_management ) && + $hide_configuration_management == true ) + return true; + else + return false; +} + +/** + * Fetches whether the user has configured phpLDAPadmin to obfuscate passwords + * with "*********" when displaying them. This is configured in config.php thus: + * + * $obfuscate_password_display = true; + * + * @return bool + */ +function obfuscate_password_display() +{ + global $obfuscate_password_display; + if( isset( $obfuscate_password_display ) && true == $obfuscate_password_display ) + return true; + else + return false; +} + +/** + * Fetches whether the login_attr feature is enabled for a specified server. + * This is configured in config.php thus: + * + * $servers[$server_id]['login_attr'] = 'uid'; + * + * By virtue of the fact that the login_attr is not blank and not 'dn', the + * feature is configured to be enabled. + * + * @return bool + */ +function login_attr_enabled( $server_id ) +{ + global $servers; + if( isset( $servers[$server_id]['login_attr'] ) && + 0 != strcasecmp( $servers[$server_id]['login_attr'], "dn" ) && + trim( $servers[$server_id]['login_attr'] != "" ) ) + return true; + else + return false; +} + +function login_string_enabled( $server_id ) +{ + global $servers; + if( isset( $servers[$server_id]['login_attr'] ) && + 0 == strcasecmp( $servers[$server_id]['login_attr'], "string" ) ) + return true; + else + return false; +} + +function get_login_string( $server_id ) +{ + global $servers; + if( isset( $servers[$server_id]['login_string'] ) ) + return $servers[$server_id]['login_string']; + else + return false; +} + +/** * Returns an HTML-beautified version of a DN. + * Internally, this function makes use of pla_explode_dn() to break the + * the DN into its components. It then glues them back together with + * "pretty" HTML. The returned HTML is NOT to be used as a real DN, but + * simply displayed. + * + * @param string $dn The DN to pretty-print. + * @return string */ function pretty_print_dn( $dn ) { $dn = pla_explode_dn( $dn ); - if( isset( $dn['count'] ) ) - unset( $dn['count'] ); foreach( $dn as $i => $element ) { $element = htmlspecialchars( $element ); $element = explode( '=', $element, 2 ); @@ -37,32 +333,127 @@ function pretty_print_dn( $dn ) return $dn; } - -/* - * Responsible for setting the cookie to indicate that a user has logged in. +/** + * Returns true if the attribute specified is required to take as input a DN. + * Some examples include 'distinguishedName', 'member' and 'uniqueMember'. + * @param int $server_id The ID of the server of interest + * (required since this operation demands a schema lookup) + * @param string $attr_name The name of the attribute of interest (case insensitive) + * @return bool */ -function set_cookie_login_dn( $server_id, $dn, $password, $anon_bind ) +function is_dn_attr( $server_id, $attr_name ) { - // cookie_time comes from config.php - if( ! check_server_id( $server_id ) ) - return false; - if( $anon_bind ) { - // we set the cookie val to 0 for anonymous binds. - $res1 = pla_set_cookie( "pla_login_dn_$server_id", 'anonymous' ); - $res2 = pla_set_cookie( "pla_login_pass_$server_id", '0' ); - } else { - $res1 = pla_set_cookie( "pla_login_dn_$server_id", $dn ); - $res2 = pla_set_cookie( "pla_login_pass_$server_id", $password ); - } - if( ! $res1 || ! $res2 ) - return false; - else - return true; + // Simple test first + $dn_attrs = array( "aliasedObjectName" ); + foreach( $dn_attrs as $dn_attr ) + if( 0 == strcasecmp( $attr_name, $dn_attr ) ) + return true; + + // Now look at the schema OID + $attr_schema = get_schema_attribute( $server_id, $attr_name ); + if( ! $attr_schema ) + return false; + $syntax_oid = $attr_schema->getSyntaxOID(); + if( '1.3.6.1.4.1.1466.115.121.1.12' == $syntax_oid ) + return true; + if( '1.3.6.1.4.1.1466.115.121.1.34' == $syntax_oid ) + return true; + $syntaxes = get_schema_syntaxes( $server_id ); + if( ! isset( $syntaxes[ $syntax_oid ] ) ) + return false; + $syntax_desc = $syntaxes[ $syntax_oid ]->getDescription(); + if( false !== strpos( strtolower($syntax_desc), 'distinguished name' ) ) + return true; + return false; } -/* - * PLA-only wrapper for setting cookies, which takes into consideration - * configuration values. +/** + * Given a string, this function returns true if the string has the format + * of a DN (ie, looks like "cn=Foo,dc=example,dc=com"). Returns false otherwise. + * The purpose of this function is so that developers can examine a string and + * know if it looks like a DN, and draw a hyperlink as needed. + * + * (See unit_test.php for test cases) + * + * @param string $attr The attribute to examine for "DNness" + * @see unit_test.php + * @return bool + */ +function is_dn_string( $str ) +{ + // Try to break the string into its component parts if it can be done + // ie, "uid=Manager" "dc=example" and "dc=com" + $parts = pla_explode_dn( $str ); + if( ! is_array( $parts ) ) + return false; + if( 0 == count( $parts ) ) + return false; + + // Foreach of the "parts", look for an "=" character, + // and make sure neither the left nor the right is empty + foreach( $parts as $part ) { + if( false === strpos( $part, "=" ) ) + return false; + $sub_parts = explode( "=", $part, 2 ); + $left = $sub_parts[0]; + $right = $sub_parts[1]; + if( 0 == strlen( trim( $left ) ) || 0 == strlen( trim( $right ) ) ) + return false; + if( false !== strpos( $left, '#' ) ) + return false; + } + + // We survived the above rigor. This is a bonified DN string. + return true; +} + +/** + * Get whether a string looks like an email address (user@example.com). + * + * @param string $str The string to analyze. + * @return bool Returns true if the specified string looks like + * an email address or false otherwise. + */ +function is_mail_string( $str ) +{ + $mail_regex = "/^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*$/"; + if( preg_match( $mail_regex, $str ) ) + return true; + else + return false; +} + +/** + * Get whether a string looks like a web URL (http://www.example.com/) + * + * @param string $str The string to analyze. + * @return bool Returns true if the specified string looks like + * a web URL or false otherwise. + */ +function is_url_string( $str ) +{ + $url_regex = '/(ftp|https?):\/\/+[\w\.\-\/\?\=\&]*\w+/'; + if( preg_match( $url_regex, $str ) ) + return true; + else + return false; + +} + + +/** + * Utility wrapper for setting cookies, which takes into consideration + * phpLDAPadmin configuration values. On success, true is returned. On + * failure, false is returned. + * + * @param string $name The name of the cookie to set. + * @param string $val The value of the cookie to set. + * @param int $expire (optional) The duration in seconds of this cookie. If unspecified, $cookie_time + * is used from config.php + * @param string $dir (optional) The directory value of this cookie (see php.net/setcookie) + * + * @see setcookie + * @return bool */ function pla_set_cookie( $name, $val, $expire=null, $dir=null ) { @@ -74,12 +465,10 @@ function pla_set_cookie( $name, $val, $expire=null, $dir=null ) } if( $dir == null ) { - global $_SERVER; $dir = dirname( $_SERVER['PHP_SELF'] ); } - if( setcookie( $name, $val, $expire, $dir ) ) { - global $_COOKIE; + if( @setcookie( $name, $val, $expire, $dir ) ) { $_COOKIE[ $name ] = $val; return true; } else { @@ -87,57 +476,229 @@ function pla_set_cookie( $name, $val, $expire=null, $dir=null ) } } -/* - * Responsible for removing a cookie after a user logs out. +/** + * Responsible for setting two cookies/session-vars to indicate that a user has logged in, + * one for the logged in DN and one for the logged in password. Cookies + * are stored unencrypted in the client's browser's cookie cache. Use caution! + * + * This function is only used if 'auth_type' is set to 'cookie' or 'session'. The values + * written have the name "pla_login_dn_X" and "pla_login_pass_X" where X is the + * ID of the server to which the user is attempting login. + * + * Note that as with all cookie/session operations this function must be called BEFORE + * any output is sent to the browser. + * + * On success, true is returned. On failure, false is returned. + * + * @param int $server_id The ID of the server to which the user is logged in. + * @param string $dn The DN with which the user has logged in. + * @param string $password The password of the user logged in. + * @param bool $anon_bind Indicates that this is an anonymous bind such that + * a password of "0" is stored. + * @return bool + * @see unset_login_dn */ -function unset_cookie_login_dn( $server_id ) +function set_login_dn( $server_id, $dn, $password, $anon_bind ) { - global $_SERVER; + global $servers; + if( ! check_server_id( $server_id ) ) return false; - $logged_in_dn = get_logged_in_dn( $server_id ); - $logged_in_pass = get_logged_in_pass( $server_id ); - $anon_bind = $logged_in_dn == 'anonymous' ? true : false; - - $expire = time()-3600; - if( $anon_bind ) { - $res1 = pla_set_cookie( "pla_login_dn_$server_id", 'anonymous', $expire ); - $res2 = pla_set_cookie( "pla_login_pass_$server_id", '0', $expire ); - } else { - $res1 = pla_set_cookie( "pla_login_dn_$server_id", $logged_in_dn, $expire ); - $res2 = pla_set_cookie( "pla_login_pass_$server_id", $logged_in_pass, $expire ); - } - - if( ! $res1 || ! $res2 ) + if( ! isset( $servers[ $server_id ][ 'auth_type' ] ) ) return false; - else - return true; + $auth_type = $servers[ $server_id ][ 'auth_type' ]; + + switch( $auth_type ) + { + case 'cookie': + $cookie_dn_name = "pla_login_dn_$server_id"; + $cookie_pass_name = "pla_login_pass_$server_id"; + if( $anon_bind ) { + // we set the cookie password to 0 for anonymous binds. + $dn = 'anonymous'; + $password = '0'; + } + $res1 = pla_set_cookie( $cookie_dn_name, pla_blowfish_encrypt( $dn ) ); + $res2 = pla_set_cookie( $cookie_pass_name, pla_blowfish_encrypt( $password ) ); + if( $res1 && $res2 ) + return true; + else + return false; + break; + case 'session': + $sess_var_dn_name = "pla_login_dn_$server_id"; + $sess_var_pass_name = "pla_login_pass_$server_id"; + if( $anon_bind ) { + $dn = 'anonymous'; + $password = '0'; + } + $_SESSION[ $sess_var_dn_name ] = $dn; + $_SESSION[ $sess_var_pass_name ] = $password; + return true; + break; + default: + global $lang; + pla_error( sprintf( $lang['unknown_auth_type'], htmlspecialchars( $auth_type ) ) ); + break; + } } -/* +/** + * Effectively logs a user out from a server. + * Removes the cookies/session-vars set by set_login_dn() + * after a user logs out using "auth_type" of "session" or "cookie". + * Returns true on success, false on failure. + * + * @param int $server_id The ID of the server from which the user is logging out. + * @return bool True on success, false on failure. + * @see set_login_dn + */ +function unset_login_dn( $server_id ) +{ + global $servers; + + if( ! check_server_id( $server_id ) ) + return false; + if( ! isset( $servers[ $server_id ][ 'auth_type' ] ) ) + return false; + $auth_type = $servers[ $server_id ][ 'auth_type' ]; + switch( $auth_type ) + { + case 'cookie': + $logged_in_dn = get_logged_in_dn( $server_id ); + if( ! $logged_in_dn ) + return false; + $logged_in_pass = get_logged_in_pass( $server_id ); + $anon_bind = $logged_in_dn == 'anonymous' ? true : false; + + // set cookie with expire time already passed to erase cookie from client + $expire = time()-3600; + $cookie_dn_name = "pla_login_dn_$server_id"; + $cookie_pass_name = "pla_login_pass_$server_id"; + if( $anon_bind ) { + $res1 = pla_set_cookie( $cookie_dn_name, 'anonymous', $expire ); + $res2 = pla_set_cookie( $cookie_pass_name, '0', $expire ); + } else { + $res1 = pla_set_cookie( $cookie_dn_name, pla_blowfish_encrypt( $logged_in_dn ), $expire ); + $res2 = pla_set_cookie( $cookie_pass_name, pla_blowfish_encrypt( $logged_in_pass ), $expire ); + } + + if( ! $res1 || ! $res2 ) + return false; + else + return true; + break; + case 'session': + // unset session variables + $session_var_dn_name = "pla_login_dn_$server_id"; + $session_var_pass_name = "pla_login_pass_$server_id"; + if( array_key_exists( $session_var_dn_name, $_SESSION ) ) + unset( $_SESSION[ $session_var_dn_name ] ); + if( array_key_exists( $session_var_pass_name, $_SESSION ) ) + unset( $_SESSION[ "$session_var_pass_name" ] ); + session_write_close(); + return true; + break; + default: + global $lang; + pla_error( sprintf( $lang['unknown_auth_type'], htmlspecialchars( $auth_type ) ) ); + break; + } +} + + +/** + * Get a customized file for a server + * We don't need any caching, because it's done by PHP + * + * @param int $server_id The ID of the server + * @param string $filename The requested filename + * + * @return string The customized filename, if exists, or the standard one + */ +function get_custom_file( $server_id, $filename ) +{ + global $servers; + + if( ! check_server_id( $server_id ) ) + return $filename; + + if( isset( $servers[ $server_id ]['custom_pages_prefix'] ) ) { + $custom = $servers[ $server_id ][ 'custom_pages_prefix' ]; + if( is_file( realpath( $custom . $filename ) ) ) + return ( $custom . $filename ); + } + + return $filename; +} + +/** + * Call a customized function + * + * @param int $server_id The ID of the server + * @param string $filename The requested function + * + * @return any The result of the called function + */ +function call_custom_function( $server_id, $function ) +{ + global $servers; + + if( ! check_server_id( $server_id ) ) + return $function; + + if( isset( $servers[$server_id]['custom_pages_prefix'] ) ) { + $custom = $servers[$server_id]['custom_pages_prefix']; + if( function_exists( $custom . $function ) ) + return call_user_func ( $custom . $function ); + } + return call_user_func( $function ); +} + +/** * Compares 2 DNs. If they are equivelant, returns 0, otherwise, - * returns their sorting order (similar to strcmp()). - * < 0 if dn1 is less than dn2 - * > 0 if dn1 is greater than dn2 + * returns their sorting order (similar to strcmp()): + * Returns < 0 if dn1 is less than dn2. + * Returns > 0 if dn1 is greater than dn2. + * + * The comparison is performed starting with the top-most element + * of the DN. Thus, the following list: + * + * ou=people,dc=example,dc=com + * cn=Admin,ou=People,dc=example,dc=com + * cn=Joe,ou=people,dc=example,dc=com + * dc=example,dc=com + * cn=Fred,ou=people,dc=example,dc=org + * cn=Dave,ou=people,dc=example,dc=org + * + * Will be sorted thus using usort( $list, "pla_compare_dns" ): + * + * dc=com + * dc=example,dc=com + * ou=people,dc=example,dc=com + * cn=Admin,ou=People,dc=example,dc=com + * cn=Joe,ou=people,dc=example,dc=com + * cn=Dave,ou=people,dc=example,dc=org + * cn=Fred,ou=people,dc=example,dc=org + * + * + * @param string $dn1 The first of two DNs to compare + * @param string $dn2 The second of two DNs to compare + * @return int */ function pla_compare_dns( $dn1, $dn2 ) { - $dn1_parts = pla_explode_dn( $dn1 ); - $dn2_parts = pla_explode_dn( $dn2 ); - assert( is_array( $dn1_parts ) ); - assert( is_array( $dn2_parts ) ); - // If they are obviously the same, return immediately if( 0 === strcasecmp( $dn1, $dn2 ) ) return 0; - // If they are obviously different, immediately - // do a string comparison rather than continuing - if( count( $dn1_parts ) != count( $dn2_parts ) ) - return strcasecmp( $dn1, $dn2 ); - - // Foreach of the "parts" of the DN - for( $i=0; $i count($dn2_parts) ) { + return 1; + } elseif( count( $dn2_parts ) > count( $dn1_parts ) ) { + return -1; + } else { + return 0; + } } /** - * Prunes off anything after the ";" in an attr name + * Prunes off anything after the ";" in an attr name. This is useful for + * attributes that may have ";binary" appended to their names. With + * real_attr_name(), you can more easily fetch these attributes' schema + * with their "real" attribute name. + * + * @param string $attr_name The name of the attribute to examine. + * @return string */ function real_attr_name( $attr_name ) { @@ -175,15 +749,24 @@ function real_attr_name( $attr_name ) return $attr_name; } -/* +/** * Returns true if the user has configured the specified - * server to enable mass deletion + * server to enable mass deletion. Mass deletion is enabled in config.php this: + * + * $enable_mass_delete = true; + * + * Notice that mass deletes are not enabled on a per-server basis, but this + * function checks that the sever is not in a read-only state as well. + * + * @param int $server_id The ID of the server of interest. + * @return bool */ function mass_delete_enabled( $server_id ) { global $enable_mass_delete; + if( check_server_id( $server_id ) && - pla_ldap_connect( $server_id ) && + ! pla_ldap_connection_is_error( pla_ldap_connect( $server_id ), false ) && have_auth_info( $server_id ) && ! is_server_read_only( $server_id ) && isset( $enable_mass_delete ) && @@ -193,9 +776,15 @@ function mass_delete_enabled( $server_id ) return false; } -/* +/** * Returns true if the user has configured PLA to show * helpful hints with the $show_hints setting. + * This is configured in config.php thus: + * + * $show_hints = true; + * + * + * @return bool */ function show_hints() { @@ -204,9 +793,25 @@ function show_hints() return true; } -/* +/** + * Determines if the user has enabled auto uidNumbers for the specified server ID. + * + * @param int $server_id The id of the server of interest. + * @return bool True if auto uidNumbers are enabled, false otherwise. + */ +function auto_uid_numbers_enabled( $server_id ) +{ + global $servers; + if( isset( $servers[$server_id]['enable_auto_uid_numbers'] ) && + true == $servers[$server_id]['enable_auto_uid_numbers'] ) + return true; + else + return false; +} + +/** * For hosts who have 'enable_auto_uid_numbers' set to true, this function will - * get the next available uidNumber using the host's preferred mechanism + * get the next available uidNumber using the host's preferred mechanism * (uidpool or search). The uidpool mechanism uses a user-configured entry in * the LDAP server to store the last used uidNumber. This mechanism simply fetches * and increments and returns that value. The search mechanism is more complicated @@ -217,6 +822,17 @@ function show_hints() * returned here has not been used in the mean time. Note that the two different * mechanisms may (will!) return different values as they use different algorithms * to arrive at their result. Do not be alarmed if (when!) this is the case. + * + * Also note that both algorithms are susceptible to a race condition. If two admins + * are adding users simultaneously, the users may get identical uidNumbers with this + * function. + * + * See config.php.example for more notes on the two auto uidNumber mechanisms. + * + * @param int $server_id The ID of the server of interest. + * @return int + * + * @todo eliminate race condition at create time by re-running this function. */ function get_next_uid_number( $server_id ) { @@ -224,6 +840,8 @@ function get_next_uid_number( $server_id ) // Some error checking if( ! check_server_id( $server_id ) ) return false; + if( ! auto_uid_numbers_enabled( $server_id ) ) + return false; $server_name = isset( $servers[ $server_id ]['name'] ) ? $servers[$server_id]['name'] : "Server $server_id"; @@ -257,9 +875,38 @@ function get_next_uid_number( $server_id ) } elseif( 0 == strcasecmp( $mechanism, 'search' ) ) { if( ! isset( $servers[ $server_id ][ 'auto_uid_number_search_base' ] ) ) pla_error( sprintf( $lang['specified_uidpool'] , $server_name ) ); + $base_dn = $servers[ $server_id ][ 'auto_uid_number_search_base' ]; $filter = "(uidNumber=*)"; - $results = pla_ldap_search( $server_id, $filter, $base_dn, array('uidNumber')); + + // Check see and use our alternate uid_dn and password if we have it. + if ( isset( $servers[ $server_id ][ 'auto_uid_number_search_dn' ] ) && + isset( $servers[ $server_id ][ 'auto_uid_number_search_dn_pass' ] ) ) { + $con = @ldap_connect( $servers[$server_id]['host'], $servers[$server_id]['port'] ); + @ldap_set_option( $con, LDAP_OPT_PROTOCOL_VERSION, 3 ); + @ldap_set_option( $con, LDAP_OPT_REFERRALS, 0); + + // Bind with the alternate ID. + $res = @ldap_bind( $con, + $servers[ $server_id ][ 'auto_uid_number_search_dn' ], + $servers[ $server_id ][ 'auto_uid_number_search_dn_pass' ] ); + if (! $res) pla_error( sprintf( $lang['auto_uid_invalid_credential'] , $server_name ) ); + $search = @ldap_search( $con, $base_dn, $filter, array('uidNumber'), 0, 0, 0, get_search_deref_setting() ); + if( ! $search ) pla_error( sprintf( $lang['bad_auto_uid_search_base'], $server_name ) ); + $search = @ldap_get_entries( $con, $search ); + $res = @ldap_unbind( $con ); + + $results = array(); + for( $i=0; $i<$search['count']; $i++ ) { + $entry = $search[$i]; + $dn['dn'] = $entry['dn']; + $dn['uidnumber'] = $entry['uidnumber'][0]; + $results[] = $dn; + } + + } else { + $results = pla_ldap_search( $server_id, $filter, $base_dn, array('uidNumber')); + } // lower-case all the inices so we can access them by name correctly foreach( $results as $dn => $attrs ) foreach( $attrs as $attr => $vals ) { @@ -295,8 +942,15 @@ function get_next_uid_number( $server_id ) } } -/* - * Used to determine if the specified attribute is indeed a jpegPhoto +/** + * Used to determine if the specified attribute is indeed a jpegPhoto. If the + * specified attribute is one that houses jpeg data, true is returned. Otherwise + * this function returns false. + * + * @param int $server_id The ID of the server hosuing the attribute of interest + * @param string $attr_name The name of the attribute to test. + * @return bool + * @see draw_jpeg_photos */ function is_jpeg_photo( $server_id, $attr_name ) { @@ -322,45 +976,202 @@ function is_jpeg_photo( $server_id, $attr_name ) return false; } -/* - * Given an attribute name and server id number, this function returns - * whether the attrbiute may contain binary data. +/** + * Given an attribute name and server ID number, this function returns + * whether the attrbiute contains boolean data. This is useful for + * developers who wish to display the contents of a boolean attribute + * with a drop-down. + * + * @param int $server_id The ID of the server of interest (required since + * this action requires a schema lookup on the server) + * @param string $attr_name The name of the attribute to test. + * @return bool + */ +function is_attr_boolean( $server_id, $attr_name ) +{ + $type = ( $schema_attr = get_schema_attribute( $server_id, $attr_name ) ) ? + $schema_attr->getType() : + null; + if( 0 == strcasecmp( 'boolean', $type ) || + 0 == strcasecmp( 'isCriticalSystemObject', $attr_name ) || + 0 == strcasecmp( 'showInAdvancedViewOnly', $attr_name ) ) + return true; + else + return false; +} + +/** + * Given an attribute name and server ID number, this function returns + * whether the attrbiute may contain binary data. This is useful for + * developers who wish to display the contents of an arbitrary attribute + * but don't want to dump binary data on the page. + * + * @param int $server_id The ID of the server of interest (required since + * this action requires a schema lookup on the server) + * @param string $attr_name The name of the attribute to test. + * @return bool + * + * @see is_jpeg_photo */ function is_attr_binary( $server_id, $attr_name ) { - @require_once realpath( 'schema_functions.php' ); + $attr_name = strtolower( $attr_name ); + /** Determining if an attribute is binary can be an expensive + operation. We cache the results for each attr name on each + server in the $attr_cache to speed up subsequent calls. + The $attr_cache looks like this: + Array + 0 => Array + 'objectclass' => false + 'cn' => false + 'usercertificate' => true + 1 => Array + 'jpegphoto' => true + 'cn' => false + */ - if( 0 == strcasecmp( substr( $attr_name, strlen( $attr_name ) - 7 ), ";binary" ) ) + static $attr_cache; + if( isset( $attr_cache[ $server_id ][ $attr_name ] ) ) + return $attr_cache[ $server_id ][ $attr_name ]; + + if( $attr_name == 'userpassword' ) { + $attr_cache[ $server_id ][ $attr_name ] = false; + return false; + } + + // Quick check: If the attr name ends in ";binary", then it's binary. + if( 0 == strcasecmp( substr( $attr_name, strlen( $attr_name ) - 7 ), ";binary" ) ) { + $attr_cache[ $server_id ][ $attr_name ] = true; return true; + } + // See what the server schema says about this attribute $schema_attr = get_schema_attribute( $server_id, $attr_name ); - if( ! $schema_attr ) - return false; + if( ! $schema_attr ) { + // Strangely, some attributeTypes may not show up in the server + // schema. This behavior has been observed in MS Active Directory. + $type = null; + $syntax = null; + } else { + $type = $schema_attr->getType(); + $syntax = $schema_attr->getSyntaxOID(); + } - $type = $schema_attr->getType(); - $syntax = $schema_attr->getSyntaxOID(); - - if( 0 == strcasecmp( substr( $attr_name, strlen( $attr_name ) - 7 ), ";binary" ) || - 0 == strcasecmp( $type, 'Certificate' ) || + if( 0 == strcasecmp( $type, 'Certificate' ) || 0 == strcasecmp( $type, 'Binary' ) || - 0 == strcasecmp( $attr_name, 'networkAddress' ) || - 0 == strcasecmp( $attr_name, 'userCertificate' ) || - 0 == strcasecmp( $attr_name, 'userSMIMECertificate' ) || + 0 == strcasecmp( $attr_name, 'usercertificate' ) || + 0 == strcasecmp( $attr_name, 'usersmimecertificate' ) || + 0 == strcasecmp( $attr_name, 'networkaddress' ) || + 0 == strcasecmp( $attr_name, 'objectGUID' ) || + 0 == strcasecmp( $attr_name, 'objectSID' ) || $syntax == '1.3.6.1.4.1.1466.115.121.1.10' || $syntax == '1.3.6.1.4.1.1466.115.121.1.28' || $syntax == '1.3.6.1.4.1.1466.115.121.1.5' || $syntax == '1.3.6.1.4.1.1466.115.121.1.8' || - $syntax == '1.3.6.1.4.1.1466.115.121.1.9' ) + $syntax == '1.3.6.1.4.1.1466.115.121.1.9' ) { + $attr_cache[ $server_id ][ $attr_name ] = true; return true; - else + } else { + $attr_cache[ $server_id ][ $attr_name ] = false; return false; + } } -/* +/** + * Returns true if the specified attribute is configured as read only + * in config.php with the $read_only_attrs array. + * Attributes are configured as read-only in config.php thus: + * + * $read_only_attrs = array( "objectClass", "givenName" ); + * + * + * @param string $attr The name of the attribute to test. + * @return bool + */ +function is_attr_read_only( $server_id, $attr ) +{ + global $read_only_attrs, $read_only_except_dn; + + $attr = trim( $attr ); + if( '' === $attr ) + return false; + if( ! isset( $read_only_attrs ) ) + return false; + if( ! is_array( $read_only_attrs) ) + return false; + + // Is the user excluded? + if (isset($read_only_except_dn) && userIsMember($server_id, get_logged_in_dn( $server_id ),$read_only_except_dn)) + return false; + + foreach( $read_only_attrs as $attr_name ) + if( 0 == strcasecmp( $attr, trim($attr_name) ) ) + return true; + return false; +} + +/** + * Returns true if the specified attribute is configured as hidden + * in config.php with the $hidden_attrs array or the $hidden_attrs_ro + * array. + * Attributes are configured as hidden in config.php thus: + * + * $hidden_attrs = array( "objectClass", "givenName" ); + * + * or + * + * $hidden_attrs_ro = array( "objectClass", "givenName", "shadowWarning", + * "shadowLastChange", "shadowMax", "shadowFlag", + * "shadowInactive", "shadowMin", "shadowExpire" ); + * + * + * @param string $attr The name of the attribute to test. + * @return bool + */ +function is_attr_hidden( $server_id, $attr ) +{ + global $hidden_attrs, $hidden_attrs_ro, $hidden_except_dn; + + $attr = trim( $attr ); + if( '' === $attr ) + return false; + if( ! isset( $hidden_attrs ) ) + return false; + if( ! is_array( $hidden_attrs) ) + return false; + if( ! isset( $hidden_attrs_ro ) ) + $hidden_attrs_ro = $hidden_attrs; + if( ! is_array( $hidden_attrs_ro) ) + $hidden_attrs_ro = $hidden_attrs; + + // Is the user excluded? + if (isset($hidden_except_dn) && userIsMember($server_id, get_logged_in_dn( $server_id ),$hidden_except_dn)) + return false; + + if( is_server_read_only( $server_id ) ) { + foreach( $hidden_attrs_ro as $attr_name ) + if( 0 == strcasecmp( $attr, trim($attr_name) ) ) + return true; + } else { + foreach( $hidden_attrs as $attr_name ) + if( 0 == strcasecmp( $attr, trim($attr_name) ) ) + return true; + } + return false; +} + +/** * Returns true if the specified server is configured to be displayed * in read only mode. If a user has logged in via anonymous bind, and * config.php specifies anonymous_bind_implies_read_only as true, then - * this also returns true. + * this also returns true. Servers can be configured read-only in + * config.php thus: + * + * $server[$i]['read_only'] = true; + * + * + * @param int $server_id The ID of the server of interest from the $servers array in config.php + * @return bool */ function is_server_read_only( $server_id ) { @@ -379,59 +1190,92 @@ function is_server_read_only( $server_id ) return false; } -/* +/** * Given a DN and server ID, this function reads the DN's objectClasses and * determines which icon best represents the entry. The results of this query - * are cached in a session variable so it is not run *every* time the tree + * are cached in a session variable so it is not run every time the tree * browser changes, just when exposing new DNs that were not displayed * previously. That means we can afford a little bit of inefficiency here * in favor of coolness. :) + * + * This function returns a string like "country.png". All icon files are assumed + * to be contained in the /images/ directory of phpLDAPadmin. + * + * Developers are encouraged to add new icons to the images directory and modify + * this function as needed to suit their types of LDAP entries. If the modifications + * are general to an LDAP audience, the phpLDAPadmin team will gladly accept them + * as a patch. + * + * @param int $server_id The ID of the LDAP server housing the DN of interest. + * @param string $dn The DN of the entry whose icon you wish to fetch. + * + * @return string */ function get_icon( $server_id, $dn ) { // fetch and lowercase all the objectClasses in an array $object_classes = get_object_attr( $server_id, $dn, 'objectClass', true ); - if( $object_classes === null || $object_classes === false) - return 'object.png'; + if( $object_classes === null || $object_classes === false || ! is_array( $object_classes ) ) + $object_classes = array(); foreach( $object_classes as $i => $class ) $object_classes[$i] = strtolower( $class ); $rdn = get_rdn( $dn ); + $rdn_parts = explode( '=', $rdn, 2 ); + $rdn_value = isset( $rdn_parts[0] ) ? $rdn_parts[0] : null; + $rdn_attr = isset( $rdn_parts[1] ) ? $rdn_parts[1] : null; + unset( $rdn_parts ); - // Is it a samba NT machine (is sambaAccount and ends with '$') + // return icon filename based upon objectClass value if( in_array( 'sambaaccount', $object_classes ) && '$' == $rdn{ strlen($rdn) - 1 } ) return 'nt_machine.png'; - // Is it a samba user account? if( in_array( 'sambaaccount', $object_classes ) ) return 'nt_user.png'; - // Is it a person or some type of account/user? elseif( in_array( 'person', $object_classes ) || in_array( 'organizationalperson', $object_classes ) || in_array( 'inetorgperson', $object_classes ) || in_array( 'account', $object_classes ) || in_array( 'posixaccount', $object_classes ) ) return 'user.png'; - // Is it an organization? - elseif ( in_array( 'organization', $object_classes ) ) + elseif( in_array( 'organization', $object_classes ) ) return 'o.png'; - // Is it an organizational Unit? elseif( in_array( 'organizationalunit', $object_classes ) ) return 'ou.png'; - // Is it a domain controler (dc) + elseif( in_array( 'organizationalrole', $object_classes ) ) + return 'uid.png'; elseif( in_array( 'dcobject', $object_classes ) || - in_array( 'domainrelatedobject', $object_classes ) ) + in_array( 'domainrelatedobject', $object_classes ) || + in_array( 'domain', $object_classes ) || + in_array( 'builtindomain', $object_classes )) return 'dc.png'; - elseif( in_array( 'country', $object_classes ) ) - return 'country.png'; + elseif( in_array( 'alias', $object_classes ) ) + return 'go.png'; + elseif( in_array( 'room', $object_classes ) ) + return 'door.png'; + elseif( in_array( 'device', $object_classes ) ) + return 'device.png'; + elseif( in_array( 'document', $object_classes ) ) + return 'document.png'; + elseif( in_array( 'country', $object_classes ) ) { + $tmp = pla_explode_dn( $dn ); + $cval = explode( '=', $tmp[0], 2 ); + $cval = isset( $cval[1] ) ? $cval[1] : false; + if( $cval && false === strpos( $cval, ".." ) && + file_exists( realpath( "./images/countries/$cval.png" ) ) ) + return "countries/$cval.png"; + else + return 'country.png'; + } elseif( in_array( 'jammvirtualdomain', $object_classes ) ) return 'mail.png'; elseif( in_array( 'locality', $object_classes ) ) return 'locality.png'; elseif( in_array( 'posixgroup', $object_classes ) || - in_array( 'groupofnames', $object_classes ) ) + in_array( 'groupofnames', $object_classes ) || + in_array( 'group', $object_classes ) ) return 'ou.png'; elseif( in_array( 'applicationprocess', $object_classes ) ) return 'process.png'; @@ -439,22 +1283,78 @@ function get_icon( $server_id, $dn ) return 'uniquegroup.png'; elseif( in_array( 'iphost', $object_classes ) ) return 'host.png'; + elseif( in_array( 'nlsproductcontainer', $object_classes ) ) + return 'n.png'; + elseif( in_array( 'ndspkikeymaterial', $object_classes ) ) + return 'lock.png'; + elseif( in_array( 'server', $object_classes ) ) + return 'server-small.png'; + elseif( in_array( 'volume', $object_classes ) ) + return 'hard-drive.png'; + elseif( in_array( 'ndscatcatalog', $object_classes ) ) + return 'catalog.png'; + elseif( in_array( 'resource', $object_classes ) ) + return 'n.png'; + elseif( in_array( 'ldapgroup', $object_classes ) ) + return 'ldap-server.png'; + elseif( in_array( 'ldapserver', $object_classes ) ) + return 'ldap-server.png'; + elseif( in_array( 'nisserver', $object_classes ) ) + return 'ldap-server.png'; + elseif( in_array( 'rbscollection', $object_classes ) ) + return 'ou.png'; + elseif( in_array( 'dfsconfiguration', $object_classes ) ) + return 'nt_machine.png'; + elseif( in_array( 'applicationsettings', $object_classes ) ) + return 'server-settings.png'; + elseif( in_array( 'aspenalias', $object_classes ) ) + return 'mail.png'; + elseif( in_array( 'container', $object_classes ) ) + return 'folder.png'; + elseif( in_array( 'ipnetwork', $object_classes ) ) + return 'network.png'; + elseif( in_array( 'samserver', $object_classes ) ) + return 'server-small.png'; + elseif( in_array( 'lostandfound', $object_classes ) ) + return 'find.png'; + elseif( in_array( 'infrastructureupdate', $object_classes ) ) + return 'server-small.png'; + elseif( in_array( 'filelinktracking', $object_classes ) ) + return 'files.png'; + elseif( in_array( 'automountmap', $object_classes ) || + in_array( 'automount', $object_classes ) ) + return 'hard-drive.png'; + elseif( 0 === strpos( $rdn_value, "ipsec" ) || + 0 == strcasecmp( $rdn_value, "IP Security" ) || + 0 == strcasecmp( $rdn_value, "MSRADIUSPRIVKEY Secret" ) || + 0 === strpos( $rdn_value, "BCKUPKEY_" ) ) + return 'lock.png'; + elseif( 0 == strcasecmp( $rdn_value, "MicrosoftDNS" ) ) + return 'dc.png'; // Oh well, I don't know what it is. Use a generic icon. else return 'object.png'; } -/* +/** * Does the same thing as get_icon(), but it tries to fetch the icon name from the * tree_icons session variable first. If not found, resorts to get_icon() and stores * the icon nmae in the tree_icons session before returing the icon. + * + * @param int $server_id The ID of the server housing the DN of interest. + * @param string $dn The DN of the entry of interest. + * + * @return string + * + * @see get_icon */ function get_icon_use_cache( $server_id, $dn ) { - @session_start(); - if( session_is_registered( 'tree_icons' ) ) { - global $_SESSION; - if( isset( $_SESSION['tree_icons'][ $server_id ][ $dn ] ) ) { + initialize_session_tree(); + if( array_key_exists( 'tree_icons', $_SESSION ) ) { + if( array_key_exists( $server_id, $_SESSION['tree_icons'] ) && + array_key_exists( $dn, $_SESSION['tree_icons'][$server_id] ) ) + { return $_SESSION['tree_icons'][ $server_id ][ $dn ]; } else { $icon = get_icon( $server_id, $dn ); @@ -464,22 +1364,35 @@ function get_icon_use_cache( $server_id, $dn ) } } -/* +/** * Given a server_id, returns whether or not we have enough information * to authenticate against the server. For example, if the user specifies - * 'cookie' in the config for that server, it checks the $_COOKIE array to - * see if the cookie username and password is set for the server. + * auth_type of 'cookie' in the config for that server, it checks the $_COOKIE array to + * see if the cookie username and password is set for the server. If the auth_type + * is 'session', the $_SESSION array is checked. + * + * There are three cases for this function depending on the auth_type configured for + * the specified server. If the auth_type is form or http, then get_logged_in_dn() is + * called to verify that the user has logged in. If the auth_type is config, then the + * $servers array in config.php is checked to ensure that the user has specified + * login information. In any case, if phpLDAPadmin has enough information to login + * to the server, true is returned. Otherwise false is returned. + * + * @param int $server_id + * @return bool + * @see get_logged_in_dn */ function have_auth_info( $server_id ) { global $servers; - if( ! is_numeric( $server_id ) || ! isset( $servers[$server_id] ) ) + if( ! check_server_id( $server_id ) ) return false; $server = $servers[$server_id]; - if( isset( $server['auth_type'] ) && $server['auth_type'] == 'form' ) { + // For session or cookie auth_types, we check the session or cookie to see if a user has logged in. + if( isset( $server['auth_type'] ) && ( in_array( $server['auth_type'], array( 'session', 'cookie' ) ) ) ) { // we don't look at get_logged_in_pass() cause it may be null for anonymous binds // get_logged_in_dn() will never return null if someone is really logged in. if( get_logged_in_dn( $server_id ) ) @@ -492,95 +1405,228 @@ function have_auth_info( $server_id ) elseif( ! isset( $server['auth_type'] ) || $server['auth_type'] == 'config' ) { return true; } - else - { + else { global $lang; - pla_error( sprintf( $lang['error_auth_type_config'], htmlspecialchars($server['auth_type'])) ); + pla_error( sprintf( $lang['error_auth_type_config'], + htmlspecialchars( $server[ 'auth_type' ] ) ) ); } } -/* - * Returns the password of the currently logged in DN (auth_type form only) +/** + * Fetches the password of the currently logged in user (for auth_types "form" and "http" only) * or false if the current login is anonymous. + * + * @param int $server_id The ID of the server of interest. + * + * @return string + * + * @see have_auth_info + * @see get_logged_in_dn */ function get_logged_in_pass( $server_id ) { + global $servers; if( ! is_numeric( $server_id ) ) return false; - $cookie_name = 'pla_login_pass_' . $server_id; - global $_COOKIE; - $pass = isset( $_COOKIE[ $cookie_name ] ) ? $_COOKIE[ $cookie_name ] : false; - - if( $pass == '0' ) - return null; - else - return $pass; + if( ! isset( $servers[ $server_id ][ 'auth_type' ] ) ) + return false; + $auth_type = $servers[ $server_id ][ 'auth_type' ]; + switch( $auth_type ) { + case 'cookie': + $cookie_name = 'pla_login_pass_' . $server_id; + $pass = isset( $_COOKIE[ $cookie_name ] ) ? $_COOKIE[ $cookie_name ] : false; + if( $pass == '0' ) + return null; + else + return pla_blowfish_decrypt( $pass ); + break; + case 'session': + $session_var_name = 'pla_login_pass_' . $server_id; + $pass = isset( $_SESSION[ $session_var_name ] ) ? $_SESSION[ $session_var_name ] : false; + if( $pass == '0' ) + return null; + else + return $pass; + break; + case 'config': + if( isset( $servers[ $server_id ][ 'login_pass' ] ) ) + return ( $servers[ $server_id ][ 'login_pass' ] ); + return false; + break; + default: + global $lang; + pla_error( sprintf( $lang['unknown_auth_type'], htmlspecialchars( $auth_type ) ) ); + } } -/* +/** * Returns the DN who is logged in currently to the given server, which may - * either be a DN or the string 'anonymous'. + * either be a DN or the string 'anonymous'. This applies only for auth_types + * "form" and "http". + * + * One place where this function is used is the tree viewer: + * After a user logs in, the text "Logged in as: " is displayed under the server + * name. This information is retrieved from this function. + * + * @param int $server_id The ID of the server of interest. + * + * @return string + * + * @see have_auth_info + * @see get_logged_in_pass */ function get_logged_in_dn( $server_id ) { + global $servers; if( ! is_numeric( $server_id ) ) return false; - $cookie_name = 'pla_login_dn_' . $server_id; - global $_COOKIE; - if( isset( $_COOKIE[ $cookie_name ] ) ) { - $dn = $_COOKIE[ $cookie_name ]; - } else { + if( ! isset( $servers[ $server_id ][ 'auth_type' ] ) ) return false; + $auth_type = $servers[ $server_id ][ 'auth_type' ]; + switch( $auth_type ) { + case 'cookie': + $cookie_name = 'pla_login_dn_' . $server_id; + if( isset( $_COOKIE[ $cookie_name ] ) ) { + $dn = $_COOKIE[ $cookie_name ]; + } else { + return false; + } + return pla_blowfish_decrypt( $dn ); + break; + case 'session': + $session_var_name = 'pla_login_dn_' . $server_id; + if( isset( $_SESSION[ $session_var_name ] ) ) { + $dn = $_SESSION[ $session_var_name ]; + return $dn; + } else { + return false; + } + break; + case 'config': + if( isset( $servers[ $server_id ][ 'login_dn' ] ) ) + return ( $servers[ $server_id ][ 'login_dn' ] ); + return false; + break; + default: + global $lang; + pla_error( sprintf( $lang['unknown_auth_type'], htmlspecialchars( $auth_type ) ) ); } - - return $dn; } -/* - * Specify a $server_id (0,1,2...) based on the order it appears in config.php. - * The first is 0, the second is 1, etc. You rarely will need to consult - * config.php since those values are usually generated dynamically in hrefs. +/** + * Appends a servers base to a "sub" dn or returns the base. + * If $get_base is true, return at least the base, otherwise null. */ -function pla_ldap_connect( $server_id ) +function expand_dn_with_base( $server_id, $sub_dn, $conn = null, $get_base = true ) { + global $servers; + if( ! check_server_id( $server_id ) ) return false; - if( ! have_auth_info( $server_id ) ) - return false; + $empty_str = ( is_null($sub_dn) || ( ( $len = strlen( trim( $sub_dn ) ) ) == 0 ) ); - global $servers; + if ( $empty_str ) { + // If we have no string and want not base + if ( ! $get_base ) + return null; + } elseif ( $sub_dn[$len - 1] != ',' ) + // If we have a string which doesn't need a base + return $sub_dn; + + if( ( $empty_str && $get_base ) || ! $empty_str ) + { + if( isset($servers[$server_id]['base']) ) { + $base = $servers[$server_id]['base']; + if ( strlen( trim( $base ) ) == 0 ) + $base = try_to_get_root_dn( $server_id, $conn ); + } else { + $base = try_to_get_root_dn( $server_id, $conn ); + } + + if ( $base ) + return ( ! $empty_str ) ? $sub_dn . $base : $base; + } + return null; +} + +/** + * Logs into the specified server using the auth_type configured for that server using + * ldap_connect() and ldap_bind() from the PHP LDAP API. + * If anonymous is true bind information (user / pass) is ignored (= anonymous). + * If anonymous is null a new bind is done (i.e. user changed). + * + * @param int $server_id The ID of the server of interest. + * @param bool $anonymous Set to override server config + * @return resource The LDAP connection resource or the LDAP errorcode + * + * @see get_logged_in_dn + * @see get_logged_in_pass + * @see have_auth_info + * @see check_server_id + */ +function pla_ldap_connect( $server_id, $anonymous = false, $use_cache = true) +{ + //echo "pla_ldap_connect( $server_id, $anonymous, $use_cache )
\n"; + if( ! check_server_id( $server_id ) ) + return -1; + + if( ! $anonymous && ! have_auth_info( $server_id ) ) + return -2; + + global $servers, $lang; // cache the connection, so if we are called multiple // times, we don't have to reauthenticate with the LDAP server - static $conns; - if( isset( $conns[$server_id] ) && $conns[$server_id] ) - return $conns[$server_id]; - $host = $servers[$server_id]['host']; - $port = $servers[$server_id]['port']; - if( ! $port ) $port = 389; + // We can reuse connections for multiple binds if we don't ldap_unbind + if( $use_cache && isset( $conns[ $server_id ] ) ) { + $conn = $conns[ $server_id ][ 'conn' ]; + $status = $conns[ $server_id ][ 'stat' ]; - $conn = @ldap_connect( $host, $port ); + // Status tells us, if we can use the same bind + if( !is_null($status) && $status == $anonymous ) + return $conn; + } else { + $host = $servers[$server_id]['host']; - if( ! $conn ) return false; + $port = isset( $servers[$server_id]['port'] ) ? $servers[ $server_id ][ 'port' ] : false; - // go with LDAP version 3 if possible (needed for renaming and Novell schema fetching) - @ldap_set_option( $conn, LDAP_OPT_PROTOCOL_VERSION, 3 ); + if( $port ) + $conn = @ldap_connect( $host, $port ); + else + $conn = @ldap_connect( $host ); - // try to fire up TLS is specified in the config - if( $servers[ $server_id ][ 'tls' ] == true ) { - global $lang; - function_exists( 'ldap_start_tls' ) or pla_error( $lang['php_install_not_supports_tls'] ); - @ldap_start_tls( $conn ) or pla_error( $lang['could_not_start_tls']); + $conn or pla_error( sprintf( $lang['could_not_connect_to_host_on_port'], htmlspecialchars( $host ), htmlspecialchars( $port ) ) ); + + // go with LDAP version 3 if possible (needed for renaming and Novell schema fetching) + @ldap_set_option( $conn, LDAP_OPT_PROTOCOL_VERSION, 3 ); + // Disabling this makes it possible to browse the tree for Active Directory, and seems + // to not affect other LDAP servers (tested with OpenLDAP) as phpLDAPadmin explicitly + // specifies deref behavior for each ldap_search operation. + @ldap_set_option( $conn, LDAP_OPT_REFERRALS, 0); + + // try to fire up TLS is specified in the config + if( tls_enabled( $server_id ) ) { + function_exists( 'ldap_start_tls' ) or pla_error( $lang['php_install_not_supports_tls'] ); + @ldap_start_tls( $conn ) or pla_error( $lang['could_not_start_tls']); + } + + // store the cached connection resource + $conns[$server_id]['conn'] = $conn; + $conns[$server_id]['stat'] = null; } - // grab the auth info based on the auth_type for this server - if( $servers[ $server_id ][ 'auth_type' ] == 'config' ) { + if( $anonymous == true ) { + $login_dn = null; + $login_pass = null; + } // grab the auth info based on the auth_type for this server + elseif( $servers[ $server_id ][ 'auth_type' ] == 'config' ) { $login_dn = $servers[$server_id]['login_dn']; $login_pass = $servers[$server_id]['login_pass']; - } elseif( $servers[ $server_id ][ 'auth_type' ] == 'form' ) { + $login_dn = expand_dn_with_base( $server_id, $login_dn, $conn, false ); + } else { $login_dn = get_logged_in_dn( $server_id ); $login_pass = get_logged_in_pass( $server_id ); @@ -589,34 +1635,106 @@ function pla_ldap_connect( $server_id ) $login_dn = null; $login_pass = null; } - } else { - global $lang; - pla_error( sprintf( $lang['auth_type_not_valid'], - htmlspecialchars( $servers[ $server_id ][ 'auth_type' ] ))); } $res = @ldap_bind( $conn, $login_dn, $login_pass ); - if( ! $res ) return false; + if( ! $res ) + return ldap_errno( $conn ); - // store the cached connection resource - $conns[$server_id] = $conn; + // store the bind status + $conns[$server_id]['stat'] = $anonymous; return $conn; } -/* - * Returns an array listing the DNs contained by the specified $dn +/** + * Convenient function to handle pla_ldap_connect results + * @see pla_ldap_connect + * + * @param resource $ds The pla_ldap_connect result + * @param bool $process_error Defines, if you want do run pla_error + * @return Returns false if the connection ($ds) is ok, or true otherwise. */ -function get_container_contents( $server_id, $dn, $size_limit=0 ) +function pla_ldap_connection_is_error( $ds, $process_error = true ) { - $con = pla_ldap_connect( $server_id ); - if( ! $con ) return false; + if ( ! $process_error ) + return ( ! is_resource( $ds ) ); + else { + if ( ! is_resource( $ds ) ) { + global $lang; - $search = @ldap_list( $con, $dn, 'objectClass=*', array( 'dn' ), 1, $size_limit ); + if( is_numeric( $ds ) ) { + switch( $ds ) { + case -1: pla_error( $lang['bad_server_id'] ); break; + case -2: pla_error( $lang['not_enough_login_info'] ); break; + default: pla_error( $lang['ferror_error'] ); break; + } + return true; + } + + switch( $ds ) { + case 0x31: + pla_error( $lang['bad_user_name_or_password'] ); + break; + case 0x32: + pla_error( $lang['insufficient_access_rights'] ); + break; + case 0x5b: + pla_error( $lang['could_not_connect'] ); + break; + default: + pla_error( $lang['could_not_bind'], ldap_err2str( $ds ), $ds ); + break; + } + } + return false; + } +} + +/** + * Gets a list of child entries for an entry. Given a DN, this function fetches the list of DNs of + * child entries one level beneath the parent. For example, for the following tree: + * + * + * dc=example,dc=com + * ou=People + * cn=Dave + * cn=Fred + * cn=Joe + * ou=More People + * cn=Mark + * cn=Bob + * + * + * Calling get_container_contents( $server_id, "ou=people,dc=example,dc=com" ) + * would return the following list: + * + * + * cn=Dave + * cn=Fred + * cn=Joe + * ou=More People + * + * + * @param int $server_id The ID of the server housing the entry of interest + * @param string $dn The DN of the entry whose children to return. + * @param int $size_limit (optional) The maximum number of entries to return. + * If unspecified, no limit is applied to the number of entries in the returned. + * @param string $filter (optional) An LDAP filter to apply when fetching children, example: "(objectClass=inetOrgPerson)" + * @return array An array of DN strings listing the immediate children of the specified entry. + */ +function get_container_contents( $server_id, $dn, $size_limit=0, $filter='(objectClass=*)', $deref=LDAP_DEREF_ALWAYS ) +{ + $conn = pla_ldap_connect( $server_id ); + if( pla_ldap_connection_is_error( $conn, false ) ) + return false; + +// echo "get_container_contents( $server_id, $dn, $size_limit, $filter, $deref )\n"; + $search = @ldap_list( $conn, $dn, $filter, array( 'dn' ), 1, $size_limit, 0, $deref ); if( ! $search ) return array(); - $search = ldap_get_entries( $con, $search ); + $search = ldap_get_entries( $conn, $search ); $return = array(); for( $i=0; $i<$search['count']; $i++ ) { @@ -628,10 +1746,19 @@ function get_container_contents( $server_id, $dn, $size_limit=0 ) return $return; } -/* +/** * Builds the initial tree that is stored in the session variable 'tree'. * Simply returns an array with an entry for each active server in - * config.php + * config.php. The structure of the returned array is simple, and looks like + * this: + * + * Array ( + * 0 => Array ( ) + * 1 => Array ( ) + * ) + * + * This function is not meant as a user callable function, but rather a convenient, + * automated method for setting up the initial structure for the tree viewer. */ function build_initial_tree() { @@ -648,8 +1775,25 @@ function build_initial_tree() return $tree; } -/* - * Builds the initial array that stores the icon-lookup for each DN in the tree browser +/** + * Builds the initial array that stores the icon-lookup for each server's DN in the tree browser. The returned + * array is then stored in the current session. The structure of the returned array is simple, and looks like + * this: + * + * Array + * ( + * [0] => Array + * ( + * [dc=example,dc=com] => "dcobject.png" + * ) + * [1] => Array + ( + * [o=Corporation] => "o.png" + * ) + * ) + * + * This function is not meant as a user-callable function, but rather a convenient, automated method for + * setting up the initial data structure for the tree viewer's icon cache. */ function build_initial_tree_icons() { @@ -667,15 +1811,71 @@ function build_initial_tree_icons() return $tree_icons; } -function get_entry_system_attrs( $server_id, $dn ) +/* + * Checks and fixes an initial session's tree cache if needed. + * + * This function is not meant as a user-callable function, but rather a convenient, + * automated method for checking the initial data structure of the session. + */ +function initialize_session_tree() +{ + // From the PHP manual: If you use $_SESSION don't use + // session_register(), session_is_registered() or session_unregister()! + if( ! array_key_exists( 'tree', $_SESSION ) ) + $_SESSION['tree'] = build_initial_tree(); + if( ! array_key_exists( 'tree_icons', $_SESSION ) ) + $_SESSION['tree_icons'] = build_initial_tree_icons(); + + // Make sure that the tree index is indeed well formed. + if( ! is_array( $_SESSION['tree'] ) ) + $_SESSION['tree'] = build_initial_tree(); + if( ! is_array( $_SESSION['tree_icons'] ) ) + $_SESSION['tree_icons'] = build_initial_tree_icons(); + +} + +/** + * Gets the operational attributes for an entry. Given a DN, this function fetches that entry's + * operational (ie, system or internal) attributes. These attributes include "createTimeStamp", + * "creatorsName", and any other attribute that the LDAP server sets automatically. The returned + * associative array is of this form: + * + * Array + * ( + * [creatorsName] => Array + * ( + * [0] => "cn=Admin,dc=example,dc=com" + * ) + * [createTimeStamp]=> Array + * ( + * [0] => "10401040130" + * ) + * [hasSubordinates] => Array + * ( + * [0] => "FALSE" + * ) + * ) + * + * + * @param int $server_id the ID of the server of interest. + * @param string $dn The DN of the entry whose interal attributes are desired. + * @param int $deref For aliases and referrals, this parameter specifies whether to + * follow references to the referenced DN or to fetch the attributes for + * the referencing DN. See http://php.net/ldap_search for the 4 valid + * options. + * @return array An associative array whose keys are attribute names and whose values + * are arrays of values for the aforementioned attribute. + */ +function get_entry_system_attrs( $server_id, $dn, $deref=LDAP_DEREF_NEVER ) { $conn = pla_ldap_connect( $server_id ); - if( ! $conn ) return false; + if( pla_ldap_connection_is_error( $conn, false ) ) + return false; $attrs = array( 'creatorsname', 'createtimestamp', 'modifiersname', 'structuralObjectClass', 'entryUUID', 'modifytimestamp', 'subschemaSubentry', 'hasSubordinates', '+' ); - $search = @ldap_read( $conn, $dn, '(objectClass=*)', $attrs, 0, 0, 0, LDAP_DEREF_ALWAYS ); + $search = @ldap_read( $conn, $dn, '(objectClass=*)', $attrs, 0, 0, 0, $deref ); if( ! $search ) return false; $entry = ldap_first_entry( $conn, $search ); @@ -697,31 +1897,59 @@ function get_entry_system_attrs( $server_id, $dn ) return $return_attrs; } -/* - * Returns the attribute/value pairs for the given $dn on the given - * $server_id. If the attribute is single valued, it will return - * a single value for that attribute. Otherwise, it will return an - * array of values for that attribute. Here's a sample return value: +/** + * Gets the attributes/values of an entry. Returns an associative array whose + * keys are attribute value names and whose values are arrays of values for + * said attribute. Optionally, callers may specify true for the parameter + * $lower_case_attr_names to force all keys in the associate array (attribute + * names) to be lower case. + * + * Sample return value of get_object_attrs( 0, "cn=Bob,ou=pepole,dc=example,dc=com" ) * + * * Array - * ( - * [objectclass] => Array + * ( + * [objectClass] => Array * ( - * [0] => organizationalRole - * [1] => krb5principal - * [2] => kerberosSecurityObject + * [0] => person + * [1] => top * ) - * [cn] => Manager - * [krbname] => phpldap@EXAMPLE.COM - * [dn] => cn=Manager,dc=example,dc=com - * ) + * [cn] => Array + * ( + * [0] => Bob + * ) + * [sn] => Array + * ( + * [0] => Jones + * ) + * [dn] => Array + * ( + * [0] => cn=Bob,ou=pepole,dc=example,dc=com + * ) + * ) + * + * + * @param int $server_id The ID of the server of interest + * @param string $dn The distinguished name (DN) of the entry whose attributes/values to fetch. + * @param bool $lower_case_attr_names (optional) If true, all keys of the returned associative + * array will be lower case. Otherwise, they will be cased as the LDAP server returns + * them. + * @param int $deref For aliases and referrals, this parameter specifies whether to + * follow references to the referenced DN or to fetch the attributes for + * the referencing DN. See http://php.net/ldap_search for the 4 valid + * options. + * @return array + * @see get_entry_system_attrs + * @see get_object_attr */ -function get_object_attrs( $server_id, $dn, $lower_case_attr_names = false ) +function get_object_attrs( $server_id, $dn, $lower_case_attr_names=false, $deref=LDAP_DEREF_NEVER ) { + //echo "get_object_attrs( $server_id, $dn, $lower_case_attr_names )
"; $conn = pla_ldap_connect( $server_id ); - if( ! $conn ) return false; + if( pla_ldap_connection_is_error( $conn, false ) ) + return false; - $search = @ldap_read( $conn, $dn, '(objectClass=*)', array( ), 0, 0, 0, LDAP_DEREF_ALWAYS ); + $search = @ldap_read( $conn, $dn, '(objectClass=*)', array( ), 0, 0, 0, $deref ); if( ! $search ) return false; @@ -744,9 +1972,11 @@ function get_object_attrs( $server_id, $dn, $lower_case_attr_names = false ) unset( $attrs[$i] ); $return_array = array(); - foreach( $attrs as $attr => $vals ) { + foreach( $attrs as $attr => $vals ) { if( $lower_case_attr_names ) $attr = strtolower( $attr ); + if( is_attr_binary( $server_id, $attr ) ) + $vals = ldap_get_values_len( $conn, $entry, $attr ); unset( $vals['count'] ); $return_array[ $attr ] = $vals; } @@ -756,7 +1986,7 @@ function get_object_attrs( $server_id, $dn, $lower_case_attr_names = false ) return $return_array; } -/* +/** * Returns true if the passed string $temp contains all printable * ASCII characters. Otherwise (like if it contains binary data), * returns false. @@ -772,32 +2002,121 @@ function is_printable_str($temp) { return true; } -/* - * Much like get_object_attrs(), but only returns the entry for - * one attribute of an object. Again, if the attribute contains - * multiple values, returns an array of values. Otherwise, it - * returns the single attribute value. - * TODO: Don't call get_object_attrs() and filter. Do the actual ldap_read() ourselves (for efficiencey) +/** + * Much like get_object_attrs(), but only returns the values for + * one attribute of an object. Example calls: + * + * + * print_r( get_object_attr( 0, "cn=Bob,ou=people,dc=example,dc=com", "sn" ) ); + * // prints: + * // Array + * // ( + * // [0] => "Smith" + * // ) + * + * print_r( get_object_attr( 0, "cn=Bob,ou=people,dc=example,dc=com", "objectClass" ) ); + * // prints: + * // Array + * // ( + * // [0] => "top" + * // [1] => "person" + * // ) + * + * + * @param int $server_id The ID of the server of interest + * @param string $dn The distinguished name (DN) of the entry whose attributes/values to fetch. + * @param string $attr The attribute whose value(s) to return (ie, "objectClass", "cn", "userPassword") + * @param bool $lower_case_attr_names (optional) If true, all keys of the returned associative + * array will be lower case. Otherwise, they will be cased as the LDAP server returns + * them. + * @param int $deref For aliases and referrals, this parameter specifies whether to + * follow references to the referenced DN or to fetch the attributes for + * the referencing DN. See http://php.net/ldap_search for the 4 valid + * options. + * @see get_object_attrs */ -function get_object_attr( $server_id, $dn, $attr ) +function get_object_attr( $server_id, $dn, $attr, $deref=LDAP_DEREF_NEVER ) { + /** $attr = strtolower( $attr ); $attrs = get_object_attrs( $server_id, $dn, true ); if( isset( $attrs[$attr] ) ) return $attrs[$attr]; else return false; + */ + + //echo "get_object_attr( $server_id, $dn, $attr )
"; + $conn = pla_ldap_connect( $server_id ); + if( pla_ldap_connection_is_error( $conn, false ) ) + return false; + + $search = @ldap_read( $conn, $dn, '(objectClass=*)', array( $attr ), 0, 0, 0, $deref ); + + if( ! $search ) + return false; + + $entry = ldap_first_entry( $conn, $search ); + + if( ! $entry ) + return false; + + $attrs = ldap_get_attributes( $conn, $entry ); + + if( ! $attrs || $attrs['count'] == 0 ) + return false; + + if( is_attr_binary( $server_id, $attr ) ) + $vals = ldap_get_values_len( $conn, $entry, $attr ); + else + $vals = ldap_get_values( $conn, $entry, $attr ); + unset( $vals['count'] ); + return $vals; } -/* - * A do-it-all ldap_search function. You can even specify the search scope. Other than - * that, it's pretty much the same as the PHP ldap_search() call, except it returns - * an array of results, rather than an LDAP result resource. +/** + * A handy ldap searching function very similar to PHP's ldap_search() with the + * following exceptions: Callers may specify a search scope and the return value + * is an array containing the search results rather than an LDAP result resource. * - * NOTE: This function will use a lot of memory on large searches. You should consider - * using the PHP LDAP API directly for large searches (ldap_next_entry(), ldap_next_attribute(), etc) + * Example usage: + * + * $samba_users = ldap_search( 0, "(&(objectClass=sambaAccount)(objectClass=posixAccount))", + * "ou=People,dc=example,dc=com", array( "uid", "homeDirectory" ) ); + * print_r( $samba_users ); + * // prints (for example): + * // Array + * // ( + * // [uid=jsmith,ou=People,dc=example,dc=com] => Array + * // ( + * // [dn] => "uid=jsmith,ou=People,dc=example,dc=com" + * // [uid] => "jsmith" + * // [homeDirectory] => "\\server\jsmith" + * // ) + * // [uid=byoung,ou=People,dc=example,dc=com] => Array + * // ( + * // [dn] => "uid=byoung,ou=Samba,ou=People,dc=example,dc=com" + * // [uid] => "byoung" + * // [homeDirectory] => "\\server\byoung" + * // ) + * // ) + * + * + * WARNING: This function will use a lot of memory on large searches since the entire result set is + * stored in a single array. For large searches, you should consider sing the less memory intensive + * PHP LDAP API directly (ldap_search(), ldap_next_entry(), ldap_next_attribute(), etc). + * + * @param int $server_id The ID of the server to search on. + * @param string $filter The LDAP filter to use when searching (example: "(objectClass=*)") (see RFC 2254) + * @param string $base_dn The DN of the base of search. + * @param array $attrs An array of attributes to include in the search result (example: array( "objectClass", "uid", "sn" )). + * @param string $scope The LDAP search scope. Must be one of "base", "one", or "sub". Standard LDAP search scope. + * @param bool $sort_results Specify false to not sort results by DN or true to have the + * returned array sorted by DN (uses ksort) + * @param int $deref When handling aliases or referrals, this specifies whether to follow referrals. Must be one of + * LDAP_DEREF_ALWAYS, LDAP_DEREF_NEVER, LDAP_DEREF_SEARCHING, or LDAP_DEREF_FINDING. See the PHP LDAP API for details. */ -function pla_ldap_search( $server_id, $filter, $base_dn=null, $attrs=array(), $scope='sub', $sort_results=true ) +function pla_ldap_search( $server_id, $filter, $base_dn=null, $attrs=array(), $scope='sub', $sort_results=true, $deref=LDAP_DEREF_ALWAYS ) { global $servers; @@ -808,19 +2127,19 @@ function pla_ldap_search( $server_id, $filter, $base_dn=null, $attrs=array(), $s $base_dn = $servers[$server_id]['base']; $ds = pla_ldap_connect( $server_id ); - if( ! $ds ) + if( pla_ldap_connection_is_error( $ds, false ) ) return false; switch( $scope ) { case 'base': - $search = @ldap_read( $ds, $base_dn, $filter, $attrs, 0, 0, 0, LDAP_DEREF_ALWAYS ); + $search = @ldap_read( $ds, $base_dn, $filter, $attrs, 0, 0, 0, $deref ); break; case 'one': - $search = @ldap_list( $ds, $base_dn, $filter, $attrs, 0, 0, 0, LDAP_DEREF_ALWAYS ); + $search = @ldap_list( $ds, $base_dn, $filter, $attrs, 0, 0, 0, $defef ); break; case 'sub': default: - $search = @ldap_search( $ds, $base_dn, $filter, $attrs, 0, 0, 0, LDAP_DEREF_ALWAYS ); + $search = @ldap_search( $ds, $base_dn, $filter, $attrs, 0, 0, 0, $deref ); break; } @@ -872,11 +2191,57 @@ function pla_ldap_search( $server_id, $filter, $base_dn=null, $attrs=array(), $s return $return; } -/* - * Transforms the user-configured lists into arrays and such. This is a little weird, but - * it takes the comma-separated lists (like the search result attribute list) in config.php +/** + * Reads the query, checks all values and sets defaults. + * + * @param int $query_id The ID of the predefined query. + * + * @return array The fixed query or null on error + */ +function get_cleaned_up_predefined_search( $query_id ) +{ + global $queries; + + if( ! isset( $queries[$query_id] ) ) + return null; + + $query = $queries[$query_id]; + + if( isset( $query['server'] ) && ( is_numeric( $query['server'] ) ) ) + $server_id = $query['server']; + else $server_id = 0; + + $base = ( isset( $query['base'] ) ) ? $query['base'] : null; + $base = expand_dn_with_base( $server_id, $base ); + + if( isset( $query['filter'] ) && strlen( trim( $query['filter'] ) ) > 0 ) + $filter = $query['filter']; + else + $filter = 'objectclass=*'; + + $scope = isset( $query['scope'] ) + && ( in_array( $query['scope'], array( 'base', 'sub', 'one' ) ) ) + ? $query['scope'] : 'sub'; + + if( isset( $query['attributes'] ) && strlen( trim( $query['filter'] ) ) > 0 ) + $attrib = $query['attributes']; + else + $attrib = "dn, cn, sn, objectClass"; + + return array ( 'server' => $server_id, 'base' => $base, + 'filter' => $filter, 'scope' => $scope, 'attributes' => $attrib ); +} + +/** + * Transforms the user-configured search lists into arrays for use by other components of phpLDAPadmin. + * This may seem a little strange, and that's because it is strange. + * + * The function takes the comma-separated lists (like the search result attribute list) in config.php * and turns them into arrays. Only call this ONCE per script. Any subsequent call will - * mess up the arrays. This function operates only on global variables defined in config.php. + * mess up the arrays. This function operates on global variables defined in config.php and is currently + * only used by search_form_simple.php + * + * For more details, just read the function's code. It's short and pretty straightforward. */ function process_config() { @@ -891,33 +2256,47 @@ function process_config() global $search_attributes; $search_attributes= explode( ",", $search_attributes); array_walk( $search_attributes, "trim_it" ); + + if( count( $search_attributes ) != count( $search_attributes_display ) ) + pla_error( $lang['search_Attrs_wrong_count'] ); } -/* - * Call-by-reference to trim a string. Used to filter empty entries out of the arrays +/** + * Trim a string in place (call by reference) Used to filter empty entries out of the arrays * that we generate in process_config(). + * + * @see process_config */ function trim_it( &$str ) { $str = trim($str); } -/* - * Checks the server id for sanity. Ensures that the server is indeed in the configured list and active +/** + * Checks the specified server id for sanity. Ensures that the server is indeed in the configured + * list and active. This is used by many many scripts to ensure that valid server ID values + * are passed in POST and GET. */ function check_server_id( $server_id ) { global $servers; - if( ! is_numeric( $server_id ) || ! isset( $servers[$server_id] ) || $servers[$server_id]['host'] == '' ) + if( ! is_numeric( $server_id ) || ! isset( $servers[$server_id] ) || ! isset( $servers[$server_id]['host'] ) || $servers[$server_id]['host'] == '' ) return false; else return true; } -/* - * Used to generate a random salt for crypt-style passwords +/** + * Used to generate a random salt for crypt-style passwords. Salt strings are used + * to make pre-built hash cracking dictionaries difficult to use as the hash algorithm uses + * not only the user's password but also a randomly generated string. The string is + * stored as the first N characters of the hash for reference of hashing algorithms later. + * * --- added 20021125 by bayu irawan --- * --- ammended 20030625 by S C Rigler --- + * + * @param int $length The length of the salt string to generate. + * @return string The generated salt string. */ function random_salt( $length ) { @@ -931,7 +2310,7 @@ function random_salt( $length ) { $str .= substr( $possible, ( rand() % strlen( $possible ) ), 1 ); } - /* + /** * Commented out following line because of problem * with crypt function in update.php * --- 20030625 by S C Rigler --- @@ -940,10 +2319,12 @@ function random_salt( $length ) return $str; } -/* +/** * Goes through the user-configured server list and looks for an available server_id, - * ie one that has specified enough information to login. This is for choosing the - * server to display in the drop-down box in search.php mostly. + * one that has specified enough information to login. This is for choosing the + * server to display in the drop-down box in search.php. + * + * @return int The first available server ID found. */ function get_avail_server_id() { @@ -955,49 +2336,76 @@ function get_avail_server_id() return false; } -/* +/** * Given a DN string, this returns the 'RDN' portion of the string. * For example. given 'cn=Manager,dc=example,dc=com', this function returns * 'cn=Manager' (it is really the exact opposite of get_container()). + * + * @param string $dn The DN whose RDN to return. + * @param bool $include_attrs If true, include attributes in the RDN string. + * See http://php.net/ldap_explode_dn for details + * + * @return string The RDN + * @see get_container */ function get_rdn( $dn, $include_attrs=0 ) { if( $dn == null ) return null; $rdn = pla_explode_dn( $dn, $include_attrs ); - if( $rdn['count'] == 0 ) - return null; + if( 0 == count($rdn) ) + return $dn; if( ! isset( $rdn[0] ) ) - return null; + return $dn; $rdn = $rdn[0]; return $rdn; } -/* - * Given a DN string, this returns the 'container' portion of the string. +/** + * Given a DN string, this returns the parent container portion of the string. * For example. given 'cn=Manager,dc=example,dc=com', this function returns * 'dc=example,dc=com'. + * + * @param string $dn The DN whose container string to return. + * + * @return string The container + * @see get_rdn */ function get_container( $dn ) { - $rdn = pla_explode_dn( $dn ); - $container = @$rdn[ 1 ]; - for( $i=2; $i + * Array + * ( + * [title] => "Invalid Credentials" + * [description] => "An invalid username and/or password was supplied to the LDAP server." + * ) + * */ function pla_verbose_error( $err_no ) { static $err_codes; if( count($err_codes) > 0 ) { - return $err_codes[ $err_no ]; - } else { - } + if( isset( $err_codes[ $err_no ] ) ) + return $err_codes[ $err_no ]; + else + return array( 'title' => null, 'desc' => null ); + } $err_codes_file = 'ldap_error_codes.txt'; @@ -1009,31 +2417,45 @@ function pla_verbose_error( $err_no ) return false; $contents = fread( $f, filesize( $err_codes_file ) ); + fclose( $f ); $entries = array(); preg_match_all( "/0x[A-Fa-f0-9][A-Za-z0-9]\s+[0-9A-Za-z_]+\s+\"[^\"]*\"\n/", $contents, $entries ); $err_codes = array(); - foreach( $entries[0] as $e ) - { + foreach( $entries[0] as $e ) { $entry = array(); preg_match( "/(0x[A-Za-z0-9][A-Za-z0-9])\s+([0-9A-Za-z_]+)\s+\"([^\"]*)\"/", $e, $entry ); - $hex_code = $entry[1]; - $title = $entry[2]; - $desc = $entry[3]; + $hex_code = isset( $entry[1] ) ? $entry[1] : null; + $title = isset( $entry[2] ) ? $entry[2] : null; + $desc = isset( $entry[3] ) ? $entry[3] : null; $desc = preg_replace( "/\s+/", " ", $desc ); - $err_codes[ $hex_code ] = array( 'title' => $title, 'desc' => $desc ); + $err_codes[ "$hex_code" ] = array( 'title' => $title, 'desc' => $desc ); } - return $err_codes[ $err_no ]; + // Sanity check + if( isset( $err_codes[ $err_no ] ) ) + return $err_codes[ $err_no ]; + else + return array( 'title' => null, 'desc' => null ); } -/* - * Spits out an HTML-formatted error string. If you specify the optional - * parameters, pla_error will lookup the error number and display a - * verbose message in addition to the message you pass it. +/** + * Prints an HTML-formatted error string. If you specify the optional + * parameters $ldap_err_msg and $ldap_err_no, this function will + * lookup the error number and display a verbose message in addition + * to the message you pass it. + * + * @param string $msg The error message to display. + * @param string $ldap_err_msg (optional) The error message supplied by the LDAP server + * @param string $ldap_err_no (optional) The hexadecimal error number string supplied by the LDAP server + * @param bool $fatal (optional) If true, phpLDAPadmin will terminate execution with the PHP die() function. + * + * @see die + * @see ldap_errno + * @see pla_verbose_error */ function pla_error( $msg, $ldap_err_msg=null, $ldap_err_no=-1, $fatal=true ) { - include_once 'header.php'; + @include_once 'header.php'; global $lang; ?> @@ -1045,8 +2467,10 @@ function pla_error( $msg, $ldap_err_msg=null, $ldap_err_no=-1, $fatal=true )
'; + } if( $ldap_err_no != -1 ) { $ldap_err_no = ( '0x' . str_pad( dechex( $ldap_err_no ), 2, 0, STR_PAD_LEFT ) ); @@ -1054,32 +2478,53 @@ function pla_error( $msg, $ldap_err_msg=null, $ldap_err_no=-1, $fatal=true ) if( $verbose_error ) { echo sprintf( $lang['ferror_number'], $ldap_err_no, $verbose_error['title']); + echo '
'; echo sprintf( $lang['ferror_discription'], $verbose_error['desc']); } else { echo sprintf($lang['ferror_number_short'], $ldap_err_no); + echo '
'; echo $lang['ferror_discription_short']; } } ?>
+
\n"; die(); } -/* - * This is our custom error handling function. When a PHP error occurs, - * php will call this so we can give the user a link to the bug submission - * page, where they can report it. Whoohoo. +/** + * phpLDAPadmin's custom error handling function. When a PHP error occurs, + * PHP will call this function rather than printing the typical PHP error string. + * This provides phpLDAPadmin the ability to format an error message more "pretty" + * and provide a link for users to submit a bug report. This function is not to + * be called by users. It is exclusively for the use of PHP internally. If this + * function is called by PHP from within a context where error handling has been + * disabled (ie, from within a function called with "@" prepended), then this + * function does nothing. + * + * @param int $errno The PHP error number that occurred (ie, E_ERROR, E_WARNING, E_PARSE, etc). + * @param string $errstr The PHP error string provided (ie, "Warning index "foo" is undefined) + * @param string $file The file in which the PHP error ocurred. + * @param int $lineno The line number on which the PHP error ocurred + * + * @see set_error_handler */ function pla_error_handler( $errno, $errstr, $file, $lineno ) { @@ -1096,6 +2541,7 @@ function pla_error_handler( $errno, $errstr, $file, $lineno ) $caller = basename( $_SERVER['PHP_SELF'] ); $errtype = ""; switch( $errno ) { + case E_STRICT: $errtype = "E_STRICT"; break; case E_ERROR: $errtype = "E_ERROR"; break; case E_WARNING: $errtype = "E_WARNING"; break; case E_PARSE: $errtype = "E_PARSE"; break; @@ -1118,15 +2564,18 @@ function pla_error_handler( $errno, $errstr, $file, $lineno ) return; } + $server = isset( $_SERVER['SERVER_SOFTWARE'] ) ? $_SERVER['SERVER_SOFTWARE'] : 'undefined'; + $phpself = isset( $_SERVER['PHP_SELF'] ) ? basename( $_SERVER['PHP_SELF'] ) : 'undefined'; pla_error( sprintf($lang['ferror_congrats_found_bug'], $errstr, $errtype, $file, - $lineno, basename($_SERVER['PHP_SELF']), pla_version(), - phpversion(), php_sapi_name(), $_SERVER['SERVER_SOFTWARE'])); + $lineno, $phpself, pla_version(), + phpversion(), php_sapi_name(), $server )); } -/* +/** * Reads the friendly_attrs array as defined in config.php and lower-cases all * the keys. Will return an empty array if the friendly_attrs array is not defined - * in config.php. + * in config.php. This is simply used so we can more easily lookup user-friendly + * attributes configured by the admin. */ function process_friendly_attr_table() { @@ -1142,8 +2591,14 @@ function process_friendly_attr_table() return $attrs_table; } -/* - * Returns true if the specified DN exists on the specified server, or false otherwise +/** + * Gets whether an entry exists based on its DN. If the entry exists, + * returns true. Otherwise returns false. + * + * @param int $server_id The ID of the server of interest + * @param string $dn The DN\of the entry of interest. + * + * @return bool */ function dn_exists( $server_id, $dn ) { @@ -1151,8 +2606,7 @@ function dn_exists( $server_id, $dn ) return false; $ds = pla_ldap_connect( $server_id ); - - if( ! $ds ) + if( pla_ldap_connection_is_error( $ds, false ) ) return false; $search_result = @ldap_read( $ds, $dn, 'objectClass=*', array('dn') ); @@ -1168,42 +2622,74 @@ function dn_exists( $server_id, $dn ) return false; } -/* - * Given a DN and server_id, this draws fetches the jpegPhoto binary data and echo's the - * HTML necesary to draw it. You can optionally have it draw the 'delete' button below - * each image. This function supports multiple jpegPhotos. +/** + * Draw the jpegPhoto image(s) for an entry wrapped in HTML. Many options are available to + * specify how the images are to be displayed. + * + * Usage Examples: + * + * draw_jpeg_photos( 0, "cn=Bob,ou=People,dc=example,dc=com", "jpegPhoto" true, false, "border: 1px; width: 150px" ); + * draw_jpeg_photos( 1, "cn=Fred,ou=People,dc=example,dc=com" ); + * + * + * @param int $server_id The ID of the server of interest. + * @param string $dn The DN of the entry that contains the jpeg attribute you want to draw. + * @param string $attr_name The name of the attribute containing the jpeg data (usually 'jpegPhoto'). + * @param bool $draw_delete_buttons If true, draws a button beneath the image titled 'Delete' allowing the user + * to delete the jpeg attribute by calling JavaScript function deleteAttribute() provided + * in the default modification template. + * @param bool $draw_bytes_and_size If true, draw text below the image indicating the byte size and dimensions. + * @param string $table_html_attrs Specifies optional CSS style attributes for the table tag. + * + * @return void */ -function draw_jpeg_photos( $server_id, $dn, $draw_delete_buttons=false ) +function draw_jpeg_photos( $server_id, $dn, $attr_name='jpegPhoto', $draw_delete_buttons=false, + $draw_bytes_and_size=true, $table_html_attrs='align="left"', $img_html_attrs='' ) { global $jpeg_temp_dir; global $jpeg_tmp_keep_time; global $lang; $conn = pla_ldap_connect( $server_id ); - $search_result = ldap_search( $conn, $dn, 'objectClass=*', array( 'jpegPhoto' ) ); + if( pla_ldap_connection_is_error( $conn, false ) ) + return; + $search_result = ldap_read( $conn, $dn, 'objectClass=*', array( $attr_name ) ); $entry = ldap_first_entry( $conn, $search_result ); - echo ""; +foreach( $all_attrs as $attr ) + $header_row .= ""; +$header_row .= "\n"; + +// begin drawing table +echo "
"; +echo "
"; +echo "
\n\n"; + echo "
\n\n"; // for each jpegPhoto in the entry, draw it (there may be only one, and that's okay) - $jpeg_data = ldap_get_values_len( $conn, $entry, "jpegphoto"); + $jpeg_data = @ldap_get_values_len( $conn, $entry, $attr_name ); + if( ! is_array( $jpeg_data ) ) { + echo "Could not fetch jpeg data from LDAP server for attribute " . htmlspecialchars( $attr_name ); + return; + } for( $i=0; $i<$jpeg_data['count']; $i++ ) { // ensures that the photo is written to the specified jpeg_temp_dir $jpeg_temp_dir = realpath($jpeg_temp_dir.'/'); + if( ! is_writable( $jpeg_temp_dir ) ) + pla_error( 'Please set $jpeg_temp_dir to a writable directory in the phpLDAPadmin config.php' ); $jpeg_filename = tempnam($jpeg_temp_dir.'/', 'pla'); - $outjpeg = fopen($jpeg_filename, "wb"); + $outjpeg = @fopen($jpeg_filename, "wb"); + if( ! $outjpeg ) + pla_error( 'Could not write to the $jpeg_temp_dir directory (' . $jpeg_temp_dir . '). Please verify that your web server can write files there.' ); fwrite($outjpeg, $jpeg_data[$i]); fclose ($outjpeg); $jpeg_data_size = filesize( $jpeg_filename ); - if( $jpeg_data_size < 6 ) { + if( $jpeg_data_size < 6 && $draw_delete_buttons ) { echo $lang['jpeg_contains_errors']; - echo ''. $lang['delete_photo'] .''; + echo ''. $lang['delete_photo'] .''; continue; } - $jpeg_dimensions = getimagesize ($jpeg_filename); - $width = $jpeg_dimensions[0]; - $height = $jpeg_dimensions[1]; + if( function_exists( 'getimagesize' ) ) { + $jpeg_dimensions = @getimagesize( $jpeg_filename ); + $width = $jpeg_dimensions[0]; + $height = $jpeg_dimensions[1]; + } else { + $width = 0; + $height = 0; + } if( $width > 300 ) { $scale_factor = 300 / $width; $img_width = 300; @@ -1212,15 +2698,17 @@ function draw_jpeg_photos( $server_id, $dn, $draw_delete_buttons=false ) $img_width = $width; $img_height = $height; } - echo "
\n"; - echo "" . number_format($jpeg_data_size) . " bytes. "; - echo "$width x $height pixels.
\n\n"; + if( $draw_bytes_and_size ) { + echo "" . number_format($jpeg_data_size) . " bytes. "; + echo "$width x $height pixels.
\n\n"; + } if( $draw_delete_buttons ) { ?> - Delete Photo + Delete Photo
\n\n"; @@ -1229,37 +2717,51 @@ function draw_jpeg_photos( $server_id, $dn, $draw_delete_buttons=false ) if( ! isset( $jpeg_tmp_keep_time ) ) $jpeg_tmp_keep_time = 120; + // If they set keep time to 0, we up it to 10 to allow the browser to fetch it before it is deleted. if( $jpeg_tmp_keep_time == 0 ) $jpeg_tmp_keep_time = 10; // delete old jpeg files. - $jpegtmp_wildcard = "pla.*"; + $jpegtmp_wildcard = "/^pla/"; $handle = opendir($jpeg_temp_dir); - while (($file = readdir($handle)) != false) - if (eregi($jpegtmp_wildcard, $file)) - { + while( ($file = readdir($handle) ) != false ) { + if( preg_match( $jpegtmp_wildcard, $file ) ) { $file = "$jpeg_temp_dir/$file"; - if ((time() - filemtime($file)) > $jpeg_tmp_keep_time) - unlink ( $file ); + if( (time() - filemtime($file) ) > $jpeg_tmp_keep_time ) + @unlink( $file ); } + } closedir($handle); - } -/* - * Returns the root DN of the specified server_id, or false if it - * can't find it (ie, the server won't give it to us). +/** + * Gets the root DN of the specified server_id, or false if it + * can't find it (ie, the server won't give it to us). This is + * used when the user leaves the $servers[$i]['base'] value empty + * to auto-determine the root DN. + * * Tested with OpenLDAP 2.0, Netscape iPlanet, and Novell eDirectory 8.7 (nldap.com) * Please report any and all bugs!! + * + * @param int $server_id The ID of the server whose root DN to fetch. + * @return mixed The root DN of the server on success (string) or false on error. */ -function try_to_get_root_dn( $server_id ) +function try_to_get_root_dn( $server_id, $ds = null ) { - if( ! have_auth_info( $server_id ) ) - return false; + if( is_null( $ds ) ) { + if( ! check_server_id( $server_id ) ) + return false; - $ds = pla_ldap_connect( $server_id ); - if( ! $ds ) - return false; + if( isset( $_SESSION[ "pla_root_dn_$server_id" ] ) ) + return $_SESSION[ "pla_root_dn_$server_id" ]; + + if( ! have_auth_info( $server_id ) ) + return false; + + $ds = pla_ldap_connect( $server_id ); + if ( pla_ldap_connection_is_error( $ds, false ) ) + return false; + } $r = @ldap_read( $ds, '', 'objectClass=*', array( 'namingContexts' ) ); if( ! $r ) @@ -1268,73 +2770,209 @@ function try_to_get_root_dn( $server_id ) $r = @ldap_get_entries( $ds, $r ); if( isset( $r[0]['namingcontexts'][0] ) ) { $root_dn = $r[0]['namingcontexts'][0]; + $_SESSION[ "pla_root_dn_$server_id" ] = $root_dn; return $root_dn; } else { return false; } } -/* - * Hashes a password and returns the hash based on the enc_type, which can be one of - * crypt, md5, md5crypt, sha, smd5, ssha, or clear. +/** + * Hashes a password and returns the hash based on the specified enc_type. + * + * @param string $password_clear The password to hash in clear text. + * @param string $enc_type Standard LDAP encryption type which must be one of + * crypt, md5, md5crypt, sha, smd5, ssha, or clear. + * @return string The hashed password. */ function password_hash( $password_clear, $enc_type ) { global $lang; - $enc_type = strtolower( $enc_type ); - switch( $enc_type ) - { - case 'crypt': - $new_value = '{crypt}' . crypt( $password_clear, random_salt(2) ); - break; - case 'md5': - $new_value = '{md5}' . base64_encode( pack( 'H*' , md5( $password_clear) ) ); - break; - case 'md5crypt': - if( ! defined( 'CRYPT_MD5' ) || 0 == CRYPT_MD5 ) - pla_error( $lang['install_not_support_blowfish'] ); - $new_value = '{crypt}' . crypt( $password_clear , '$1$' . random_salt(9) ); - break; - case 'blowfish': - if( ! defined( 'CRYPT_BLOWFISH' ) || 0 == CRYPT_BLOWFISH ) - pla_error( $lang['install_not_support_blowfish'] ); - $new_value = '{crypt}' . crypt( $password_clear , '$2$' . random_salt(13) ); - break; - case 'sha': - if( function_exists( 'mhash' ) ) { - $new_value = '{sha}' . base64_encode( mhash( MHASH_SHA1, $password_clear) ); - } else { - pla_error( $lang['install_no_mash'] ); - } - break; - case 'ssha': - if( function_exists( 'mhash' ) && function_exists( 'mhash_keygen_s2k' ) ) { - mt_srand( (double) microtime() * 1000000 ); - $salt = mhash_keygen_s2k( MHASH_SHA1, $password_clear, substr( pack( "h*", md5( mt_rand() ) ), 0, 8 ), 4 ); - $new_value = "{ssha}".base64_encode( mhash( MHASH_SHA1, $password_clear.$salt ).$salt ); - } else { - pla_error( $lang['install_no_mash'] ); - } - break; - case 'smd5': - if( function_exists( 'mhash' ) && function_exists( 'mhash_keygen_s2k' ) ) { - mt_srand( (double) microtime() * 1000000 ); - $salt = mhash_keygen_s2k( MHASH_MD5, $password_clear, substr( pack( "h*", md5( mt_rand() ) ), 0, 8 ), 4 ); - $new_value = "{smd5}".base64_encode( mhash( MHASH_SHA1, $password_clear.$salt ).$salt ); - } else { - pla_error( $lang['install_no_mash'] ); - } - break; - case 'clear': - default: - $new_value = $password_clear; + $enc_type = strtolower( $enc_type ); + switch( $enc_type ) + { + case 'crypt': + $new_value = '{CRYPT}' . crypt( $password_clear, random_salt(2) ); + break; + case 'md5': + $new_value = '{MD5}' . base64_encode( pack( 'H*' , md5( $password_clear) ) ); + break; + case 'md5crypt': + if( ! defined( 'CRYPT_MD5' ) || 0 == CRYPT_MD5 ) + pla_error( $lang['install_not_support_md5crypt'] ); + $new_value = '{CRYPT}' . crypt( $password_clear , '$1$' . random_salt(9) ); + break; + case 'blowfish': + if( ! defined( 'CRYPT_BLOWFISH' ) || 0 == CRYPT_BLOWFISH ) + pla_error( $lang['install_not_support_blowfish'] ); + $new_value = '{CRYPT}' . crypt( $password_clear , '$2$' . random_salt(13) ); + break; + case 'sha': + if( function_exists( 'mhash' ) ) { + $new_value = '{SHA}' . base64_encode( mhash( MHASH_SHA1, $password_clear) ); + } else { + pla_error( $lang['install_no_mash'] ); + } + break; + case 'ssha': + if( function_exists( 'mhash' ) && function_exists( 'mhash_keygen_s2k' ) ) { + mt_srand( (double) microtime() * 1000000 ); + $salt = mhash_keygen_s2k( MHASH_SHA1, $password_clear, substr( pack( "h*", md5( mt_rand() ) ), 0, 8 ), 4 ); + $new_value = "{SSHA}".base64_encode( mhash( MHASH_SHA1, $password_clear.$salt ).$salt ); + } else { + pla_error( $lang['install_no_mash'] ); + } + break; + case 'smd5': + if( function_exists( 'mhash' ) && function_exists( 'mhash_keygen_s2k' ) ) { + mt_srand( (double) microtime() * 1000000 ); + $salt = mhash_keygen_s2k( MHASH_MD5, $password_clear, substr( pack( "h*", md5( mt_rand() ) ), 0, 8 ), 4 ); + $new_value = "{SMD5}".base64_encode( mhash( MHASH_MD5, $password_clear.$salt ).$salt ); + } else { + pla_error( $lang['install_no_mash'] ); + } + break; + case 'clear': + default: + $new_value = $password_clear; } - return $new_value; } -/* - * Returns the version as a string as stored in the VERSION file. +/** + * Given a clear-text password and a hash, this function determines if the clear-text password + * is the password that was used to generate the hash. This is handy to verify a user's password + * when all that is given is the hash and a "guess". + * @param String $hash The hash. + * @param String $clear The password in clear text to test. + * @return Boolean True if the clear password matches the hash, and false otherwise. + */ +function password_check( $cryptedpassword, $plainpassword ) +{ + //echo "password_check( $cryptedpassword, $plainpassword )\n"; + if( preg_match( "/{([^}]+)}(.*)/", $cryptedpassword, $cypher ) ) { + $cryptedpassword = $cypher[2]; + $_cypher = strtolower($cypher[1]); + } else { + $_cypher = NULL; + } + + switch( $_cypher ) + { + // SSHA crypted passwords + case 'ssha': + $hash = base64_decode($cryptedpassword); + $salt = substr($hash, -4); + $new_hash = base64_encode( mhash( MHASH_SHA1, $plainpassword.$salt).$salt ); + if( strcmp( $cryptedpassword, $new_hash ) == 0 ) + return true; + else + return false; + break; + // Salted MD5 + case 'smd5': + $hash = base64_decode($cryptedpassword); + $salt = substr($hash, -4); + $new_hash = base64_encode( mhash( MHASH_MD5, $plainpassword.$salt).$salt ); + if( strcmp( $cryptedpassword, $new_hash ) == 0) + return true; + else + return false; + break; + // SHA crypted passwords + case 'sha': + if( 0 == strcasecmp( password_hash($plainpassword,'sha' ), "{SHA}".$cryptedpassword ) ) + return true; + else + return false; + break; + // MD5 cryped passwords + case 'md5': + if( 0 == strcasecmp( password_hash( $plainpassword,'md5' ), "{MD5}".$cryptedpassword ) ) + return true; + else + return false; + break; + // Crypt passwords + case 'crypt': + // Check if it's an crypted md5 + if( strstr( $cryptedpassword, '$1$' ) ) { + list(,$type,$salt,$hash) = explode('$',$cryptedpassword); + if( crypt( $plainpassword, '$1$' .$salt ) == $cryptedpassword ) + return true; + else + return false; + } + // Password is plain crypt + else { + if( crypt($plainpassword, $cryptedpassword ) == $cryptedpassword ) + return true; + else + return false; + } + break; + // No crypt is given assume plaintext passwords are used + default: + if( $plainpassword == $cryptedpassword ) + return true; + else + return false; + break; + } +} + +function get_enc_type( $user_password ) +{ + /* Capture the stuff in the { } to determine if this is crypt, md5, etc. */ + $enc_type = null; + if( preg_match( "/{([^}]+)}/", $user_password, $enc_type) ) + $enc_type = strtolower( $enc_type[1] ); + else + return null; + + /* handle crypt types */ + if( 0 == strcasecmp( $enc_type, 'crypt') ) { + $salt = null; + if( preg_match( "/{[^}]+}\\$(.)\\$/", $user_password, $salt) ) + $salt = $salt[1]; + else + $salt = null; + switch( $salt ) { + case '': // CRYPT_STD_DES + $enc_type = "crypt"; + break; + case '1': // CRYPT_MD5 + $enc_type = "md5crypt"; + break; + case '2': // CRYPT_BLOWFISH + $enc_type = "blowfish"; + break; + default: + $enc_type = "crypt"; + } + } + return $enc_type; +} + +/** + * Gets the default enc_type configured in config.php for the server indicated by $server_id; + * @param int $server_id The ID of the server of interest. + * @return String The enc_type, like 'sha', 'md5', 'ssha', 'md5crypt', for example. + */ +function get_default_hash( $server_id ) +{ + global $servers; + if( isset( $servers[$server_id]['default_hash'] ) ) + return $servers[$server_id]['default_hash']; + else + return null; +} + +/** + * Returns the phpLDAPadmin version currently running. The version + * is read from the file named VERSION. + * + * @return string The current version as read from the VERSION file. */ function pla_version() { @@ -1347,100 +2985,90 @@ function pla_version() return $version; } -function draw_chooser_link( $form_element ) +/** + * Draws an HTML browse button which, when clicked, pops up a DN chooser dialog. + * @param string $form_element The name of the form element to which this chooser + * dialog will publish the user's choice. The form element must be a member + * of a form with the "name" or "id" attribute set in the form tag, and the element + * must also define "name" or "id" for JavaScript to uniquely identify it. + * Example $form_element values may include "creation_form.container" or + * "edit_form.member_uid". See /templates/modification/default.php for example usage. + * @param bool $include_choose_text (optional) If true, the function draws the localized text "choose" to the right of the button. + */ +function draw_chooser_link( $form_element, $include_choose_text=true ) { global $lang; $href = "javascript:dnChooserPopup('$form_element');"; $title = $lang['chooser_link_tooltip']; - echo ""; - echo "". $lang['fbrowse'] ."\n"; -} - -function get_values($link_id,$entry_id,$attr){ - if( 0 == strcasecmp( $attr, 'jpegPhoto' ) ) { - $values = ldap_get_values_len($link_id,$entry_id,$attr); - } else { - $values = ldap_get_values($link_id,$entry_id,$attr); - unset($values['count']); - } - return $values; -} - -/* -function utf8_decode($str) -{ - global $code_page; - if( ! $code_page ) - $code_page = "ISO-8859-1"; - return iconv("UTF8", $code_page, $str); -} - -function utf8_encode($str) -{ - global $code_page; - if( ! $code_page ) - $code_page = "ISO-8859-1"; - return iconv( $code_page, "UTF8", $str); -} -*/ - -function get_code_page() -{ - global $code_page; - if( ! $code_page ) - $code_page = "ISO-8859-1"; - return $code_page; + echo ""; + if( $include_choose_text ) + echo "". $lang['fbrowse'] .""; + echo ""; } /** - * Convert the string to the configured codepage and replace HTML chars - * with their &-encoded equivelants, then echo to browser. - */ -function pla_echo( $str ) -{ - if( function_exists( "iconv" ) ) - $str = iconv( "UTF8", get_code_page(), $str ); - $str = htmlspecialchars( $str ); - echo $str; -} - -/* - * UTF-8 safe method for exploding a DN into its RDN parts. + * Explode a DN into an array of its RDN parts. This function is UTF-8 safe + * and replaces the buggy PHP ldap_explode_dn() which does not properly + * handle UTF-8 DNs and also causes segmentation faults with some inputs. + * + * @param string $dn The DN to explode. + * @param int $with_attriutes (optional) Whether to include attribute names (see http://php.net/ldap_explode_dn for details) + * + * @return array An array of RDN parts of this format: + * + * Array + * ( + * [0] => uid=ppratt + * [1] => ou=People + * [2] => dc=example + * [3] => dc=com + * ) + * */ function pla_explode_dn( $dn, $with_attributes=0 ) { - // This is a work-around for broken imeplementations of ldap_explode_dn() - // that ships with some versions of PHP. It has been known to seg-fault - // when passed the '<' and the '>' characters. - if( '4.2.2' != phpversion() ) - $dn = addcslashes( $dn, "<>" ); + // replace "\," with the hexadecimal value for safe split + $var = preg_replace("/\\\,/","\\\\\\\\2C",$dn); - $result = ldap_explode_dn( $dn, $with_attributes ); - - //translate hex code into ascii again - foreach( $result as $key => $value ) - $result[$key] = preg_replace("/\\\([0-9A-Fa-f]{2})/e", "''.chr(hexdec('\\1')).''", $value); - return $result; + // split the dn + $result = explode(",",$var); + + //translate hex code into ascii for display + foreach( $result as $key => $value ) + $result[$key] = preg_replace("/\\\([0-9A-Fa-f]{2})/e", "''.chr(hexdec('\\1')).''", $value); + + return $result; } -/* - * Convenience function for fetching project HREFs (like bugs) +/** + * Fetches the URL for the specified item. This is a convenience function for + * fetching project HREFs (like bugs) + * + * @param string $type One of "open_bugs", "add_bug", "donate", or "add_rfe" + * (rfe = request for enhancement) + * @return string The URL to the requested item. */ -function get_href( $type ) { +function get_href( $type ) +{ + /* We don't use SourceForge IDs any more $group_id = "61828"; $bug_atid = "498546"; $rfe_atid = "498549"; + */ switch( $type ) { - case 'open_bugs': return "http://sourceforge.net/tracker/?group_id=$group_id&atid=$bug_atid"; - case 'add_bug': return "http://sourceforge.net/tracker/?func=add&group_id=$group_id&atid=$bug_atid"; - case 'open_rfes': return "http://sourceforge.net/tracker/?atid=$rfe_atid&group_id=$group_id&func=browse"; - case 'add_rfe': return "http://sourceforge.net/tracker/?func=add&group_id=$group_id&atid=$rfe_atid"; + case 'open_bugs': return "http://www.phpldapadmin.com/bugs/"; + case 'add_bug': return "http://www.phpldapadmin.com/bugs/bug_report_page.php"; + case 'add_rfe': return get_href( 'add_bug' ); + case 'donate': return "donate.php"; + case 'help': return "help.php"; default: return null; } } -/* +/** * Returns the current time as a double (including micro-seconds). + * + * @return double The current time in seconds since the beginning of the UNIX epoch (Midnight Jan. 1, 1970) */ function utime () { @@ -1450,4 +3078,584 @@ function utime () return $sec + $usec; } +/** + * Converts an array to a query-string with the option to exclude certain variables + * from the returned query string. This is convenient if callers want to convert the + * current GET query string or POST array into a string and replace certain + * variables with their own. + * + * @param array $array The associate array to convert whose form is such that the keys are the + * names of the variables and the values are said variables' values like this: + * + * Array + * ( + * [server_id] = 0, + * [dn] = "dc=example,dc=com", + * [attr] = "sn" + * ) + * + * This will produce a string like this: "server_id=0&dn=dc=example,dc=com&attr=sn" + * @param array $exclude_vars (optional) An array of variables to exclude in the resulting string + * @param bool $url_encode_ampersands (optional) By default, this function encodes all ampersand-separators + * as & but callers may dislabe this by specifying false here. For example, URLs on HTML + * pages should encode the ampersands but URLs in header( "Location: http://example.com" ) should + * not be encoded. + * @return string The string created from the array. + */ +function array_to_query_string( $array, $exclude_vars=array(), $url_encode_ampersands=true ) +{ + if( ! is_array( $array ) ) + return ''; + if( ! $array ) + return ''; + $str = ''; + $i=0; + foreach( $array as $name => $val ) { + if( ! in_array( $name, $exclude_vars ) ) { + if( $i>0 ) + if( $url_encode_ampersands ) + $str .= '&'; + else + $str .= '&'; + $str .= urlencode( $name ) . '=' . urlencode( $val ); + $i++; + } + } + return $str; +} + +/** + * Gets whether the admin has configured phpLDAPadmin to show the "Create New" link in the tree viewer. + * If $servers[$server_id]['show_create'] is NOT set, then default to show the Create New item. + * If $servers[$server_id]['show_create'] IS set, then return the value (it should be true or false). + * + * @param int $server_id The ID of the server of interest + * @return bool True if the feature is enabled and false otherwise. + */ +function show_create_enabled( $server_id ) +{ + global $servers; + if( isset( $servers[$server_id]['show_create'] )) + return $servers[$server_id]['show_create']; + else + return true; +} + +/** + * Reverses a DN such that the top-level RDN is first and the bottom-level RDN is last + * For example: + * + * cn=Brigham,ou=People,dc=example,dc=com + * + * Becomes: + * + * dc=com,dc=example,ou=People,cn=Brigham + * + * This makes it possible to sort lists of DNs such that they are grouped by container. + * + * @param string $dn The DN to reverse + * + * @return string The reversed DN + * + * @see pla_compare_dns + */ +function pla_reverse_dn($dn) +{ + foreach (pla_explode_dn($dn) as $key => $branch) { + + // pla_expode_dn returns the array with an extra count attribute, we can ignore that. + if ( $key === "count" ) continue; + + if (isset($rev)) { + $rev = $branch.",".$rev; + } else { + $rev = $branch; + } + } + return $rev; +} + +/** + * Determins if the specified attribute is contained in the $unique_attrs list + * configured in config.php. + * @return Bool True if the specified attribute is in the $unique_attrs list and false + * otherwise. + */ +function is_unique_attr( $attr_name ) +{ + global $unique_attrs; + if( isset( $unique_attrs ) && is_array( $unique_attrs ) ) { + foreach( $unique_attrs as $attr ) + if( 0 === strcasecmp( $attr_name, $attr ) ) + return true; + } + return false; +} + +/* + * This function will check whether the value for an attribute being changed + * is already assigned to another DN. + * + * Inputs: + * - server_id + * - dn that is being changed + * - attribute being changed + * - new values for the attribute + * + * Returns the bad value, or null if all values are OK + */ +function checkUniqueAttr( $server_id, $dn, $attr_name, $new_value ) +{ + global $servers, $lang; + $server_name = $servers[ $server_id ][ 'name' ]; + + // Is this attribute in the unique_attrs list? + if ( is_unique_attr( $attr_name ) ) { + + // Search the tree and make sure that attribute doesnt already exist to somebody else. + + // Check see and use our alternate uid_dn and password if we have it. + $unique_attrs_dn = $servers[ $server_id ][ 'unique_attrs_dn' ]; + $unique_attrs_pass = $servers[ $server_id ][ 'unique_attrs_dn_pass' ]; + $need_to_unbind = false; + + if ( isset( $unique_attrs_dn ) && $unique_attrs_dn != '' && isset( $uniqe_attrs_pass ) ) + { + $con = @ldap_connect( $servers[$server_id]['host'], $servers[$server_id]['port'] ); + + @ldap_set_option( $con, LDAP_OPT_PROTOCOL_VERSION, 3 ); + + // Bind with the alternate ID. + $res = @ldap_bind( $con, $unuque_attrs_dn, $unique_attrs_pass ); + + if (! $res) pla_error( sprintf( $lang['unique_attrs_invalid_credential'] , $server_name ) ); + + $need_to_unbind = true; + + } else { + $con = pla_ldap_connect($server_id); + } + + // Should this be in a function? + $base_dn = $servers[ $server_id ][ 'base' ]; + if( ! $base_dn ) + $base_dn = try_to_get_root_dn( $server_id ); + + // Build our search filter to double check each attribute. + $searchfilter = "(|"; + foreach ($new_value as $val) { + $searchfilter .= "($attr_name=$val)"; + } + $searchfilter .= ")"; + + // Do we need a sanity check to just in case $new_value was null and hence the search string is bad? + + // Do the search + $search = @ldap_search( $con, $base_dn, $searchfilter, array('dn'), 0, 0, 0, LDAP_DEREF_ALWAYS); + $search = ldap_get_entries( $con, $search ); + + foreach ($search as $result) { + // Skip the count result and go to the array. + if (! is_array($result)) continue; + + // If one of the attributes is owned to somebody else, then we may as well die here. + if ($result['dn'] != $dn) { + return $val; + } + } + + if ( $need_to_unbind ) { + $res = @ldap_unbind( $con ); + } + + // If we get here, then it must be OK? + return; + + } else { + return; + } +} + +function sortAttrs($a,$b) { + global $friendly_attrs; + + $a = strtolower( (isset($friendly_attrs[ strtolower( $a ) ]) ? $friendly_attrs[ strtolower( $a ) ] : $a)); + $b = strtolower( (isset($friendly_attrs[ strtolower( $b ) ]) ? $friendly_attrs[ strtolower( $b ) ] : $b)); + return strcmp ($a, $b); +} + +function userIsMember($server_id,$user,$group) { + $group = get_object_attrs( $server_id, $group, $deref=LDAP_DEREF_NEVER ); + return (is_array($group) ? (in_array($user,$group['uniqueMember'])) : false); +} + +function arrayLower($array) { + foreach ($array as $key => $value) { + $newarray[$key] = strtolower($value); + } + return $newarray; +} + +/** + * Strips all slashes from the specified array in place (pass by ref). + * @param Array $array The array to strip slashes from, typically one of + * $_GET, $_POST, or $_COOKIE. + */ +function array_stripslashes(&$array) +{ + if( is_array( $array ) ) + while ( list( $key ) = each( $array ) ) + if ( is_array( $array[$key] ) && $key != $array ) + array_stripslashes( $array[$key] ); + else + $array[$key] = stripslashes( $array[$key] ); +} + +/** + * Gets a HTTP value via $_GET or $_POST + * + * @param string $val The HTTP value too look for + * @param any $default The default return value, if failed to get (default = false) + * @param bool $trim Trim a string value (default = true) + * @return string The HTTP value or the $default + */ +function http_get_value( $val, $default = false, $trim = true ) +{ + $result = $default; + if( array_key_exists( $val, $_GET ) ) + $result = $_GET[ $val ]; + elseif( array_key_exists( $val, $_POST ) ) + $result = $_POST[ $val ]; + if( ( $result !== $default ) && ( $trim === true ) && is_string( $result ) ) + $result = trim( $result ); + return $result; +} + +/** + * Gets the USER_AGENT string from the $_SERVER array, all in lower case in + * an E_NOTICE safe manner. + * @return String The user agent string as reported by the browser. + */ +function get_user_agent_string() +{ + if( isset( $_SERVER['HTTP_USER_AGENT'] ) ) + return strtolower( $_SERVER['HTTP_USER_AGENT'] ); + else + return false; +} + +/** + * Determines whether the browser's operating system is UNIX (or something like UNIX). + * @return boolean True if the brower's OS is UNIX, false otherwise. + */ +function is_browser_os_unix() +{ + $agent = get_user_agent_string(); + if( ! $agent ) + return false; + $unix_agent_strs = array( + 'sunos', + 'sunos 4', + 'sunos 5', + 'i86', + 'irix', + 'irix 5', + 'irix 6', + 'irix6', + 'hp-ux', + '09.', + '10.', + 'aix', + 'aix 1', + 'aix 2', + 'aix 3', + 'aix 4', + 'inux', + 'sco', + 'unix_sv', + 'unix_system_v', + 'ncr', + 'reliant', + 'dec', + 'osf1', + 'dec_alpha' , + 'alphaserver' , + 'ultrix' , + 'alphastation', + 'sinix', + 'freebsd', + 'bsd', + 'x11', + 'vax', + 'openvms' + ); + foreach( $unix_agent_strs as $agent_str ) + if( strpos( $agent, $agent_str ) !== false ) + return true; + return false; +} + +/** + * Determines whether the browser's operating system is Windows. + * @return boolean True if the brower's OS is Windows, false otherwise. + */ +function is_browser_os_windows() +{ + $agent = get_user_agent_string(); + if( ! $agent ) + return false; + $win_agent_strs = array( + 'win', + 'win95', + 'windows 95', + 'win16', + 'windows 3.1', + 'windows 16-bit', + 'windows', + 'win31', + 'win16', + 'winme', + 'win2k', + 'winxp', + 'win98', + 'windows 98', + 'win9x', + 'winnt', + 'windows nt', + 'win32', + 'win32', + '32bit' + ); + foreach( $win_agent_strs as $agent_str ) + if( strpos( $agent, $agent_str ) !== false ) + return true; + return false; +} + +/** + * Determines whether the browser's operating system is Macintosh. + * @return boolean True if the brower's OS is mac, false otherwise. + */ +function is_browser_os_mac() +{ + $agent = get_user_agent_string(); + if( ! $agent ) + return false; + $mac_agent_strs = array( + 'mac', + '68000', + 'ppc', + 'powerpc' + ); + foreach( $mac_agent_strs as $agent_str ) + if( strpos( $agent, $agent_str ) !== false ) + return true; + return false; +} + +/** + * Return posix group entries. + * @return Array An associative array of posix group entries with attributes as keys, and values as values. + * @param int $server_id The ID of the server to search. + * @param string $base_dn The base of the search. + */ +function get_posix_groups( $server_id , $base_dn = NULL ){ + global $servers; + if( is_null( $base_dn ) ) + $base_dn = isset( $servers[$server_id]['base'] ) ? $servers[$server_id]['base'] : try_to_get_root_dn( $server_id ); + + $results = pla_ldap_search( $server_id, "objectclass=posixGroup", $base_dn, array() ); + if( !$results ) + return array(); + else + return $results; +} + +function get_default_search_display() +{ + global $default_search_display; + if( ! isset( $default_search_display ) || is_null( $default_search_display ) ) + return 'list'; + elseif( 0 == strcasecmp( $default_search_display, 'list' ) ) + return 'list'; + elseif( 0 == strcasecmp( $default_search_display, 'table' ) ) + return 'table'; + else + pla_error( sprintf( $lang['bad_search_display'], htmlspecialchars( $default_search_display ) ) ); +} + + +/** + * Checks if a string exists in an array, ignoring case. + */ +function in_array_ignore_case( $needle, $haystack ) +{ + if( ! is_array( $haystack ) ) + return false; + if( ! is_string( $needle ) ) + return false; + foreach( $haystack as $element ) + if( is_string( $element ) && 0 == strcasecmp( $needle, $element ) ) + return true; + return false; +} + +/** + * String padding + * + * @param string input string + * @param integer length of the result + * @param string the filling string + * @param integer padding mode + * + * @return string the padded string + * + * @access public (taken from the phpMyAdmin source) + */ +function full_str_pad($input, $pad_length, $pad_string = '', $pad_type = 0) { + $str = ''; + $length = $pad_length - strlen($input); + if ($length > 0) { // str_repeat doesn't like negatives + if ($pad_type == STR_PAD_RIGHT) { // STR_PAD_RIGHT == 1 + $str = $input.str_repeat($pad_string, $length); + } elseif ($pad_type == STR_PAD_BOTH) { // STR_PAD_BOTH == 2 + $str = str_repeat($pad_string, floor($length/2)); + $str .= $input; + $str .= str_repeat($pad_string, ceil($length/2)); + } else { // defaults to STR_PAD_LEFT == 0 + $str = str_repeat($pad_string, $length).$input; + } + } else { // if $length is negative or zero we don't need to do anything + $str = $input; + } + return $str; +} + +/** + * Gets the user configured $blowfish_secret from config.php. + */ +function get_blowfish_secret() +{ + global $blowfish_secret; + if( isset( $blowfish_secret ) ) { + if( trim( $blowfish_secret ) == '' ) + return null; + else + return $blowfish_secret; + } else + return null; +} + +/** + * Encryption using blowfish algorithm + * + * @param string original data + * @param string the secret + * + * @return string the encrypted result + * + * @access public + * + * @author lem9 (taken from the phpMyAdmin source) + */ +function pla_blowfish_encrypt( $data, $secret=null ) +{ + include_once './blowfish.php'; + if( null === $secret ) { + $secret = get_blowfish_secret(); + if( null === $secret ) + pla_error( 'phpLDAPadmin cannot safely encrypt your sensitive information, because $blowfish_secret is not set in config.php. You need to edit config.php and set $blowfish_secret to some secret string now.' ); + } + $pma_cipher = new Horde_Cipher_blowfish; + $encrypt = ''; + for ($i=0; $iencryptBlock($block, $secret); + } + return base64_encode($encrypt); +} + +/** + * Decryption using blowfish algorithm + * + * @param string encrypted data + * @param string the secret + * + * @return string original data + * + * @access public + * + * @author lem9 (taken from the phpMyAdmin source) + */ +function pla_blowfish_decrypt( $encdata, $secret=null ) +{ + // This cache gives major speed up for stupid callers :) + static $cache = array(); + if( isset( $cache[$encdata] ) ) + return $cache[$encdata]; + + include_once './blowfish.php'; + if( null === $secret ) { + $secret = get_blowfish_secret(); + if( null === $secret ) + pla_error( 'phpLDAPadmin cannot safely decrypt your sensitive information, because $blowfish_secret is not set in config.php. You need to edit config.php and set $blowfish_secret to some secret string now.' ); + } + $pma_cipher = new Horde_Cipher_blowfish; + $decrypt = ''; + $data = base64_decode($encdata); + for ($i=0; $idecryptBlock(substr($data, $i, 8), $secret); + } + $return = trim($decrypt); + $cache[$encdata] = $return; + return $return; +} + +/** + * Gets the user configured $tree_display_format from config.php + */ +function get_tree_display_format() +{ + global $tree_display_format; + if( ! isset( $tree_display_format ) || '' == trim( $tree_display_format ) ) + $tree_display_format = "%rdn"; + return $tree_display_format; +} + +/** + * Gets a DN string using the user-configured tree_display_format string to format it. + */ +function draw_formatted_dn( $server_id, $dn ) +{ + $format = get_tree_display_format(); + preg_match_all( "/%[a-zA-Z_0-9]+/", $format, $tokens ); + $tokens = $tokens[0]; + foreach( $tokens as $token ) { + if( 0 == strcasecmp( $token, '%dn' ) ) + $format = str_replace( $token, pretty_print_dn( $dn ), $format ); + elseif( 0 == strcasecmp( $token, '%rdn' ) ) + $format = str_replace( $token, pretty_print_dn( get_rdn( $dn ) ), $format ); + elseif( 0 == strcasecmp( $token, '%rdnvalue' ) ) { + $rdn = get_rdn( $dn ); + $rdn_value = explode( '=', $rdn, 2 ); + $rdn_value = $rdn_value[1]; + $format = str_replace( $token, $rdn_value, $format ); + } else { + $attr_name = str_replace( '%', '', $token ); + $attr_values = get_object_attr( $server_id, $dn, $attr_name ); + if( null == $attr_values ) + $display = 'none'; + elseif( is_array( $attr_values ) ) + $display = htmlspecialchars( implode( ', ', $attr_values ) ); + else + $display = htmlspecialchars( $attr_values ); + $format = str_replace( $token, $display, $format ); + } + } + echo $format; +} + ?> diff --git a/generic_utils.js b/generic_utils.js new file mode 100644 index 0000000..2d554e6 --- /dev/null +++ b/generic_utils.js @@ -0,0 +1,21 @@ +function trim(inputString) { + // Removes leading and trailing spaces from the passed string. Also removes + // consecutive spaces and replaces it with one space. If something besides + // a string is passed in (null, custom object, etc.) then return the input. + if (typeof inputString != "string") { return inputString; } + var retValue = inputString; + var ch = retValue.substring(0, 1); + while (ch == " ") { // Check for spaces at the beginning of the string + retValue = retValue.substring(1, retValue.length); + ch = retValue.substring(0, 1); + } + ch = retValue.substring(retValue.length-1, retValue.length); + while (ch == " ") { // Check for spaces at the end of the string + retValue = retValue.substring(0, retValue.length-1); + ch = retValue.substring(retValue.length-1, retValue.length); + } + while (retValue.indexOf(" ") != -1) { // Note that there are two spaces in the string - look for multiple spaces within the string + retValue = retValue.substring(0, retValue.indexOf(" ")) + retValue.substring(retValue.indexOf(" ")+1, retValue.length); // Again, there are two spaces in each of the strings + } + return retValue; // Return the trimmed string back to the user +} diff --git a/header.php b/header.php index 6112da3..dee700e 100644 --- a/header.php +++ b/header.php @@ -1,7 +1,12 @@ -" lang="" dir="ltr"> phpLDAPadmin - - - - + + + + + + + + + diff --git a/help.php b/help.php new file mode 100644 index 0000000..9fdbae8 --- /dev/null +++ b/help.php @@ -0,0 +1,21 @@ + + + + +

Help

+
+
+

Do you have a problem or question?

+

Perhaps you are new to LDAP and need a little guidance?

+

Help is only one click away. Visit the online phpLDAPadmin support forum.

+
+

(Note that paying members will receive priority support, so buy your membership today.)

+
+ + + diff --git a/ie_png_work_around.js b/ie_png_work_around.js new file mode 100644 index 0000000..6024cef --- /dev/null +++ b/ie_png_work_around.js @@ -0,0 +1,29 @@ +function fixIEPNG( img ) +{ + img.style.filter = + "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + + img.src + "', enabled=true)"; + img.src="blank.gif"; +} + +function checkPNGs() +{ + // test to see if the browser is IE + var agent = navigator.userAgent.toLowerCase(); + var is_ie = (( agent.indexOf("msie") != -1 ) && + ( agent.indexOf("opera") == -1 )); + + // if IE, use DirectX to correctly display a PNG + if ( !is_ie ) return; + + // go through each image in the page and fix them + for ( var i = 0; i < document.images.length; i++ ) + { + // only if the image is a png + var img = document.images[ i ]; + if ( img.src.indexOf( "png" ) != -1 ) + fixIEPNG( img ); + } +} + +checkPNGs(); diff --git a/images/add.png b/images/add.png new file mode 100644 index 0000000000000000000000000000000000000000..7c04bad6a1f88c88918c37781b8d1378a054216b GIT binary patch literal 528 zcmV+r0`L8aP)ct=6WrA)4!Hdj;H&6Z};-QC94_&1uZPunWrtz?@GxW!N;e{6--Ve|B`SM6W z#Ns1y!I6L{ismyUNxBd+1+?4km|)vB-ENn3I=vKcDZFn9ypq za9x*PuSd07UFc%!U_2hj1k17rf`D?l{I83daHoJU3}b*op#Z?co!4w$&9j!a_|g)y zTt0(orMP+LI-0JMGIcVx$?mNhKqN0(&y{QIXu8UZn!qrU04TDItVpQ3%({Jfc?O1I zpePEJ8`BWk+O7cb?)fKDrhX1+G#b?F^%%hIcxbxH=MP^|WSOn)3Lp2s;17ljya2yH zItLVs#hDR~f4Eo~gFiuttekGm9}F4!A)|iCiPv9T79oV$Y&N~8yZhuf*N`Vk1*3@H zen`*hQ#-hKT9+j~i2&~3enIw9j-;V6I2rP@bIjh+UP)4pXFCHvZDpV>$L9qlRL?K1g)MO(yP2)ywlQecW|6H^0ZFb-8 zo9UseX#L+?2ZmvIGr#X|zB9k?_rd?YiDz8b1gr$!20j2BAP2k(c+U$eP19W4-rl~u zv9a-}ZQB{sH1m7+?)7_mdIHyV1JCpPiHV76$8pX+_mM)O(81>B=HkA6`-1c5&#Pjw zSW!v^T5Iijp6=`G)9G|t&&hG7^;DM_c( z2qCCcDtMk3D5aiCaVVKgZl9Z*JEfGW357x-fMhaxZ$W*1J?-u796EG}SS-f;{5-i_ z4k@Ju@=v|wEnBuM9yxNv)>+adLYZs?apAPQsHv zZLFGF28V{4J=a~me*JpGaU3x+GSXU8Q}bnOYb)2TUDNjfGMP-pb=}^9fq|*%>FIY8 ziGPLf!9+%C*g9k~c)A)Xw3uk)RSQqE?$PhpbSg6($ z_W>vau%(n|PMkOqcO0kAG)<(G4+K_9aqir?#jdWd8{^~SGaVfru|jrMhBQpf&0rcb zU(q@RgsZGPP=La=?H9x0@K7`wz1h^%l>PqLG51O;rElN9t&7E?zI5qQ(9qD30d`3# zx3smjy}RelZ9O~JC-kQJl{zeqf`GSxRX`)K45$Unf0w!i^hFFa*|DZA5?{H3O|NZM zLjwbgH+~*GDq;9`#rJbTx%A=A-TQw{T}f1wVrX^>L&)!Z6?_9^t8^8Cf_Q{}55Cd7 zZi6j^sPoI7p;VnMq;9h8Akf+?DRpO2E6?gothsvSm#AAVQC0z0=d)T0@rC+_s^5V* zARl^2s}YMEHmn=mzWMdd;X<)~axf(qGFgI3B_x%yOheX1q(I9MrJ#b+no6K(jV@DD zh5XCD4i@e!WokM-=+cs)ZH-ze-OY zD2eCrZdnDZ0qTHAHJ}Fs)$ghbP^ykf{Kp@K`zz6?&Se$oZr1>R126Y5vM0>T^Z)<= M07*qoM6N<$f{EdFd;kCd literal 0 HcmV?d00001 diff --git a/images/children.png b/images/children.png index e3495ebe5e51822e63a4b0be5df8106d835ba297..6fdc884244c2fc8853003865a8ca6e8e81b5750d 100644 GIT binary patch delta 333 zcmV-T0kZzK1J(i|iBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVUZyee*p_g zL_t(|+O1MOO9Md^oOgSt`6vE@RQ?z(1;N%Lg|%HsCxQ}Cu#JV48Vs_vUnG*Vx-LjO z6i+VMdwJ=C7k6({IOXij@OIuK{Dr^`S|&o9>aKr-ar%yYnnUXzCdCxT2WQqqYe2yU zP!Xb9fb{zV+1HPABx^uG3M>XJe+(Z28>y7Sst8;UA_5}v286EWXP7}jRc(lt*CPAv zJ=8Zgv8L8xn89Muxx82iM#&ql&tFQu-(R4^trqSdZjl!`jF?io&1~y{nmb3(k6kbu zgcMbpT_w_Kqm5zwjLc+}W*=m?xh+o z2M(>^Ukz+r#?C<9_cRf8RS|Y#VA4Pmr^62nGSc2DJqM;x*DDBPF>;orh5Z{3(R~-On8B%gB;y<&fIo+rzD*H5+yU!S|40A;7Tp1} znIfZjghsijZiig^l2>!_{_+Gr5~#Kp%dK2`q@n@LW=bXrVlhLt{g23_VF;)0rICLF YD2jYy$@QmV00000NkvXX1g=70f=IHk@&Et; diff --git a/images/countries/af.png b/images/countries/af.png new file mode 100644 index 0000000000000000000000000000000000000000..cda88b08594d89da861bd1773275d8bde166cc6b GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFzk22B@ngr8 zl$Aq5L$6%Dx?|@~hG+%`O9loD2G#^tfh++*Z$a4-Ss@Q0#Y#oVP)Yq3ebX*ei%v_6 z77M2-PDc4gZZqACa*Q0i9IdLXJ*RsH%n$IN>mM*XAbfFn@XX+#=|SQ1!lM^Q$1RRa zU6z`)HY;&nV(!{pc?J3Ti|2p-@%hEu7uRlIyLA21mmgnVym@iv!kKSBzePqxUbuKc zAcI#rN5Z<^Tp*5BK25-+P+mVwYlC=&Z0G`riT_Kc9sY2TvBaqX=-Gszi-bD12qv}TgB8s zoyiq$YkGnvR|jmLle2AZ{`Q3xS9bS3Jw1ER@}}dPdfwgKm>%c1Z{5Tv*AG0sb@afT z_}#P8b}cBY%nH1@f6A*%s~?uU9Pft%vOG`sTLs3ytR#sM8T3SLvf}fwCmzS4^hli7s zla-Z~nVA_Fo4`071w@8G`xHAlCQOcs``ORr9K zJ*#WEqmrdXHKoxhX3wLnRYBMM&h@3$I3*Q*a!{=EkMw$_$ruNIVK6?I)OVcW!w z3-@iGp1YuZ|L(@Vb#eh6GdFJ9r)aEbzh1+9`I=437&Sto-krK8B0P7-JgNC1foHGq zh^$(box|zb*>kqzwBKse(qwk7nLB)DS=nAOzoV|uy>;#4)#4ggEK}7EpE+c(zhlLd zrg!@|g&Uosj3v^1Kl9|}>uU17dYL}6=d3lu#7zd)C(m`v28DsAtDnm{r-UW|r0YS$ literal 0 HcmV?d00001 diff --git a/images/countries/al.png b/images/countries/al.png new file mode 100644 index 0000000000000000000000000000000000000000..5925b279c5a3aabb86b23c877b7197384bc4e780 GIT binary patch literal 1040 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFziMiB+{*fY zdImcq!x;vK6ATRV85rsr7|IwJVi*`C7#KD(GOl4{Jjcv@hM75pkD=$}6+^ME^*Fb-dhDM=;#3xhJ{aRW_bafBv=)>$LN zhZYuB%}g(un4C8@{%&V?*TSMwUfxYe=$DhzEi0?tMn(}563-nS9@yLcadUg+7SR^6DOx;HMLi6Zbz-H|NHvB^Ynb<;ql+!|DV7ADpS)L`uhI@0zUcp{0$8J6Auv!OH5Ao7=muk(&BHE9*yA*4xz76&@bj0|P_U)TDWN z%dM=o#Ki?@Yg;KQ>dDGVh=>RX2(YrUGBYy+BMumSqkxhSXyGpS1k}%%;hk_iPq8xK=m)2$7IrPcx8Dr;82SwNI zvzC2x3srP1jaHw(V@}0_38{?Uo~{2=!lrXxY@PTrbD@LcvuQ=~!m9H;g?~$R1sN;v zX>dAwRgtYIMkw~L=GLz}4Sm)*EZoHs9BCK#^1;1Tn;!jeD0g2Fuy1P@!|o}5>E&ha zVJo&biw2xFiL~FTplp2V^vz>D8cWnq9@Af(D>rY7^y8OV`H4Metr_lr)@#|J RcGd|LES|1@F6*2UngEvD2oV4P literal 0 HcmV?d00001 diff --git a/images/countries/am.png b/images/countries/am.png new file mode 100644 index 0000000000000000000000000000000000000000..45cd7495779aecb815fb80f7494da52acfa230ae GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFKgh^?fRXnE zm)K!mi54!QOA;#Q)Q#?Io2}9^dTZzT)i?Z!XYeDBppSvk4~JAG`(GeeWvpzF0oMC1@$I5zvmGulK z=UHCfYXSl{BqT1$%05(7d?K%KRbT&|sp%&JgHsk356w)knwVU2a{A@w_Q%ojnUm8~ zYpdgKZm<0P{|5y8^Yi-_5b!fR{99byue8+fSy}(jR4|_@W4}s1%KNZaBZg7=k?*AH^seJ9dn>q;An-|ks5{N z+4B4A^{!5|`nAU6)gq5qOT7PY3H`Y-^u@}EGYky%3=HR(nL)l~Wj)Kud5xF%hJe5& z35h9!f)8b7pC~F`k(ZwX#eGjr{SWl#|Np?q9R>J9V0T)|DxeC+ByV>Yh7ML)4Fb0^Pk zpD(VVqPTvAf~J;^ijtb1s*w#Cw`NF6&W^rm zRsE~N;udo&&)2J=Q>TVpG1*ee`=w-yNu!f$?1CGltyREt6IOkx%-WLJ8p9k!C6tw$k-2SHt2cKsgeHFd<(5eF`SM5J>?fE;V z#!Z6#2ZTDdiFIvPm~&cw!XB-K=hgbR>&!T0IDMab`831HI}Ijo)9+qyyYa61{NpCm z_nJ-J>A3Qu-GXCIE6!U_+TynCwBPpoLHl3$ZoJ{Q>1NQjJHgxUMjUt^zWYJ=&ig)# z4u|i!n|AO?*74VQC*KsEep7hz_5MpY7i`$JdiTMt$Ie`P@&4$wJC`57yz%Vy%kO_4 ze)xLp`RnIjeq4Y2{MEN#3)ieacKrCJ&6}@Wy>j*Hl^e$nJimVF+tY`4T~y9Gsyq(0 z_?aL4z99U;*^`H57!D}29#iKys=|3do%6Vf#1<>H_i;|&;@z%CIDEr%#{W zy?gic>C-1qo;-Z`@WzcB*REZ=bm`KC3m49vJ9qZ%*)wO(oH}*t`0?ZW_wV1cXV324 zyEkmuuzdOQxpU`EnKGrmz8)Blz}OrGB!xiVtLTS74U9?N?k)@+tg;?J&VEl9$B>F! z$q5IT($35fI~ox*Ve-V-+ZV6J#Ip;{vfH^*(N0s_cJqq8OB*)|Y8(-iloLD>6Bst@ zw1|X|j2M^5rQ(kTqCwBa#GYI<+EiGwfr%?}mvyHHN5Lzp&sNo*kbsO;IYHV4Jj{4!P7Yo}Jdk`nvRU>`5PAfP%t zKE6CAsj|+?Df@bhXK;g);oe%?xtS*`TUQ?4_*Z!G@}$pv3@>&Ydatr-NB{+dr>mdK II;Vst07svX+W-In literal 0 HcmV?d00001 diff --git a/images/countries/ao.png b/images/countries/ao.png new file mode 100644 index 0000000000000000000000000000000000000000..9463d243050a0294dd54f0ad4c8c76bedd92734a GIT binary patch literal 1041 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzF-)Ck0KRv_V z)J#cPSzAX(UO}Fnn^9PdOG%Y6EZjFEM>``&qN&v`Cs%FiG%q0`hWdK;hzOCcE~`ls zolHy=Jv~js!kki4{6s_qtgKAK!vnp&-GYMyjEoEo4D{{o?K)eS>&o@du4jnx;T7R$ zxH6aPOee$prKT_1)ovGvoDF3>CcfhliV+o0F51m6er+g@uWUiLtS<0Wj?J_4V}h zbai#Lw6rudG}P7A)zs7!6%}P=Wu>L1B_t$-goJo`c{w>bSy@?`nVEr635?KDKzsuTLLtvgTe~DWM4f@aPG5 literal 0 HcmV?d00001 diff --git a/images/countries/ar.png b/images/countries/ar.png new file mode 100644 index 0000000000000000000000000000000000000000..bd7338260065431f8d086d8035843360ee82791f GIT binary patch literal 1043 zcmeH^`%6=C7{-rERF;*cKNwk*WZ4BPMH94iDs$y!%8ZP>bklC$qO>4#CfyiTm=H#@ zrJEXU(=9X2VjR(0;1OKNG{ASa)DoN**+e; zzhU@5(`c|jagYZNw- z73^?UBVB5Wu9Yx=<@n1F>4T<(Cg~YqVRU2Ex83wsG)0Ug3&1(KJw*Ug__B-R&Ws-H z1gA5+l$G9wGQ?w<1BT3geXhcORprd=p3K(}`5OERYCZK{dR<}5l^M^7M{>F}H?+hJ zEnYlsD}d)NNtCzM_7a7)aA+ojExxB-&Z_Sy)2tNtY4ZgAk1(P_y;S&Vgry_Ok@*VL zbXPj{REJk$jw+ptrLt72%q(QKM(;BJUYa({B#Pj~7LY0$R%x|kC<;bKCZ?wB4hJfi z0~l6n)a{+kUk4<7;S0?~pY;2u){ljaJYQznb{_ZOo7yx0WCp`e0EQk^tmf37(qXFE z8U4!gGLGX;r_*k?+iW(g)oQU=j7Fngug5S9K@b>*0r@GDk!_Nl{-1wLAhOD_kvw%f zf07ypJznLXKteAqE{1VieIcjEoy%KtZ4U7N=);|6+yqgvOiJC=s&rG@%)5YY_Bj}H7ijmgYd;uGtc;Rpa zCb2j87}=v)5%u-&-|_O?b^Sq!ADEQ0*XOsrPWP%@(jM^TM~2)fr$m^`OTvUPsWiU~ z)$HI}QS{Dr=``=P@m?2J@5nB_77`G}c`mG~=8N0jQHw4!SzmZh+`<+i2!Rhh3lwds P`x^o+J~>WE$+`arQpLFE literal 0 HcmV?d00001 diff --git a/images/countries/at.png b/images/countries/at.png new file mode 100644 index 0000000000000000000000000000000000000000..2a58c49b1ed44161fdd633e81adb53af479bc081 GIT binary patch literal 1041 zcmeHE>rYZ~0R7n=EiIPzNfReh?N_9Lr^2QKJrn`T4kZJK2%$-r@2+yTDfYu z`JrsHTxC|PS!v~q?ghjv7mAq=P!thOOx|8ByZsA&?ri6roe$^BIdzCsOb^)@0sx@r zWDD~t-#~HQ8i>*oE%O!t5I`h_SyWtES;4o&YL#CsBcsg^n@Eor)o6Sqx#)JAEtV0J z$zU|<42D6y9w&$aolY|_pz80(G@8J#U*z(#$LDif=<`b>4wly zJUo0LJiIsci%gkcwH%F2(l=ZdJv>tAZSZZcNG;4?U6W( zi@U|5h0;<_Sy{hSN*+Brd+^{)S=q?G(j~dvRbK9s%LA2_4!PWa@}xtduqqV(swyLn zW8K|oSJx0hd^Z?0N~OB5Pu1It_4F*cTz;o>!ESfV%*@+tqei0v$JI(D>G8~3tuvF8 z*75Pr9UWe$^BY0vv|8#x>c{{1hXuAfTb@$2pu@YxLQqR%W>cXnN0?byHGJey_bLu& zenZl!8j1VsnVZRMEmN>VbOHkM2y3O9~I<7X>FM zd9U9+ezEsM#hu)hd%*>PIOyuLHxPq4T65Qx`#foP$f<4B@RcXzYzJCo%6nR|_0gpV tcn0ePv^ROz>4sNIw?Fi9)Ym zjG1S=12*Yd)+uW2GO;T+u{@Pour)M!!{ikaRssF#-ILP$&uuwV>{vdtdfxeMw~A8Q zHY`05=h1d(%k70zcSQu}v{f8TiE9gXpV8NLC?{oEan7pwGcSp7*6XPB73Ci2XgRrS z=P^O{!3J*`7aD|7vO+=_uRHR>CZi1r1G*y+^`g&8{-Bvp}&JXb4Z(dRds^Ae3_2UVgrNa`UZ;( z4VN1lE>l&lRa37wHC?Tx)ox+A*2rj%wsxzP)p`SiUVDeFCZQw zkB>hT9I`kg<9K?;k=)!9r%s*b5$IA<>$b6*6`y$6*k$$W(xM}Nejiejf260c^Y@$L z?e(I%dUtmA^WGj{%mU+g6yOPgl?gUVKxxJ#Z+91l4pvzYAm^Z`i(^Q|t>lCQOckn2 zmv?jD@Vi=8aBaHonf2^kh3Dp-K4aA19ewtmcEHUgn;12Y*kzwPletDFr)ynZ;>o2^ zS`LbWat|dJIVDZLQ=_!`)GL$R2B#XSARnWHf0}kZ*F=W~#7gVW8bqE)u@ z7&}$Zn$8uPwlUCQp@O)qbNv4qOq;)TDZSqELLlcJBg4;yMv^i1*EWJY?&<31vd$@? F2>_&xHE{p{ literal 0 HcmV?d00001 diff --git a/images/countries/aw.png b/images/countries/aw.png new file mode 100644 index 0000000000000000000000000000000000000000..411977eb78646383292f19ff9cbb0af162fc77f6 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFU*+ihtFifc zcYkM0d|g1;-uWv}uHTy&o4NbQwXLTfdBo&RShh1|!O4szXR;Qb&R=yod&#M~?e{A; zTDl$(-e9vzMOAT5>XL@v*|y7xPw}E?j+~eB<@94Ofd+o-N;awPxGxvNh)` z)?KXIcB^vT`IbEoTlYR}+xM{d=!^biFQ=Y)Km9Dw#*1?^HE-+iog{mwOaUMxI!bM?)qTkpRtUb&@c#pc>gdo%l{)hu1tx^8>zk~Is@ zUfcNK)!JK+OIL30+%O9y3uc|Y-n-+#ikpunY_C{$a#H)otnRIOU7K^K?yFdI zs;z!bcGrrMO*f`Z*<3q!Z`=MSOV^#BcI5f0z4w<++~PNBi~qEpAv1SIEj*I2{$fGj zinvuL3TJFi+jqZl(cb)xXKPNq>^uEx(&76(hwk<5HZpn{8TqTQ5E!|@C>{m4LLh>< z?FUefG0EHAg`tC0)&s~n=;`7ZQgJIe;Q-U2MUj<@pUC*Mgk1fqb0l_8qmxZeapVrA zvs*+$N_^MK)-pFZ&GGsCY_t1|6)Ur(BX3r-RWi07YMyDC#4}~836E~>-M@eCHaN*G zymRi@tgctTo|*aCHLfdjP^`QuAjoJ}=a?AinJKBsX}BPuEXFITCdVnLD9bG@Evkw! zAmiK=&f2|yh1Gp$TV{Xjc^RzE-1;g@`nB||S+}irSMRdA6&>B+B$~R@vhr!Dsp`_B hS6f}D{=Bh=nZfP8;h%^g_xB)Qd%F6$taD0e0sv9vu517R literal 0 HcmV?d00001 diff --git a/images/countries/az.png b/images/countries/az.png new file mode 100644 index 0000000000000000000000000000000000000000..ced5af010f8fbd23e0dbe18e5b6513cab8c0823b GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzF|Mm5oq2)eX z=bh4O8UDCP;1;kTz<-{<-)z5tIRR#MrhcuKwgrj_UG^Fw4BBBVLB%EolLIXhgk6%= zgUSuOvvuQ}>~kmh>W8xDP4p_B68P!>dj@gJ`c9lKr zp>*C`{alE_y(GI`K_$cl!ly2 z^LbYl|FtFkb7$_asa5Coc@J32o$}J3?V$4{-TOw0_oY;y_azZeiX#ukdp|CVJ&_Ug zsk`Leo=pccqYw3U0Am&yzoP(82+TCjaso;-CV9KNFm$lWdH^{GJY5_^DsCkw9AI*B z5i$8vI%Vn6)}u?FOu4ef!O3V<)vi~cgbpp5w5dyL)-4A`K0QW9JFzmwFtaqjJh{5K z1s9e?Zcg8JeujDZp(C1;mzVm_=MvFcyZ-D+A3vXy8J-zB>vT@CbAA0LlDc$z+1Kr7 z6JNd7d4GbL>uPA~@}*`frc*=BuZM_;Jz;7+q;%N1DVdqM>CvO)Mb3+r8l2XNsj(e< z7Um~+Z{NJUb9~zz6tjb!m5sft%jNC$>&4xzrE~5vG6e8wmBtC$?QB-*uJi~b3KDzIfGsqgNzrW zemS#2C9^>Vt5G$pQ6;-c4X0@}uT>+jMJ+lQ%(94^WfnQfDSMrL(p>la4UTCGozoUtNA`H;uJXuT?wB+!pnQ8k*;dDd zNdaY>eGAtFm2YuNn;B5D)+x3lu3<+?+un@M{b_Bxvbqn%l+LT1cBFpx$?B;G8|R$p zTXk#t`m2*xo^7ACW8v0odrvET86edVAcZed!0*#hu=nesN#+nRyIn<};jK zz<6dM>)Az|*H-f0SS@gSy~w>y5|>s=Jlrb#`hfPQ6Q*BJTRq%s@#B)+pDS+vZ}@+@ z;Pd-N;PlCQOfz_de;U1B=Jz6N{_W^F>F?P@gaSWzbD!3F`EJH#B(2gT(NDzyFh4^FxC=;Y<>C|TVGC&zz$ zQg5OZ@2q?(YMd3F#LV$aZnci3n?rkL`|*Y%D37CnV@CB^jis5Nc*xWNlU8?^l(Pz921i zZh(JfRAg&He0OHXWCjL51_oaS215o017_wxX667^)&NeMY3TrU^(;ljaDDwsMa2*`wO9>}1XI&m1A_uBtt4IDG(Eix1A}Y> zgDfqrSQC>%3yVq3dr-LO#W;Tek` z51l^WbxVqrDa=s(_uT*CdAENr0=_>C`1~N?&MD8+yIi^(^q*f1e0MwK)%B>UT~>~^ zvhk7H6}j5Lm<7h~D8Lf}KL6jh0;L&~yxmm%N1H4AFrC0`OPtL zK6C0!fVjqzl^VLo@87y;ocJlkuXr*`Zq7YM2G2;tTc=MvD*}1k)78&qol`;+0GNj! AE&u=k literal 0 HcmV?d00001 diff --git a/images/countries/bd.png b/images/countries/bd.png new file mode 100644 index 0000000000000000000000000000000000000000..56bba0b9d316e9039dfb2e07efadf45753e0bb8c GIT binary patch literal 1040 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFm-kXoa#Ggz z)v=1SX3%F~&}CqdVPH03X4YqBHDYBoWaTvB(@FZ1`z^$aKv@G121EA|U44-6;`a7%LwCdG<*(>Dq+G>bH~Pqwp9vU5yzNNY`XNptkh^^kRtFbvb?)o10@VerXxlC>6y zF7}Ve_mMZ}&Cm6V@zHlsWXv{~?+mia)ssk(=ggL3UYZivWvM>TKyivF`=MaBB`OkU zqXSMv`QMEQT*u0=RDkogmFX)lw=)b3#~B%pF)*BEWIV&jc#4_%1T*s)R@PIjtY_HS zuW)f)03u%AbG*El1q99u3EdVExh^7dQ$pgltn7V7#TRO7PqnpQ>g#_pHT`U5_1Vtu zmy^>!FR%Z;zQFhb#@Z;LN(gM5Wg!bRh%w3A-G!lpRn`N@+2`rv7*cU7IpF}4g@sDQ z-dGc-!#8)Z9u?uub#zktHE-R)PS&3*H!j+=>slW$eUz5>Px#XIY16GY2D!!T(hDZc znLItYCfL=}*V}#4#^zXtfD@N)yPED?wPn}Fz1F9%-E-mA5P2eYVoFd<4pRC%$i@82s^W~gqgWM_CaS109$KhGsl_;|YdxvXg;S04x$F<&kGJXHm>f0Z; zOV^!`onbh2hT-^G#$#s~Pn=^ueUACm8RnB`ShwzCJ$;e=_*u?#SGX=-;o7p3bLT#; z3)grr-4M8TTjb_#ksJ3U&R>$a{ZRJ)6U9qc(_t( zU;hHW{tS5fBJ%7xULGFC$4?aBz0-gA&_YCnOG1KISy|H3(x9j)%fLY2(b3_=A+FQM z1TUYHxpPD7`6G)DuiYNq^ZfQP;O)zxFYiMSn#i57*ShR$aW~rSV35PJ^x%u}zAy8l z?q-HR&5xa?t1{16Yk{fGa!dV{)`qwJ9M{+yud_GZ=xDaZ$zrFQ^>!DleV%r^-E9we zIXsH;JL>Q9JU-}jh{uI+pDWP;FH$0I#s$Afi+Y_A^B^VSZc_O3^q8mVF;CK>&sykR zbG6>?X!Ri2bDx{t=|GR?@u4?kf?uRWKTeKHOHIwn%1TX5O-V_Ki;Ihlj0_JC4+seG z@bGYRbF;9pFfuaI($Z2_S65V2l$4Z|kdP1(5)u>?vS)L*q#TX?b1KQ0+d*ma zuGtnYrJ_fc#QZ&d`LlPUQgBt&?3=8*DykxPnY4<%KQ%bj&OP&%?~l=)Pp{rJnjUqH zbWmJ&Y@1$nYGItIZ2yB@hu(-R2ypH;?$+(!vT9pndPc2Zlu^Knor}wjmd}~AY~RB2 zid?rKn}8K}Gar?Bi}EriCg0!i>Pkz-f`IESnLIHyVNOcR>=Z*g4JSG%Zd=K7`R$iA ly*_95G-*9rq_m-ujbV9{zSx@m&3T}Z@O1TaS?83{1OV&nJD&gm literal 0 HcmV?d00001 diff --git a/images/countries/bf.png b/images/countries/bf.png new file mode 100644 index 0000000000000000000000000000000000000000..1019379aaaf013a54b573b5a5e46d6c370bd8de3 GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzF|C^q{5XHb4 z!^j-N%pA?k8pp~S%gUa>&Kb|io65_Z%qx%~Ae1U3k}V>UB_UfZt5~imUm!0XA+1)a zre3D5l%%W}uc+Uwua>T+k*Q(YVXB?4qm`|tTcE2~q-RiKU^m&$s>{l_!q}qO!lcT? zX|j`5la<>vH>WNqubE!Hb9~+U+&m|HdQ9~2pX2W{)hA$1fZq(iz`20|vjPHU1f;A? z;YsH*sL?knH#Dm;wQsdEYSGrtR^SU^5R7CNi{i8@FmR|a^Xql;X>$nda*LkfA3ZG~ zV_sbT;#93F3CA}5%H_QC4#-}aFL1P;^@6?PHZg`X((EUB8Fuin?w6OiXJvZ9&f>6@ z$tz#CD;`ce?XBO22Rse&dm0=5AwTOl14AtXLk$DN2}Z`_jEtw4nNKh?pJrt}0Ysdf z=eW2o@baGIoPc6MK#oOT!)J+Qa?;pXMDB|LEiMCm`TYVBq(_z;6Kom)+bx1O$8v5C0k$_cSu{M@q`))YRWuS-=Pd zM(ZdbCIn{gm3;$L$C%{p?!wT)D(eB{9Po5;45_%4oN$0?(j@I&Y5v(-=X}nb&|jTD zpFzY+FLSQx-o-ZBhPKPMY+IUd6ri!b@YtDqtL|Kx@@CPiXYV|19Tv{g^a*~=b;+rT zTU**n{o8iN)+C`v%7>hqnf@>zUYzuJk#eI`+`M&Vec$-@)!FI2lgm5j=b%_zYbYls z#+@InDl2Tus~x#u!c0|pX=C;MD>iNGT-e*SMUvFQtr-?)7}%`2B)t<90G_UXF6*2UngIG<3-|y4 literal 0 HcmV?d00001 diff --git a/images/countries/bg.png b/images/countries/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..0f64f7db4033db1c49b5379dd3cf5495560e9725 GIT binary patch literal 1041 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFKX&~1$#W-; zoIL#Q^V{>6&pmwlVD-9HUw?eDX;L_J{J`N82OmDWub9uEn9ZPE$gG;rs+z~DQOv1Z z$!kz4U{)nz(=O}Sq3AbVKX`_zXNy7bL<|2OvxH?%(X$+4W;i9xa|>*-&R*xAvnC*W zbwK7azk=1_<(uMax1=`h$Z~8^u+P!-Yd1+*=9aS9HF>5-@%qq;P0?x7{IA@&^zGM| z&)+{jd-deWi$|^PE&9bgh9&%_6~eYPvO$v!!zWl4tqdz&71_0?KtG+)wMN3fK|QQn z+qYaNW42vfmsRO9-`rUqZ5vVyG8irLxh(T|LmLe9=Xh2u4?MulaDbQjs37|h8KLuX zB6kebHt4Bcve4gcs{6{>>X^0hHFvwu!Co&yeLhD8zK9ICVrhDYiQzO0!x?tw3+$|C zI9N~fa$XVSy&)`cNm}B*qU;l8#mma_%VecDC@H=**59b6yhlspley_$9j)UAdMAwy z9$HykGBf$<=JdzY?Wv2?OHa3dLH_@O0=@gab@z=jNO{a^s?P z;j1g2wYGD0&nhgGynHKqx4O?vtDXC|ub#S*S0m-*!E>1hj~zODIOovmtgJLXkxPbU zMO(IS-L~oCw#()wMFtF9nwcw4cW{2>?(*_@xpIZ(3#L{R(Fb=F y8(Qh97@%QqY^tlheZ{VQEA@6RTC;;;b~(ekD#OxQ!7D)iV(@hJb6Mw<&;$VS5?F-* literal 0 HcmV?d00001 diff --git a/images/countries/bh.png b/images/countries/bh.png new file mode 100644 index 0000000000000000000000000000000000000000..236693dc1b92deb2e29a708a50747a1b9dd8b7d0 GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFzhG*1*V5|9 z;Uk?LolBN1{q_6L$IqXiK7an`$&*uO&Ky5^^754{7cO4hv2*9F*|U!`FdS!OIKjwx zoRRSaGxG@+mSZd|r&(D~v9g|EWj)5qdWN0-1SjV?F0OMtJQsL*FAE5qm`R3&G)ye6qmDOcy>mP1z-`(8q*xTK;8#GvJ0G8qettg!1HT6behmot5)kk$Fz~Xk?-_spEpt_io&{ap}^fvuDqqIB{a#x^)vK zOsK7`t*NO2Mh!56Mgi?YAdpWf8fZFWlDE4HLkFv@2avPX)5S5Q;#P9P0VXRe)>WT^ zXI@>(qAIdgr&h_)>FuAVtS^6UYFfl4b!?vCM+e1gX6H7|QBf64veP9=w@m2SG|xF8XN!D5$I@AgEzDhGf&y=!GS^bOz^V}vd^~hgqTaFvoF*EIQ%-Vf zgxo$5Juy>ZJ(G!s;hEDH*)&4#ABmkYcMY4_iThX2iD+E8aVU7ov$f2IC$1gh(71Bv pR@5xfglB?s@^5nTa~E}=wPx58to=%@Ro@L1R-UeYF6*2Ung9Y_KuiDt literal 0 HcmV?d00001 diff --git a/images/countries/bi.png b/images/countries/bi.png new file mode 100644 index 0000000000000000000000000000000000000000..7fa236af37a1686488bcdc52cc6485d928cf0daf GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFzjWZ>_c!m} zJ$icP^qI>yZrr$i`{bE3kDol*w0ZNTt5;56ICt>Okq)`K0m$t=9WQ) zf>*c2`h%-%8q`yk1YCG_a@N8b*7;g~-BxKU0y0(xrY{dnTO3fcC8Ka|(u4Q6ZHm>L ziVU(>2j(sdtC*KLX-9L-x2sC(rjRSRPrtByRGNx+#Yn z>K5hiys=u|m&+nU(XB?uyU8G+!z8H7EPAS4{7k3dR_o-sZprgJGMD;fFZYX|% z#fSgPN_=0O^{^o8cT?4w%;ZNEMQ6*4e$JYDaYE1Kg9rY-e|LtR;fx5+HBtU|=K2rq zES`HfKXG@u;A;OZ$nTV!!_V-5V_`vO%8U1Rw0+#M?eFQ6_qJ@hv31KCHr8tbyf=ge zZion6l90G+VfxF>>3@*_|E#RJ#YJb({TZU%!6(^y$r;H?Lp6 ze(~bP`Sa(`o;`c!%$eiIkMG{SyS~027_Gp_9R>J9p!9@i22cfKlDE4HLkFv@2at2n z)5S5Q;#P9P0j4d_zg_#bWNPUa5!EfBCO#odTrYo|Nj#_RfA*}O*2$EaDbLtMjHX`_ zm~%@;S~T{8iSG%Qa|{|O4;L+XX5Fl;GpBafv{h>+>js>-cRExh;hK(|**VR7M(4_| zIVk#<*C!tRw`0PO84AgT?9$o`CbTb}VOL+^l8~V?zh&W;`KkdPao49zH?2SPq|<)t`~bIedc3$aM0+I Sh!|%l$nT!6elF{r5}E)3J%dgF literal 0 HcmV?d00001 diff --git a/images/countries/bj.png b/images/countries/bj.png new file mode 100644 index 0000000000000000000000000000000000000000..290016a5149d8bac81237a7440ae4be67b898fdc GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFx2m*eh-YAk zVqmajV6b3dOk`w?Vq}hCW{zfNjbmkvWo3gJ{7046da^@0B6%tAi zlE{(}^cIw@kd-fxm(N#_43ShXRaY-iSBz2AO4G7vwyS_Y<0A*u=beX5ildb zt<^1HdO-Nx@bH=8af{+2XGEqfPsv!7k-9WBYfVMVmAeS>O!$4-Z|WvQ+W%)TwW z(f#rT3oV>08BU*NID3Kp+D(y1&(z+3wz_lQ?&n{xcOQLz{0Tg9oZVb-1#aAsxO73{&TZKT4-}t1(|-9<|Lt4T&!6qS zes%is!|m5E-&e0ZfBo|R{X5|M_rR}T1Hytt65|x}vh{u3x$d7=d~?_I+(DD?FWf#p z_B*$S^~zy^hnJmxy$-k{$$M8*_NBG{F)M=$_GVxGoSp`_{fhGc5*2V)LgJa4+7fB$ z=i1t96cyJiD{oU%+o7TH!PIoOmexKUox^&12Xu8mT3H=8FgR&sc+t%CoQcV4W8=?u zcE6mQu3B0BbaT6HZ}-s2>8F?1GdH(izP_(KJ^%Ro{|X3r=i~Fy&+kWI;MahFZ-Ifp zs02pnC?GxrPG;3N164C7dAqwXbg;^L067OdT^vIyZY3uiV2Zf8WG2rR9p=3;wtt%s zD`D0 z+PQldZ=TE?;Bhn{II!osma(>~sja%QHLpg>s$8X`=ikhoJv}}oC@Lm`LF7{CRKX_+ z{(7t5%&{mAD$fS$I_uHW-KxKE&(8W^SMK#KlUgvLNrInydq7g``6-#TZ+o|fIw*S9 qiTN>hE?IZdSZ&MJE8*b@pZOT}`si&H3g+|!1%s!npUXO@geCyf4=`*1 literal 0 HcmV?d00001 diff --git a/images/countries/bm.png b/images/countries/bm.png new file mode 100644 index 0000000000000000000000000000000000000000..96fb4dcd4f42df3dd8f0a306b7b527d68709a947 GIT binary patch literal 1036 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFKfu6vkd5;+ z2j>+b;p1A`$My6-MMQmwPk51-{4O=)dv?y@@Q8OMrLTMYDrMxi+c}=~^xb4&-fU#H z*4_92wHq%E9eKEHZL+!j!i=JM*=3nNA)7m~rYFlDjt^=n7(+}wBVS1YSi1_tk}tsh!gTs1SjWMcBe&hD3!(*?(|NZ@^80h^A2>9mb_bWK?XF$MHZ|{2^9v=e&en&?=j12#q zlJYw*?^Aa6?ufAG`MH}S!d^Bv0%HmoU!#DEA+Yz$L_eT$j7i?^E({&4vK~OrE>9Q7 zkcwN$2?v-|QcWsFRi=dOnPbzWblLlLqZ3o4Dj%B-W%)d9W}vp)9HxgD|Rwy961{) zDtqFHjLgK8^sL07Im{xjR(Nt06n^9F*57i?_`>$HOk7)+we7I3Y(JJZ-CXL`tn_6J zt)C9rF4W6fu_4jln}y5ur^U{nt}3Ee%|f3&PfbP0 Hl+XkKn;S5i literal 0 HcmV?d00001 diff --git a/images/countries/bn.png b/images/countries/bn.png new file mode 100644 index 0000000000000000000000000000000000000000..53460dc3677a5e6a0b0845dd30dbd033106f01ce GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFKNB7MZsMea zV$yd`olZ+kn$$nx&xfDZR@U`(^;fT4{qyVZ^{Y3&e);zL^&5Ewg|p|*9XP@I=(Ya) zA5PjjykCC%fA|q_;4t&i6RgKiN?f@n`|z>-nRB*JpS#5;D4#y-pPA)!=n%t!{S5o} zGaNj~ylWTp;lr#453(LSz4ZG-S@KnTKoRmQ3y2<1A_?z<9;WYGr(Q1SjJmW3>wj zp*vzjrUm;Z^K%u-NwhoJz1h8Eetzz(yqq`&h9m6k>%~QMIXDzKIVWmsKlJjNY+-&o zCel($YFS|5h0(J@R@d6&XzVvLdIC{hKvp7R5kIB@~txH;6j~scbT!;3bfs^4s^M?qfpboFyt=akR{0B3Q0-~a#s literal 0 HcmV?d00001 diff --git a/images/countries/bo.png b/images/countries/bo.png new file mode 100644 index 0000000000000000000000000000000000000000..5025e7fb8de78e3fab3d412491f170977216e977 GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFXNX~7h-6@n zV`hzIWsPCwOyuNE=M_j7kjRvfEtQoolvgZMl#Y^CN>NsfSJZFQ*UHt>$j~tDFx4y6 zGblB%XtFS=G;x~hp>buwJ`n4NJO|{F};GMbDCx3ll&hmh`1y%_~Zi%@rExqog6?!L6Gaf(1 zc=9yw<*Vv@_v>7}VfEsb$M;`>KYpd0IL>zVEa#<55?8J&oH}K2@|5AjhZdJEnOwbM z_WZfSpFeI-pE?~sX8r1w+yDRmKfe3EdhPk|U%pQD|-@QJ)@%i{V;L3ToBYPN@FI2pHRsZoVvj;cr{(cMm|083; zB(4c9LW?HwKD*?+ZMpN5QnnTSx--(vY8}|lsxh8XX1t=#^*b~0oCa^V4A(tliPx^$ zH|*6n*=qd=xBH*!`!2!rO}xj;+{nL`DQ6fM>KPc$F*9FaWj({ndX|&(8ZYk+0f9>r z5>o^PAIi!;QB=GlFF#jO@}0i^CsWgh78bvpoOT--{c&@9?&x^T+WNo0|G$8Mp8)~i z!oz>X#eGjr{hyTuiq=s;Ca1erHGlUwY9>+QbkNc^GW(| zwx2t!nOooF=;)p~yUEA5=ughywXtg&oY-cqI_0I6^{Q>xuPUosQBn?yg?eUbVSaIf znwFKBoPmjq3k3MBg}K?cFIci>PS2tl0`~G|?->|4Y>mWz{9UgG^1P?3pUXO@geCx~ C%|9pr literal 0 HcmV?d00001 diff --git a/images/countries/br.png b/images/countries/br.png new file mode 100644 index 0000000000000000000000000000000000000000..734ace94ba415e56b7bfa16a257b38ef6ed732cf GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFkEmG2XpqgQ zpT%uas20+%7T95xInN}bDY_mdN&PES5QnK@Cd&6|QM5ag`JKopS}8 za)jKAg+0o&Lo0PcD~%&69P_3G)-9F|u2l^x)roEPtDKe6Jlm?$njwmT0q6`%1_lcT z<``zyXjaa6PTmAwE@v)*6ak4W2|;f`#R^6F0(r?0N$Ch_r6gs=cty1|HT_zB#Rx@> zObycxQ>|<*?Q9)`5(B+_J>6_wtz<2WW($*26Q@Z|MtMeV)7?BLdHT=s511PeFe@Nn zdO+ax!0_4ODT`CGR%WFxOf@LiH!C-_Z?cP;9@({`lPjK8xkNT}uCHvSP|zf|-sK(6 zb;dQ*N{iRT#ZPo|?T|GtV=YJ_u+&m8{!^Lp^m>D5cOckev^{q_I*H{jb> zzqjvvzkLh%_%Yzyx9}g|2B}Gm zt2<`wF)4p_=jG(=MkhN@Uty`AM^i;pc4(z-Ssu;YYV-H-=Uv8?H!Xe$Jr{AkIg_bX zro=Sl(QD~N&8uez%jD|%G&r%%I`t}Q;m%rPZe^yNH9fr>D%lxoUmKOJ-YsPY^0KF^ KpUXO@geCwmOgTyb literal 0 HcmV?d00001 diff --git a/images/countries/bs.png b/images/countries/bs.png new file mode 100644 index 0000000000000000000000000000000000000000..36c4cbe069fe12f67740fe4240e297448e8f26bc GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFx3;p*NY7wk z=4WQ*Rdn3oSMn_-qm04e472e$PV=+8HrE6kZg47Qu?m>TdOuY3dm`_3ML*`9hSwg` zgim^b$4w$GIpzIwEBND>`P?b}sei@)fQo+s6+eyak{L{nGZ-IZ(3s628q92Qj!8P1 z)%pUf#c5WH6TA)=1)MKSxSx~tyR8`fK+<}ywA~UV_x1YmuS`?lYWeRr2tQ_#eAg`Q zqEo>)x6&V0@yFfrpZQn+4ygSVQ1vyu{!?7XFVB?CS^d9L+a60euaR_KtLVL1FJhl# z=9%ECTZwItV(PA>c0AAwT(9oG#5QGLWX%cplp5A1S_lqyO-c-mTlZ@86rAIAO4Jm)?a7CYLUm9XV?9{kzlKcaFb) zxm~?j}@0$F!{Z3QY~O!9VjVd!9$^#F1Xc)B=-RNP8VIKUJ!<*SbD zTc53_B3HJS^y=g|BpE-M`(|m&4$GYtEG?=jPa2dqt9>uB`0>+X_l{jVt1GIi8C#e6 zrM!FZ(c$TN_FR8&zF!YBmtpBw-&tnrnwGlD7cAPgZk2?_m7ABPOlL3DRo33VX4%4B zO9V8o*e0Gj^XpHaVt+Tkh z)?&v*qeq(^56`wfJjeRQPLJKw?A{#+c)LH~!V0%fN5elJ4gY#F?(3Z*x_+zvGb8dK|5#oT|TvK+xi8&x34=jP5b$|Svyuw`Ly2WU@Y(4 zwyMLc=dYMM<9k!Ui9OqQsTI3l|O^H~@@XU=)u6Tp^GdZzc(pV@&dP zcVXyYmGuB}4tlychE&{2PB_5ygLR3i&esr?mex5>Q$(5%H99d(TJ@|gD@ds?Y~SZv zCa-jc)+1AUd`wbZS!4J9neqJWT0I7?ldosJ)VOi8`{u9D=VnGmPGT1c+I}It@WZo5 z+xSv@-}dLt;1V%1EhxVDXpYV7&emk7+`v4sfD<6m3jB_=~K}`lN+4;4ssTr{b;&(?oZ3ywV5Y7 cZ|q@auz70un|6c z`x!cWSMJd_r5Ar^?|+)J?{VDHV+Ds_)Li{nd*yHK)xXsjepFxlQF-o5{e>^xSH4ZS z{kM4e{*vYUiR~5c35-UcJcYZT`$7+z4l*!!+rYBuq}6zPk!}Zc*JAUrm)rL zlXu-Oy7I5|>i@js?+Qd=jD}l4GNjVxsah)5{9-fH4J(uTen75V)}7Z3oae#w2fd7lsa2 zSq~s*o2QFoNX4z>gab@BZXDU-(<9QlBf|2BOUl)+4o*$0j#Wx6x}!74=1`E96`RAt zjwN$qw%#asCQx=yV&;}LB?~45GXyW#+&gn+>)O5D%hzvb4_L8w$BI2W_ifv^a_gF1 zyH{@((719vI`Gnkxa&89qCzhR-wb3B;rdj##ccbQO~nPDKYcDgU(U*vdfdI0t=-j4 zeMwr{5*77hjIAQ94SJ8*cX?b72=|BFz8fkR?RE#+6D?8 MPgg&ebxsLQ0Jmviwg3PC literal 0 HcmV?d00001 diff --git a/images/countries/by.png b/images/countries/by.png new file mode 100644 index 0000000000000000000000000000000000000000..8f5b8499089ec901f1704cfe84af05a0e34b181e GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFzoKV&)zs{v zjqP(s=S~aDUp>7aX3b$Z!@zuone{9y??qmLs{*ojWECGON-vgHT&t+GURnQ@zQ!&M z)Ay!YyS4O=>KPm}FuQ1Ka>2yuo0HowH>XEVZqMBOfBOgg4)FWz7w|QJ^$-KcQD&aw z?2;EnwC<^CZBjGbt84e#%KW&o({($)uU-MKd_unl^6g_4ILM{EU3iHq<6>3D)w*2E z4S2U%OC0glUhJl`*4OY-yxq<)tJ^ugXVN@xha}v0Gp1pqbVg28QE6#K>@r zf#C!r<8emDbIi;qn3<0;GuJXPon~b{#mahumGw9)>lt?Tvz(kKI62R8ab4r(y}-+R zl9%_gfWRpsp=%-{wLCmGBqYvBNSu|Bcqj|>w``4ozyn3a`-+NJ6coemOaPb#nUQ=Jwsq z?Y6z$BS*)FPEI?_%zk=#y>fFqY;FC^*Z04_|0_?=7aktJ{QZ9g1ibU{`56%K(a-Nk zVBq(_z%Ky-Zvz63xVnA{5C0e)^))W;X;jpYl$6h@slPHae`jT_^Ywj}mGP~#^lNF! z@9OF$p`jP@^MTO{jNDOxKLnO6&6@;N!IFlW1l)hadGurByMGfkS*PaCHC1(37-<|C+#I{-kWkU7 zSyr!RayL4?F_t;w)8l(qcTMiww>fKc8l7bN+_X-u%6b*G>sOW4tyxkIiel-`etB_q zfs(AQk(z~qjtc}PPi7S7pTA+to=J0-w9J^mVD_GYVM3A-SJA_T&p>|nboFyt=akR{ E0D1v1E&u=k literal 0 HcmV?d00001 diff --git a/images/countries/bz.png b/images/countries/bz.png new file mode 100644 index 0000000000000000000000000000000000000000..fb1bd5aed004286949a0fea90b081202fcf23607 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFZ&XWc(nxO6 zP3tkrndn$rY!ch?~efDVMa+r+Z7rf;oX*8)D|{$XHUXnBHboyk_;9)$@O+gq?0Ey)&ct ztC_|b8@)632IutEx;<>p``TZP4}2Zzd&Avsd2;B(0JoiqVRs_@jwFU%iVHqdl=dSz z;%a&Jzx3E!)p`Gl(%O_;~C|OL!g~eyKG7TW;o+>hdR@t>2d{_$Mz@Z=!#} zNbii9(HUEd8(wY?4fLkOM!pLUIGz~$FhBcORK&U9z}*=sPbecHY3+03bDx@H}lm_IA+=+|AlpRAp=tNY}cjC5( z^mK6yskoJ#aDb_zg5`*dN{Yx6RoBX&tu03zoiZ(5HB&!&mVRx$cylMK>QV>AvjzVd zet(*_?%Xjh*1$)}uD2+@c4eNHwfkm+1py7a*R>VBZn;^kR<02lIirQCwT5Twm8(v-eyMGB zx4i8lA<5ACDcQ*Q(&kChS;4~H!k-=`H9F|thDm1)Ft SK1gmK$k(2(elF{r5}E)I+kQs? literal 0 HcmV?d00001 diff --git a/images/countries/ca.png b/images/countries/ca.png new file mode 100644 index 0000000000000000000000000000000000000000..d06843f5f8e6dcb8f23724980d792bebede9219f GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFzk2n`x6hxR zJh*>q_l`?DHeWt`;G8V$DHWazD!kV<1uyAIJT#HL>!N?eUU!p~)>#+B|0({T5`2EA z23`qwyOthyA}QodQQEnZjK33`&Q;_*>2H28qwiQ(t&KCW5( zbIY2)JJ$a{e&ElkBVW#*_;vZ**^TQ?2{F`jF`N@&zNaQ}MPGiohV*MI?O*;*$33k7 z#RohO^M0Ngf2F7OEFa?;0oL;}LN^T6KiQccH`hCFWBkj<>6WwAZY!hbUJkGP-TsI9 z{*4O!7Vh^gA^c@xIe%-iw_3xiQ zZ(hHC{_NTB-@kwT`t|eY&u`zpefsq2-Me?MU%!6!>ebVyPai&fc<gab^EuDpIK zQLVOd<(V0FuFDSE@oFqt7ry4o)r0S{R+yDeieEUvIKU%(f!3Z{uO7FsXHWh$7zw&B zn6NSD$(_av*#?5 z3d>676!}zeYU;d&ITI%2Xy2C%QpsQxDSCK%;ta#H=67RPtqtGSaGysb<>=(M#(SqO zUAC*WGAUr+PQd_;z}i2Y z@1MVZe(Bn!U3+(NWw09+8y2lD3|kb)9m~KM$E=sB7COTxa#nzBhLB~QzFCp3O_i}n zhux>IANQXZc<|b9(=LW>`&hT^X5D>AV%}oKmFqRO?9$tR#N^B+i;LHt&YWU6dz$&o zDbA}`cpp5Jy>eMTB7%4MQt3?_mG|w{I(5R}$`#X>uiVnobUZyxl9HkyJh*>7NAY#7 z{b7^ z%X?Ws;GTrUB?*a#va&DK)Lv_Azcn@eYGw7+$?1oi+b@6rgZ_RuVq;H*hu=;~x_jr& zzkmP!{{8#)>(@`8K7IW7@x_Z5SFT(+fByXP<;#Il42IR`ym978H@B_|wUs@U8;Wr^yI-O&-1KUiB_jx;#c990cEwJPT=uZ~vJp+%1- zIVk!`M!K?=K6|F7#%r3VXIZ)6!l9os#pyaTuH7&zz4vD3=4VrwT5Xi)*v>IozNO6X z`lYhs@($vcy1sjT8=M>!5B{r* z3*9T6Rm*(%uoH8G)5*e(7Y!$-{++C~IB1fP@S{ej$d@ZKC1*YrRu2~ud-DA0vxLul Y4B93}ALU|qf-*aUr>mdKI;Vst0KUjx?EnA( literal 0 HcmV?d00001 diff --git a/images/countries/cg.png b/images/countries/cg.png new file mode 100644 index 0000000000000000000000000000000000000000..f2db5185056bfb0948fb6585b194b4a5e02e9a64 GIT binary patch literal 1040 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFzhG*{P|Ltj z!@zoimGd|!?@3;+4lbcnLK5dBB+g0*P7sv8pdf!b?0@2sp}S+2(!+>SH4A7l1B&gy-f)9)m2&?%wtvl1~Eppr?0i2KG%NvPXFa={kQK;KmV}%`pfCZAGhPj8IB!eIB|mU_;JP) zCzy{NV?KSF_0%cWTp-_1~;EeZS7?>lUZ) z+ueTd^!l|Y;PVE%U%PyN?elhaQhuV4PYPu<*Jd3yfx_x}~>|0^KiS5Uw^ zAD@qYem?>Oe*^`74-Whi5bz~1;9FoIFs6X}nB?v5!qCAg>jC8K z^K@|xskoJ#aDZt>_AQmiGnMbS(9(3a{1;@bC(bn-YE9QcvTM#oD!t*U4xs zS*3Aq^>dNe`Dv4HUAlZCgiR!9n%IT%-jBRnPvyMGUZtnY#C4KOa))~*d-Rek<=d`@ zO?krH>cX>kkuCGt$=OkjY@*^%m|A;k7Tx*dGkMjlYANm0T%U_JRI)QnF40}TIx*)Y PD3m;1{an^LB{Ts58K*xV literal 0 HcmV?d00001 diff --git a/images/countries/ch.png b/images/countries/ch.png new file mode 100644 index 0000000000000000000000000000000000000000..9899d788cf85c09a246452fb558f94b4dfbca4db GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LD#y>j*VvEv619on>c z^OdVt9z3{z_wJpuXV08IcJ%SRyT9JQ{qXX|vC6{JhYxKOW#1~zyGe?7g(S~*If1Qm z0-NOo_b3W)l^0qmC%8{p^st)59(BnbYLff3WY=oS?$A@*rLTP4Oyh)^<^dD+bJn^C z%(PlH6)!oNo_8|cVPkmH(|U)!$u%##osMQpY>dwPIP7$>TH|Q`ILz~$uhT(KyW>8N zyF6@9`#B%*vcDMUw%N_*Zlv$o5RaRYzI%P07duRngko6d%}y{)g8%soAS z_R-nXkIkL=^~iza3+DX1aOVBvM_UEipGF1#`2PL>|NsB~{rmg(@1H+^e*gac>({TJ zKYxDx`t{SNPai*ieE06%n>TM>zkdDV#fzs;pFVu}@ZP<9H*VaxcJ11gD_1UEx^(g4 z#S0fMoI7{!EHDnvoH=#s)R7}c_UzfSbLY-Yn>KCOuwnV~F(~XudfG2XCtD??m7_2Kl1>y%fm z$P5l(6Pa~IT>9-Ykt;VJYOhRt5gf!SGV8(|fea<_Q}?76=cURA9pn;8(&;epdi*pa z`^l4YU%sr*X5@N0-D*`z={EDL;ZxJ9s|`ySTf0`7F4^i+DU}s8S;#i$=FA4CsX3bt z)$C;4`t)Swx@*(!?sZuBORTWYu=9k>IuUjDW~!{(j)^ggpJ c5MX0qFx(!X${YN2Hz+_nUHx3vIVCg!0Q{wHRsaA1 literal 0 HcmV?d00001 diff --git a/images/countries/ci.png b/images/countries/ci.png new file mode 100644 index 0000000000000000000000000000000000000000..d536e9baa2bbf15348baefe4c6fa25022fd29975 GIT binary patch literal 1040 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFfA;p-`>*fs zJi4RNt7tY;->lWZs@ueMsh!IVyMT3G{!2W=HwJ{Q4Nz;7Rmzk$nxLsssHjzH%d|Q^oiOO7`DbQYGYvJ`hcj7K_QELlD0?1tqV`t8e`RI zcJ z*ID5|7sS1o7Wr>w*3V@br$ZRdhB2QGV?G({TJKY#xC@#E{)ub)1BdiU<#>({Seym;~C$&-f-5O}M{R0A}NG0EHAg`tC0 z)&t1d=jq}YQgJIe;Q&)iOwi^o?WkS9e(U~>JUV5oqm$jt){E!n*8bfq)|A5)#pbYZ zNyCXfF~{%y+viuD>Bn2^yC9${!qIO+@c!6x>29v=>-vNOG_193l-DlVzkKh^lM}-I zL-{m9LfGmD(!|Jd!X^ExMY%~rFgfhLn#xLSXyA6K>5VtO?+ zYG%PnuMUP*roDHQY`kW_UagheW3j}gwZUoMyLB7mp7LJpG2NE+=FuUh8+(`;Y9AS# T$=WP?9~4BMu6{1-oD!M<0m5V} literal 0 HcmV?d00001 diff --git a/images/countries/ck.png b/images/countries/ck.png new file mode 100644 index 0000000000000000000000000000000000000000..271f568bc7772a041538c31346458c4556b9b82d GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFpJZvZwyq(` z(PdUv!R+Qq=eD1iTH7Dw;J<42%GTVr!hrI z#NTcYn z%+=*ZJIV^Tl^1O-$={HgIHRUwcU9Sz*2euQi4%G{4mH+osi|C1QMxEAy>I%IV;!xV zD$C~0nR&9YZdqb{&D>ch=FB`|VcOvC(i0IfFFSK-R{H$fs@+WuI~(h^cC>9T%%4(O zK6lBY)4JMqHr8!fnUkXv7o2Uau8#^myJ*hon&M^kRrfcnS{D&`wXS@5YW&&yipy;c z6N3GB=A_SXuuId@0>&&ben$bG5QvKX`v)k^nB?v5!qCAg>jC5(^mK6yskoJ#aDd6; zXI47LN3L(yCr_+YJ@#6Pxivz~Z>DLfkn!r4;1#8wv4wmA8Ta0BURL*?eOl#O#4V9^ z*YEO)2t7@jfAYNAg$I{}gr+0~C9sM-5|}to`OfLHi?7H`osc>$icMrwhN(dKmbVk9 zyz($Iy59eWiA!`@cGZbnyQ_b1eVU$rEbBXCYfr|uDMXhz4 z&dsxnvTFM}wQ`ynql02;Wh6Um=>Hu&m$%GXb&i8K=N==2&IH5WvUFz~kjFh;{an^L HB{Ts5ayCn| literal 0 HcmV?d00001 diff --git a/images/countries/cl.png b/images/countries/cl.png new file mode 100644 index 0000000000000000000000000000000000000000..97db9ec04d443290ff3354a602bc22fa97000df9 GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^q98U0GmtFwxe5|U2=EDUWnj3)!0_MF;+~n=|7wOF zFZcgZk^j#zFuVkcGB7-^tZrfGTq@DiQu%-HzGGXr{oi~1|Nq|Zo40OWyZ!$?5PS!M z_y55FXe1_x*q$o^6lF~Ec6X6y;g^i;#IIKSRD?duixpnbRB#40;UU)d6^+{X1k`m5+) Y=EOa`AxVwb-hyoQboFyt=akR{05V-;mH+?% literal 0 HcmV?d00001 diff --git a/images/countries/cm.png b/images/countries/cm.png new file mode 100644 index 0000000000000000000000000000000000000000..febecadf56703f724528fbcdd5bd88a636354857 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFx5~9<@L*tY zXJF7}V9;S;_GV`GVrKPX<@Dj?4dmrA=MoAQl8BTLv=fw1P>_$8mvom@Pf=G4P}GXl zvM8~zD7G+4GP2IL_Gt77=nQZxcMI+~DL% z!*l0MPMh)cpQ;S(Iw+LKt;=S!7 zdt8a(j2QbVUWU^GtQRDBZzxMV(pP(9XZpp*>8Zcl&v4(5;eJ1&15Yq89A{wI&BSnm zk?}Yq<6aiV)9lQrn3+#7GoNH--NVXyfRp_MC+9^ju5(;mXLxx}2n*a45xFKJazIq* zri8?K35kpHvX2xM?<*=^l9zv^ruI}@`;?~oTYdeP`ucB7P2XEtJ+QF&Y-jh)$?3bB z+fOgAo6e5E{r!Ih1bht$coh*2j9g$8j{;mFFm=yuYoHuslDE4HLkFuYFc&Z!^mK6y zskoJ#aDXY|X3GqdXa28OX`k&gD*D39$hGmKx5mr!@3M7PpY1gJ#@ENf^|9lW_6y&f zm1{E2^%`<_a4>Oop3v}?F1wPFvhBHQWJ~)m##WWkl%qVaHU|Y&e}25?&>!0dr&mQ; zOjb{?X1<)vEwqMt@0|vxuAoDAqC$P=3NI5^jrz62nz?mJXr-lz^sQgZ&uMv@eJ|O{ z&ei$3&?tNRH=mi7+b!;0IeJh`L*>NLL+ftaW*(bU*}759ugvVm9%hEua||zDf5N>3 O zbge0cg1e_1z1$J`ttq@-h@oD9;j9wp87by&ajx?!LjTJ%zL%w*5n(+i&wE8z{tOqx zTm{L$xhZEj7|(DrE>~6j7!q*B+wFgT)>%e|GYkx8m>B9A7|t>>o@HV@$IN_&nfU@M z>ls$oi|p)YIXTbra$e!$y2i_Uj*s_-fWUbnq1z%N_ar1PNk}}Dm3^Y9ctt_}ii*Mu zHMQl^(yz6(Z>XzpP*i-UufIuId8eA%U48w#2Ksw6G(MS{?$^>fqN{sQN9VYn-d8KD zQw9cSjSL@JSUj|}xN2s4$;9NmvGET(yI)RDx2&w5J32hDxBKJf_T16&sgu(`FRxc_ zZpW;x|NHvB^Ynb<;ql+!|6f4BCm)}`fq~!r{C)=p{tO8C7!dF+Jp5N&+~1UxAE~MT zv$BBU1`It4L8o!jMW7LkN#5=*3>~bp9zf1KPZ!6Kid)GE2be@GT$NKS_V8SN5>nbL z+nn6!6tgCWX{F+!Sw*LAxn28b=;@#sCswvG!&|Y?RhOB2|A`|S3nnZv**`^AzJJZG zeKVsYYGMQeIxLlsUJeLgNeXaU!5^SuYkFZyv|Ltz#boOM4c%Ko?oOOp0S)ck0U9^s z{9XCdCamAA8*oDSozeowb$nqCio(1zx)1HWJ2&Ud#!7aE55JV}ocDX*3-YKn{8vpD7Mx!l%npQqPG7uRbMQHO(qZzU#Qic4TrZe>(%;nMEr z)$Nq9oUZONQ`>u)wo8wZ_f)&styUomeY5s^ByaLe*&LX=Kc)5LSql8(j zlvR(8_iSyadegue_HnC?ygDobC%VKf@Xy^In6n|QXlH2t#^n4ux3G+|)~O|p6B_&H zHT2HunzqEsJI2O0&LJQ%B&9U9v@JTLG{3gHfA;dAq{6dn8P2R_zPO3~{3fB>dqrNH zQoDOd|LYB_2gmLHJ@)!^)93Hwz>hZquIzU^vznnko8jzQ#xrXe&#h&?u%7kI8rHLG zIj?Nyy0(q?+?v!9<#W#)8xl3yI*&mb}u#hbKmXx8ONumosMs?KDNR7|0CabS3KWb^7#MQ z|KFp4Z@2w^KM4GJFW}pq@Lvz(US5j)`y}Q6^NjBgQvW~CI>OIzOo;iYIOjPT-kaL8 zXLaQlsYFp zZ?KM@@0GLFK5D9S?9}kWm9F6pu|@M!t5!74ILWDBCt}qlW8bOjHABWU(;{YtP2^PTJGL>7OYhH|dUxj3Hc^3X@{;>h<&J8r95>b5X{vw8$!4de>0TT2Ywix~>@3fE zyB_d#xftSiKG=7Qr_0sI;44ufH)F%E$ArB|iF=$9H_OH0XNcLURRbp zEiZagUv(@e<3oS<$yqb5uUc_t@xmv&ckWY?zp!Z0zkmP!{Q2|k+qX}jK0ST<^vRPa z4#LN9V)J6%)rsHf+BP0f|&<~viTe(COhIAzMaIdeYD zp8amwvd=45UfQy6FYZaI)42A)vIqFJot9>=#2*t zzFxcbikb6FZ{O-8N8iktx&7j$@B8*YNX!u_wL>J_wVQ5zdwHe{`U3jhj;H@K6r5Z_U&soZd^Wc>C`J_S!i8Omy5ACpYh& z-9N^I3mq2zTX}cx=h@z;yt-FwYoB^8)!;Na&G76)t*(B54<9c-Pj7!#u8n7AThEPk z2#brneBjp6s|T4hj+`>9PLkh0rD@f+m2)TeZd45DsC@Q>^G;=5qvFFyf^H}vZt$`%Q~loCIB`GhL8XN literal 0 HcmV?d00001 diff --git a/images/countries/cv.png b/images/countries/cv.png new file mode 100644 index 0000000000000000000000000000000000000000..6204e60b5a09994abd317624451ab7c747b2602a GIT binary patch literal 1041 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFKe}Vr;hnpm z-n{eu^}8EqFI+i!=GFa2kFMYP`s(eb6|47d-gaW&!A~z#AyW?zc*9BfK^PFru0=<{`dCW04&I|IH zA0D{E$+j*gbbW~5f~b%+_SWTIZXIq;4N0+^(-XG``%TVH-JO@QFFI^)pl?s0Z&y<6 zvXZ<*nJF78ijHQdZHNk+QeSztru<}e+3~`hZDob~lH=z!R-dk~JYH3Lu&MS;bM2YR zl6{RerFk_-{oLFOM<=y379QTw^X&He zqkHD<*)aFi-qp9xAAJ&SdMU#AxP$z4Z@rVzuE)(~j+x4wwNu#}Z2vhw>}rbNubPxs zC2=o`W53m<|LCaz#wjpnM*+bQaPU$#1u9}p@^*J&=wOxg0CM(wx;TbZ+)7S3z%*s* zTIS$nn;z3CS9sUR{5|C0q;^k}^WQWpudFJgZ}S!gIw)#hKk|gZIMy{ZSK0def)fP` zCghd`?U}P=;k2%Ot&{UzI>ZB3?AWs}a-Y>&C1vgPE7omU#-MTJ{Pjzk8V9f3J*9L+ z>x||h9+6qbtJl|mTB0djwfyW1+u~nGRyrs$e*30p82E7>pPn9{S)5$nf`G)dD(BR) zpu$j5A zhcqgif@@BP;Sj{Q_j0+w<-#zi7>_vw@g(AL5C8y$B9S1@cq|r+Mx&un zC>RXlI35TD{C>aB=fg0}?RL9dE~nGEv9aNBI93U9cDv1Hvs$edi^XIz>GgUPMYUS3 zTCGM91cqUyQV9_cfPWbja=Bb8l}aQMu~;k;iKeHgCnhF@LLr~e=ka)beSKUmx4pfc z&1MrR5Lx`Mf9$|zt*OsTIZqmsBg^UDb^N2gL)ZA&-mq&xD4+>Fu@eM@f-K3Tms zU)oV}AvAC)4;rC;r_EY*S;JZ9hoAEJ&F8LXr({tMUA%UGtL;5g@T{$4O5D#G_}KgM z$<4;I%+VsIY6VqU4X~`Xpy=4q+=85g!^q~{+xIrTP9Xd3>koT!$Q7W2bvh8%_BXug z`ElyRF7lm*1I=Ke@_4}*M{#R?uqK703-nZ&j5Vw?SL-ucDhg*hN{VR|PH|)9xaw86 fS+?IeWtvST$y-n6A5jZB|5!<(_6v@=lA4Kg239l}Bu{f#o^|j#xhNBtfY{HN(XL z(Z?7>7BGs=<&>VyD?gu0EK5jrsf6|_3C)G-7ONC>TMZo6Ynk;~c zKUcQz->~KAvE#=dJh*@M?3qu`pPgf7zQD?Qj-CBHFYgrrf!iV?_ar24%gWwUR9q}A z{YXvinYQ+7Ma38T`soN z#N?E*@h3aG3udNYoSd#&S$%VJyKQfG)Y9^SlhY3`uM76}Pu<*p`ucwH^?m8-`P1M3 zXF$M5Kfkv=K0g8jzXSw)3k-Y$6pW1g5*792=FO+KZ~y!9<2rasK?JlPCZE z`}gr;{Qmv>*RNkcfByXOa z@7=q1`}XY{H*Q?JcJ0cQE0-=^x_I&8g$ozXojZ3H7zAg|%$++I7;(Vp8wHevK#lx{ zB%prAByV>Yh7ML)4;rmYZ0N0B0?f&rmHjG z&a}vMDz6UaP1X(Y@R}HYe?s-4C7rgiXG?po`Z_39mdXY)`f|VCcWzo+*C{vc1rt`y zYulvLKd~}$p|59QW}sz&N4WRV2&bO@xt2Pn`xW#x^j!%qSnkNf3-mu*D>u6evS_}KHDyCK!iy1kxF?$wWE}pd5 f>F?gV8!Fiu#9kOAiATIi0R@bwtDnm{r-UW|l|EDw literal 0 HcmV?d00001 diff --git a/images/countries/de.png b/images/countries/de.png new file mode 100644 index 0000000000000000000000000000000000000000..67e1bd53a66ef6f37921aaabad1102d8d82b0b59 GIT binary patch literal 1038 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFzhG*1+{*fS zdWMy?^|1*I$0xB~o+og2j>MWa#W%Z5?`^a=x5VW8akmq_3@7`UPfcMxF@f{qbly8l zWbdz5yfjaKNsaWY&HC%xly^+f*gZk(@GQNHOH98Vbb7ee>DhL--zWTkoeubT#P9el zgRe&dj<+xzYh^yu#eS+s=-O0~M~l_AwW{4%pnsrW_x)z8(=&{3FSq---|O9WpC1PU z-|Y-I!NYi*hw+>U*GX~Sn@SRw4b-2SYVR}FIca71+1>7{lhv;<-&cX2F9JNiMFsxM zPC3oMaGZf*EhEDTX6Cib%;#BI&#T(`s(WLc6J6@S^*v&p}xM6fq?;@o(YkW*(oVmSy`#6sc~^};o;!{0RjI0{%&q= zPEJmaj*b=<7N(}AMn*>Z`ud8Bit_UEva+(0l9Cb<5`uz)0s;cOyu6&8oUE*@%*@Qd zs02pnC?Gxr_AOp;45*qh$=lt9p@UV{1IXFq>EaktaVt6D0GHZEv#n+R^9~v$XVv?= zOM9evl}8@siEd3*FvVTu}zy29&+{CRp!=3+!3FWoA=n%G%E{j z{#IR$$2@j6-b@qLU2gvgwTo8M2u8wr>mdKI;Vst0D!L}H2?qr literal 0 HcmV?d00001 diff --git a/images/countries/dk.png b/images/countries/dk.png new file mode 100644 index 0000000000000000000000000000000000000000..9404cf0bebc31e10e9102c799d797e52b4626771 GIT binary patch literal 1037 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFzbGj5Lf_zj zUjE;_{Nua#oH}~s|IZ)KA3iwC$Z&>%p`L-^EFl!cb4FQ2}F0S)JLgz$9?@379lajn7Au&Zz@S&{iZ8^Coii%eh85nHR(ps*e@!Hbz zp@qd&Gt)~ZCg+Wff7sdma&p>jWc1b9`GLLNA2+vyW@b;Foc?)vowc=j<>q$G+WNn* z?+!k74Ro8)n~;#-v9VYD{9Z;z{!K~wo|<|lF78}>{FR)X+l7T!3JRXo)I4lxc-Pr^rlsXV zd;7J%zB8SjcNZ;svuV?>Lx=vKJb7XN{u?JxKDm1J)8oevFJJ!i?%mTHH!dAJ_V44z zZ!cf||NQyPp+ncsoqKre*46Xpubeyg>&us)pFjWj^y%G;7q6Z?xpemIxl^ako;vmI z+qdV>pFe!~@WzcB7cX8sfByX0vuDqoIRlI-V0?`NDu%%HbB9j>jblvmc6VXuV3qX% za&~*VIEGZ*N=`VyR8cV{=JT!K)RrBrM@35B>~(P3WLCISw)4=PKZ}Z9U7OeFpjh~L z#*I1aSnT2iHAA(xGw?5%;A!HWQRZ(WKG|k-Za_tcd_c$AO^bFcU9Yu&!G;w}_AJ`M zqj4qTeB||O*P~)Dhn&B7A?7rnNK&uKlryh zcI2x}rq(kJdZ%7^G448X{i0KRG_S@Ij*`H%bg2ujde7W;Non2K!_1&RN&B?;)#+8B OAo6teb6Mw<&;$Uc)mrTU literal 0 HcmV?d00001 diff --git a/images/countries/dz.png b/images/countries/dz.png new file mode 100644 index 0000000000000000000000000000000000000000..26919b18c061aa593554808378053d2ab17d41a1 GIT binary patch literal 1037 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFf9LM;P}Vk9__8owrhfHA_gLSlMfiFGDN?Lkt6h zB?EIDGiw4XYdkAwA}4P;FK-I3K#l;H3zty3kVKAzppT$zsjOnPqI`+Ge6fOjp}b_M zqtfE%BmPMO|MXQBHvxQNCkzRWvHp4I1?g>hvAE9nzMk@+Gp1#BwTUNJvI< zsl*Ehw%I*+aR2JnD`(H1xpd)7sreDQ3h0Q2#w6PAc@J=(tI3qg3YuBz_x^(Hng$w7;pFeZv%&AkSjvqgMjC8K_H=O!skoJ#aDd6hCFE=FnG%+YS6N!8 zxi%X)IDOg`_N>ZFF7RdOQ&-ELoeqkUzTDo<)&FM{OxyCv=GYsh1rypjw{C2XpJP2e zKg-cAZJ~I;i37(%PU~7uus2ejXsf(`i)lQf7Qa}s*`VWY=VN&K?~iTF#%6v0`Cei?=@6kYh!TE z&g8JC{Z)2`BdIBmb26_oGM?e&Jj2U-PD$yKy7~=mokK=OXN--HSy|n(w7BTv{K(Vu zorlL8PmgB-0Y4KGzNMu6&B*wYy=HUTzMXbc8yzY$X3n0K)SNYW))Z?$tEfEx)WX=< zln4(W*L4T$mu#unakws{NG2#ky`x|K%qfO*XIajk=DK#3_sS)O<;xZC-qC;k(&oVf zyXQ|G|NZkSEmi*X$>;Ciz>gmTu3T~Z|1YDn!|}{9hWcuT3ny969Amw4Nuax(>(W_? zDH8-A-jRKBPjT){$#*aGAKulOJW=k`8`Dkev^K5RdU(g;$7j1=U!3;tGTOb}=+Aez z$rH4X9kTxa)A!v=&)3g9{{Qs<_cP%4x4@rY0+uf|pE}9#+sE+bi|u}Wi+lMb^6!t7 z@1Ilu|H|69F67kl^aH!25ARQ2wJiMd`GPywORrume{iRxr$u>EU(kXnx|yj?E9Ny# zE{SNUE}v7Ed!;?@M5xB(_U7l=K}*|OK6tq`<>s7WU^vUne3p~*8ZYlLDai-2vR4%3 zmrF};QdWLvV6b0H>y&}PRWs99Zf;*gf`E|=jN(y%D+DAyt@H)TF(!GtyD)UH%6b4f z2RvOILn>}1Cmdj6VqR>d)g^SeiMh#1>G7o^N2iA?pQ^s|<172tCwTFsh|r^r2|%M+qiJojmr`7=Qr$JwQt=r zA&n(#S1M`erX?*{ovgWX;kq>(BA0?DPo8L$`_|yq<_Q6zK@-@yI6FRYc7Fcl{~~j< zkcjY8aW<~P%^Qt2`@GG2|K`=xhmW2luygs&w<)|dC3Ewy=f-DeTc>|JBY9&FGsBex VqoC3+&7fS*;OXk;vd$@?2>`c^Y`*{i literal 0 HcmV?d00001 diff --git a/images/countries/ee.png b/images/countries/ee.png new file mode 100644 index 0000000000000000000000000000000000000000..e0a902ee770989ef2a3606a2a8d5b8d74bc583d4 GIT binary patch literal 1041 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFx3;o2Gd0W3 z&Uy6c@$us)eEfoyR5T2Y%^jTFf;709=MXkERPN$`&{`>du&!0cPe*OCS^XIp3-#&f%^zPle zH*em&diCn*)2C0KJbCo!(Zh!iZ``gCIqXJuu@#l=NMMTLilhlPa&1_lNM z1o->=`}z5~ySux&xj8vGSy)(@nwpxJm>3%y8yFbq>+35iDJd!{%F4=0NJxl_i;IYe z2nY!9^78WV@NjZ+va+%=GcyCD2^d+UfVv?txk&yM&_u>0Z+91l4pvzYAZNd)i(^Q| zt>lCQOf0Nddt}#?PEl!9c@naP$G6c*iHohw%xzWBp+`oiX6;f-b5N|zjjs0QjWi6* zbSrKfK?y1A{|MSa=xCycF0 zLP0@7$%~zsnVpn`FKsGnbc#Ev=~-x)=-6{maNkPFcRz3JVP;tUK`->o#1E%IA?4}n K=d#Wzp$PzQ5j9c( literal 0 HcmV?d00001 diff --git a/images/countries/eg.png b/images/countries/eg.png new file mode 100644 index 0000000000000000000000000000000000000000..f81b276995aca76d17859f9bef3d41e1c5bf9b78 GIT binary patch literal 1041 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFKP(}2R8p#4 zQtH^g{a4SOkBp2qGc!MQ=%|~!=htsPGBUG{pE~pA!>8{*f1Nyi=J3&DO3KRLfBpLS z<;%H?7tda}@cZxIUw{5QeEj(C{rmC?@+VH7ICgBSnVG4tuaCRCTU1o!$rA_f-#&8r zXzQt+#cy9fx_o@r-@~0IQXGuyPQ&xVduYXlf@2#onT?>n^PEI?F zjDEPeU9`4-v!+-w# z`TqU;w{PFRe*OCC)2HXppFe&2^vRPaj~_q2bm`K?ixdrx%?Plao`!6yOmMK`79*pdeGx@XU^$sF>*~k zX)!!)ljwZ5uSH}ZM&de!=MD^_J@WWHzO^7K!bapnHqnBd4j-RoDh dt~8&uW?1`F@9xZyrU#&)@pScbS?83{1OO3URu}*P literal 0 HcmV?d00001 diff --git a/images/countries/er.png b/images/countries/er.png new file mode 100644 index 0000000000000000000000000000000000000000..f96b315c7ec6618f81fd772ba56bbd71e2f22431 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFpJr&XCLrWQ zS@q7Ms_79)<-U1SOQtOEUfEtaAt85J^Q2Rala3{pE{m<+Y9H0(U$Dw8af(OEbf1j5 ze%bQ_auVTJ4GZF#H99d<>t?~G;txHe~JywI6y)7J}+hX>bAPr*F_(xo=?w`%>*=Q?b&;o54)bEhKUNpsw-riAmwVS8MZ4*D8wi*S0~ zma|!dXSoK?v*z5Z&RS2SoR0fjEpRq^pB|7W%D!8bcY_lD7IlH+hEn?sWsjPx9JW^7 zWu|i6M)QoL?nzgp%bup!{H#w0J3mVBdzBILDm&s~dHQxKw!Ly(`63)!75FwQ3G7r6 z+NvVBOH*u*j#Rar&@n^B-A0Nns*+R9wC)Bu-i`LU8R`8xJNiy$)Pww_msNQsf*e~E z1P>^S?oyX}8y|c(J^EEe{yJxy1Ad;sC>{tu`k(Vy zGjp=&qelx?Rnadyn0R5r8_G%@8vlx zeDk2-yvF`X^H%L@TXyUu_ss?;^Qp%BMZ^NqqPu zG+>fABiGgNb6J^h)1N(<7#8?MTwIiiD^x_(cw_NtP4APZJiIzMxf4F~F-WT!ea!j) Q_8iE+p00i_>zopr0NT_=82|tP literal 0 HcmV?d00001 diff --git a/images/countries/es.png b/images/countries/es.png new file mode 100644 index 0000000000000000000000000000000000000000..c85447dc230b9cf527b07b0c0fbc27e79c871d89 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFuZ~S<&n#cH zLu1Qf?RziO-hZ{ac+>dQdE+1dyiS~AICX~k%sKXJH$)yiReSbAd+ScMGv{;<9MOIM z$?En4yF2&ne*X4)`^o3W-@qTg0^fcNxOmy^=kJuCe=@#&Oa1jH_xKUU<3|}!onk$E zhU>z4-jm09FJBhew@>8eO^F-VByQi4y?0|AeFZGu!RebZ-bl*OmW5*5Fta$xzAg2RkY&EM$?12dbjH=?zK97 zpB``|nCViYK)?x;3HwKT(VJ?3LZoafDX z`*j6xxyhb$lYbGR|0UCDyT8$+6vv+>{$EN0zOPJgergc;_CAIQzAb%IJu@?{mN=8s@i&V>C>s9 zTT2}j#VVGETt&B4XNnzf<9cXHafx%Sn^wyd12p7fcI YK|a;!^;3BYt7Wi*|oXr+aqTdl&x=0oRh~8Ex?%|mN+LfcX^p?iHdH8 zzEy=aLlgsp1p|XQ19J>BYaAK$tduz^9S1w~GPHu{`G(IA zjGG;qxiW>{mCL9}+jWwi|6~vUDW1hEb80r1PMM>4?7aS+XI3XK**$shb^D3W)Axb5 zp9CB@>Gtwd#`k|=r_S;`eeU?;mD{gBem{Q2ojJ{T_6*;pOHx;^DqO#&aqxi7nbSrm zPZ>UZXmRP1>6I&HH*Z)yed>JtnDx6ip08hd{`(j3?VI1vp8>yq27UV${`*(z_wQ-{ z|7V>sV7MEh{~*QgQ?bv-vVb#&%;)Wdc6z8C3D7+sZoJo6>RDO(83u-P%*+>9S;y{K;V*u#6wxxD+=<^wi1em7CjtfB$cOem?^OfRPJ~;!%Jr1fC!Mw+tx9nB?v5!qCAg>jC5(^mK6y zskoJ#aDd6g#OKPKH)p?=UfKG!=ggX%MyFY9)B5c`|`Wv0(%6w%W5@bwCL#9bgbN$2EwPk&~vt6^8Khnj6J{Jd%Vl@N1NGlte> z-%GY^D>vS_!RY*K+u~PGI2{)5J9ll{x_h0QpPid;oP2AF=ieK9m>F)KGK!6ub?N}f N*PgC^F6*2UngHUKN2~w< literal 0 HcmV?d00001 diff --git a/images/countries/fi.png b/images/countries/fi.png new file mode 100644 index 0000000000000000000000000000000000000000..d408743df26fae9ebfb34208456ecaef616fae24 GIT binary patch literal 1040 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFKYQlf!Gp(+ z9zFT-yZ3J0x_$QSxkHBzZ{NOyRWMONI$Kev($v1o z!l~87w%RRVrjvJ%wNq6<)O^42S>XxuvWnJL)i0VnW7n*CJ6Ekc%`TcMt6d?hU2f)B z@95JT5Hl}4X+d1(vb2Jgb?v*-a;LU*t;s3q*s%4=@--(nZNIwr;B8jXWNzs+UYTqG z`CJj@97&B_8O?kJ{c?HTVg=n|b(2aB(@I^NW_`O3EsIJ6n{sQfey4!x7A|#mULB5p z-A?{JZb1|MV-^HNPl(T27#iPORJ*C7d0YF${fk$goHlzii&!#?SQ5KLDyMWRk8C=R zOe()(jgHzI^%g>C-1qo;-Z`@ZP<9H*VaxcJ11gD_1UEx^&^fg>&c5ojrT@%$YN%PMtb_ z{P_O;`}geGvwQdMO`A4t*sx*w^5t{q&Yd!4N_Tg6eSJMJzJRed3aAnSp_|t22O7kf zrYYv7{*UoTO+HL)Vj>A58ZRCb#b*?tA_KMHMGo@W;mCC8fFSci8wR^X9C_3 zfn#ul0|h^QecK`KPz@T6&x4T@Z)u3GiM=yU%<&-Omge($&UeI8s$jbDS=iU9y% zO=1ELAI=ToiCh&C_RFKu^#Bk7Tu4ce3**w#l8D3A@Wt|a!Hj*ZiQPa*$uukULI$5r ztg<3~pb)%qHGjn7vKs7_#QK+xnF^`|?ijg6;RxFtByuhOQWO4)pqQaIILGt&O6`j` zDvzHiL`ZGg0+Eg?H5IpaA)aZ(=A`MJ6v#{#BZXq*zSVmRM5=p6%VfqDm%pyhRonuV zv_c~HTdGje=0w|vC*|YsJH4~4PQ7X(SRsPpv3ITgBTZ@}MKef}nhGRHfmmA%nQlt; zMUNgAfx0qfZwX|ifCy7RL|0k34wRvNLJ`QTjdqq{D6h7W-Q#Q+@D%YS4OTZ@im)_& zO+(&0U>8lStkL!}6~+okCwVb*zsn*U^S9XC9NiPx_g?hOt40IhbD#EAQ0|%TbWa&y ze>6B;WDue2hsqS)bhx`hZK>7|FuN>;-1bVPsjhoajs|)C!!R09qJbi*PBS{*uGV;F zrV)c=*rghTul1UBe(3aP-MM~?X-Y{(od!4kKu}CjbxIv-SxCkYvdcovtal*4H~xs{ zTJpC_a)?2CTA2NXUH*nu(n!b*s6aR)Y3^R(9P9Q3jo4Ge_|dJg#vfxI-1Ur8Tbh($ zxI?qcq~VIgMgP~o9|)bynhI~15t8F^K<&!tgfQ3=ac9zLleswq%h7WCF3iGw^6&{2 zObRv2mRASP3yu=MkC(5$I~OCE`~;;i&z8tbzn%Xe^r~)-_$EE*^;Osn{v46b6|-H_ zkacmw_Zl0CC9K~h+PlN{98zRuPQBu7!C-k@V{8VmdH=#9{-gMmVE4K`ja=TB){ETP z^_$bOr_-Xgt;HrC@V!K+i@w8&F=^TPQ3L?H&sCa1U5Gpwo1DsdSQoo*1!iOZakKeX ljXm@7&Yifp6+d$q*8&}156!Q{|IYn;Z(>|3PIES=>JNm|q@Dl( literal 0 HcmV?d00001 diff --git a/images/countries/fo.png b/images/countries/fo.png new file mode 100644 index 0000000000000000000000000000000000000000..1e123760d5a3c910bf4856f627b4749c0f4568be GIT binary patch literal 1041 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFKgz**h?DDp zu;@V<#Z%e_`*n@>=$qcOb=qNVf7sFWsei~7pMdLuVXvbTp2Z}*$jp6FP_ji?Ymct! zNn6+J0pWYR15XARXo^SZ^?Q-0Tsw+QMa4|NQ;4apU?we|~@c`sL%t4-X$cxOeaF?c2A`ojZH>?3u%d5AEE! zqr1E7_pcvkPMcqdle}4b^`Tg71cW>Xkdimnzi|2Rm+`fG2;`wuDk25fwW@J3h z%6f*K{jz|-86lxNva(my)gL=Lehv@6bNlv*U@-@API@}*0cE?&HN;lhP;V0WB8efq=+knY2W5AWW+d&iC) z>({SevSi7G2@`5-Yinw1fKdsI&{05q2uR&iNCT>7O!9VjVd!9$^#F4Ad%8G=RNP8V zIKY&4W)1(vl|kG6XWzJg^WLQ!3_`Qw#8*YHOqpr7aQUvSD;IKVOc9zXy)JxV&eR$6 zr%#?baTc%0rcyI56OG`4k6*TJEB^Ail!43h^l8rm5o7M|jxNtrC%ihDTU%HvZ$@&> zjJRo0`GfVxj-3roW^u><{c`PEm#3EYOl+ClJBNicel!`p6%w8QqGQF39W6^z76iD* z`%Va3xhi;>TXD|&C7Nvx3)gX)9-Q?wi&4@y_wLro%l!^NlVxb#X83Wt{Myx^Q1Ep1 Kb6Mw<&;$U#{H);s literal 0 HcmV?d00001 diff --git a/images/countries/fr.png b/images/countries/fr.png new file mode 100644 index 0000000000000000000000000000000000000000..39bed1abd448a0c8c9bc7895e20ca63578959231 GIT binary patch literal 1041 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFzhG+i?(Ihg zhT{wj#~2uDn3+#9GaqARJao57)j*-z0OUqM^j*qOY4_jLu_V9S&=5{e4;B9#L zM?b%-adBTGBcGgTL1AmeFe<>!``AIFcMK79E2p+m>6U%!3+ z{N;1!F5SEL@Yu1F@85s8ef!R@zyHo%zI@{B*<+_qzkK)Z=ik3yfByXZ{rmmLkFVXj z_4L`ZOP9`Hym;>P=@TbU9((iV)x(GPZ``gXKS(>tK63-sGbBg10`2IovnP8%D4wzK={ z8cQ?1&_I4L+Y#ur}{q*ws@jsQGVN+wXIBwFU!Mr&jjr6_HiG^B&xqFfTf8601ni zmEft=E~>f zE8`Uk6_jh1Rj89Un5^%-$jP|MC}6dJ;EI5>jj3#T3|6yD?c1#Lc4e`+GO)NXa2K)i z6tIfb2*}k)sCOyKCP>;&w(wcu7Pc-RW=*(qHKTGBqjnRQZUe7EIG1Iggv&&AuesU| z)mpJ@?XtG}Ca>~HS?!s-J+N?nWbOWx14kJ4A7(ysg8j&Gp>vl+?%Y?KzfkegRsEN5 zt*+g)`~1!8#cQ8W-vUpcb9??O;Omc!lP4IC9%VXwnCbK>=Cfy5Po88wb&~V+X|Btc zc#j?9yLv_7+BM1Z=Opgkm3{a?@zOJ=S^sTL1k!)7^V?PMk2fc){fUJ&R+< zj4oX?`|!c;`*)|ym#u#NbbIpH;n5?fqerZtKXd!@$N&3xzdyeNo<8;b{K@b6bFXh- z1HOC-`usWk`}er--&4PRP5t{P3mCt^SRMsfL*U4i)mwlPj7i?^E({&4vK~OrK~ERQ zkcwN$2?v<&+^LO?Vg9?vcCO8ynmK=&8=TyxmG!9|yY_5Znpl|Gwr_k63pcE2IdY@p z!h;19KAdxN2phFx4nhi0zK QIRNsqr>mdKI;Vst0PFHlDF6Tf literal 0 HcmV?d00001 diff --git a/images/countries/gb.png b/images/countries/gb.png new file mode 100644 index 0000000000000000000000000000000000000000..30035dd8cccc376ee92ab66d1d92883f08c44ee8 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzF-;zS>vao*?ZyWY`br<>nKXRi%z-Z|R(2mC^h1V>$rPP!7CdNDTj zTy*keFaPU>6?e;OFBg`bs%?BWcj383OP?J*eqzVYS$q<61Z8FmO3xFPog*weS6p$a zwCW0Z&Be+(^OdxhsT*$8Hr=XkxkAVEfQ{Q`OQ$2Qe&_rnE`-D$@DE?^>T@_K>Pk%N z#pLX3Sw#mIEPi+L%;Q5xk1SvH>eSh}USZQ>Qjb)%6*+irm@)V4<{hsu-)f)~hU9)Ze(yO}<-8yjm*_q47Ht%?I<6d1v!K{Xf{kd&h7jE?RuU@oxOHgQu ztY(2*K#!)LS9rp#l*WMux!nVMJta7CQMDvozO91otb-WOwPjG@|m5J zwgab@ZmY0@=q=^+4K6w_B{&Vv=cCJ(w4xJbJ8c$R7b^NcS zWaqJPZT+T_=|A_5y5c;cQ~MKws(Ax6bZq>>-BYHu?%Xh;KfvA|g^RAyFqGQ6nKyAtBKuE8C{1SgRnPA}!serq-ve z-KegfrJ#@v6x7g|q_5wkrIo9!T%@MfX`o-Cp)t+Wv|d-YTuZA)SGP`2uUc2PQb%W& zl~t3GVS|A|i?Q(p3yTgj(>4>6d3JV-oSb^Ctd_dDO|rLJ;^sEZ$!WQlSDl5$Y&W-+ zzP_{E+*bMf&-3)0 zO3S+_Xpi9Z30qdRMmOv?4$x4WrmSTZd!m? literal 0 HcmV?d00001 diff --git a/images/countries/gi.png b/images/countries/gi.png new file mode 100644 index 0000000000000000000000000000000000000000..afb539b3a51743292da6d117ddba2a6f930dc483 GIT binary patch literal 1039 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFuM`r#WoCZ9 zps?T1|Np=LSFc<>e(d0u+%X>pW zU?MN?4k4lS!ors%Bp%Aju9uK_qNsR9L4Jp{^m1wG1Bwb86cuO4%AVKIc&D$wNm+S| zs_GsMjs03$(-akt>*=-1%bzkZcxYj9)y(vgiOB(D;|==yPo11zxw-ud2>9mbcgM}G zPfzz}K)@U`vkn9OGeLoWGBf|=<-N?wIg^pGB{A_rN%4l%)V`pgkG(xR^YibvwH~Rc zIN#X#puhj)!UdPQySGlCzJ9@iA78)z{`vFA_wRS_+&O>l+`oVS{{H>@=g*(tzkmPw z_3I~4>IYEr`?qi3zJC4s>C>l=A3wf(_wLP`H?Lp6e)a0r%a<>oKY#x8>C-1qo;-Z` z@YbzcH*VaxcJ11gD_1UEx^&^fg>&c5ojG&n)TvXuckkY`Y18uM%jeFWJ7vn0?(XjT z`g&lD0OMs8&>;kN+veE-tzk^^c6VXuV3qX%a`t+vSa|K&q9=b|C}^99oowPccEx5vK(J_Zp3{O! zyH*#~qmX9O%-zJ+OWYkf>mn5SughFx#}?90w!S1%|wXz!h{S59NfocKWP z6|0x!zkek?J6!Jow@4RH>c`JUNn)a(zj5|)@N+YA-OM=QeR5?6cc;Z}i(8SiBpF&u rM3$yZG3{+ty)!pw?OES18!FiuCfVsqU-%ui3>0{tu6{1-oD!M<@5o!p literal 0 HcmV?d00001 diff --git a/images/countries/gl.png b/images/countries/gl.png new file mode 100644 index 0000000000000000000000000000000000000000..66cd000ebff6be325db2af8f781aed5c991a1e4f GIT binary patch literal 1038 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzF{}~W?H8|wj zy7kA7AAj)R{>zIO&N4EbVPH7R$asd4@feS@OnCS~QFYHD}&_3s+! z@6piMucdWFSNEWf&T&1xQw9cSjSL@JSX?zTy<}o?-q`q-mDM#Xt4}V@5A5xpJ32mf za(d2y?fK9 zP0N=rpF4N%lqplXySwY_>w&QYjH6LNqY&^=kNpEQnlZ`S-G!lpRn`N@+2iTr7*cU7 zIpF})u3fhxgBSm8o;+JROUvt1k%N=0E~nfwBc~w7ty7n>_Ov=IJQr3b?#(Kgr+4wf zCZ%J4f))fs&z;}fC86Kmu%oujFOO3?KtuazXn52N{{W|R7Mkk1w#*t&-ipe}iwd3; z5*B~`?9Guk3?fBac(QZyR;||3_S&-5;L1f7uA3`vnVMe@pDzCVN5o8t3=QVi64jq~ zjUDy4Hkn<%9u&;Nb&{*_lf=(9mMWu}uQOL`pG^MD$8f_$&sf1olob?Sp00i_>zopr E0CiPi5dZ)H literal 0 HcmV?d00001 diff --git a/images/countries/gp.png b/images/countries/gp.png new file mode 100644 index 0000000000000000000000000000000000000000..e4a6159dcf0391cc939d279440e372605277a4ae GIT binary patch literal 1030 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFziMiB+{*fY zdPcpq&6)Vbb4kf(Q_`+w=S=bQe^^mK^t@{Ih7;(<#&ctyuGG*@|zAmwjKc`b=8(h0KC8>3KIwDlfHk zcJyF*9y1VIhZ^ygI^>;eDo==|nanY5l3TO9n zKD=acX}ZLjddBCA9KLN1KUd28adyCsBK0#7tp9tn&L}gS6=b|?uYX=z=vR8&88(Kq zj0|TOfF$D?M#gh2%x9RHFR-#+WM{v^#dVFB_Z% z@Ml24$AEwYh7ML)4ihBa`!H&Ye9qO->FAmrR;>Z`qob z6CFFQoat)ob6XJLXWs1}P*f6;9cqBP1Fo+_b*$zcN>q!74b(e zA4v&_&Yu>0^G@XX5FU|Nxu3p%<7klz360_qd3B1rkFQ-aByIw?$Rv@lpnwoD!O4>* zP7a$WAkNAaIZJBws+G~VU%#@vm32EKE8#OAgLaz%zw08O$)K?DboFyt=akR{0FuZ& A0{{R3 literal 0 HcmV?d00001 diff --git a/images/countries/gr.png b/images/countries/gr.png new file mode 100644 index 0000000000000000000000000000000000000000..1fb9d5233714f4d45d55ec008f86399685e405f2 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzF?`WUp=&;z! zbBDFnr0A%X6DM3{Ufqt&=P5~myqa|km!_>njkAXQ$=N#zW#D^ z^OXh$Qw$BK>gsk{SS&U%ndIcO-OOy7o?eZ$^*m+eSOmFxRc`Ley1M<9mD?&Rwv?5v4-T&G>$}+7 zd%mh_Q-A-twzh+{wOcwm4mUJx&CZ@ackZo{l7-Wzoo{d7HGB5e88a?Um~d>ugd=Tj z+v@68FIjSL-n?temff8;?fBHG$JVTQxN6n?rAx2RnR9B*nme;+@0dGx*SvW^v~$_A zLkkw{Ua{ivf(5%aZ92PU%ejLG@2p*Wbj_M0hY#PGG->I%b1&x3-FV@`%jL^=U%mS7 z;>DMjF1_5i@#yvI?~We5wRi8){rivY*>kw5sr}Tci${)}-nMPe{`~#u(G&OYKYa4!X+`D6B}?zTc=`VMi+5+wU0$_%Eiit8u{;W}hJbSZA2Xl? zW0JSK3quF1tOt;D(9^{+q~ca`!T~0WC$q2e>LlB~S(`hz#%a;x1}Cp|mz(Yie-4@) zd}(uW_o-8jPG7mxeCG?P95{SdUFX!IrK@>GCVhQpm{>OR;@zv3g>mnn{9Eau81`)^ z*PkS@XJLKw{!I*AxX(dx`;wV%tBf8MWmUB;OFNeH%VFWPZEd%9%{tci?b^M4oS)TA z8Cy$KSa(`fwz@0{H8Gtcx>TjXDRHxG&YL-VnVug}KhomP@`JJU)8gh5eSr6Ku+-`A*+sS2e?X;#Q~nd2TI>y?fSrv@Z*qzAJpe5x>55K~uJRcPtB^ zy+2{irRc@SgC=eA?OG8uaYM$oyFvZy!lrJGnzbur!n(MHhx}R>BrQ1_Gizt&+6!qb zP9`rolDGLr!S-84JMR>3zg@WFcHZWznX670Y`K=Z;bQTQ+r`^&=B>X_w(VN!mdg!? z9@p-@Tf6&K?%FudwPspi|JwA8 zS7YYw%isGrd+W{g)o1cIUrCy?BWuO6vzM;ePgv_cW3zGRGLx?5=Dn-zrf!Z|y038C z*_PvXdM`YG`tsHJYu8R*xN!0M_4`ks-hTM-$KSu_E?oHf?c0g7r?>9hzW3O{h3l5S z{rGP4(e0BKPF=ELSyppS-Q>C>mk#H&CDrzoE!aFGy3o6@Eh)Dl{@}^oTMjMno>f!X zlv7w6-_-8EZbSXeo7ayXJ#ykm#IYkSlPA@$U%lYpzkh%J{Q33k*Uz6nKYjZ2?%lg5 zPo6w{`0&b=E0-=^x_I&8xpU{vo;`c!%o$*u0%LX*5DbAddz0fpMT|+_?k)@+tg;?J z&OuKX$B>F!$q5ITB5t~rT;g7Kc80Nfe1L+3wT#9QwVW4ory19Nn-jTlQscsDVh)P; z67!b zGmQdH9KP#evTn)R_1pK&JbEr9oKxdTmiF1{5jSoHguZ?+wo+V)Uu09@gXdl+UgfOP zJ6p_oIcOpymnK(Xu}Z4nT$_dW_1&C}J(x69P8>ctZ;o}U(&HsO$(E6thB@~b8QQB2 U)n=|;r33Q5r>mdKI;Vst0Erfp%>V!Z literal 0 HcmV?d00001 diff --git a/images/countries/gu.png b/images/countries/gu.png new file mode 100644 index 0000000000000000000000000000000000000000..42824383950a9aeb0d589503c4a2e70328ae0ef5 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFZ?34CQri*a z5mgY^9_f`A?pN#QnURy)=joEBs~#5~)Ma57@9f$jARZy9lB}qcE25YXlC(frEsa4U zmQ^lE-M-N-sKeT?kx4FvO(B6@A%R0Nky9y&TQ!A8J)K82nO`GSSSOoT&Qn-BL);)w z!XR75yj;$-K*_pN)uvR(xysP9RoA&n#VpCxw^P?X&(y2YDyUo6KFdCQlCfKvk!y)f zaF?ZTy@gM$xmT4-^i=ownPwiv_Q9=o0d;QCeJ&AQ?lJuVY4hD<`n=;Ohh#4b&RpP^ zJl!{GYGB%|u$)D~8FNFk=7;Aj49%PqQ?M|xY(-Mp^7NW@vH5c|YSv`dtjVcgpINgi zuWmK%808FVBhk+rP={2418n#+#Cy@>70|vSJ(cmwqSzmq(xiyL>XCUZ(F~5>C8mtfECLY qEm^Z^*GBDHr~LG2?^;>2_Y4dd&l)Zj^PW};^1i35pUXO@geCw-eh`BI literal 0 HcmV?d00001 diff --git a/images/countries/gy.png b/images/countries/gy.png new file mode 100644 index 0000000000000000000000000000000000000000..a5d0e8e52036101ebe941d1bc624d73b20e46c7d GIT binary patch literal 1041 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFH_tV5t#WZI zbdBkZPMMPIl;aTG78qFTA3q^Bd19h|u$F0*fqATvb)uPViiKl_O>9SaVo!A1q=c0I zxQr=D_Gy*@jh=4#4$fJ&9tBR`C9YmYF1}^%vAtn|)!vB{BEuT|qgsN~rzT`gPtKf{ zlr=5cHODTa+b*C)C8o}xY`RZot83%Jh_cB+9m^9M=f`v`OFFZj@7zX#GaCfXZVxD0F7QL`u^vX8z zvm3;&?U1^>P3p#Wx$_(3?;TXVv`yvVVXX%Tv|gMxetOdQ`Yz+w=PW*5b^LnM?bm(( zKM#YSo%Z?vB>Lxr=&!dE_Z#r-H{?HLDs;eH?1YWfF&CAK5!Mg$gWor2eC;jSD=oZF zPVBIb$}wZ@^G?=Ryqs?ZdB4m^yqA&mrZm5lmt&6@U!#QZK{fd$V^>r@0x$Jgx zc@i7_p&;*dVLmWUfiXJ@2!_ByYfe9)BE}?dcNc~ZR#^`qXTPV5V@SoVn!Wn>C;uBS$?$N&L~>3f}6S3 zs!IKwR-fTlzO7!D9tMeqGI5pqubLewk|UFn`Fh21wM9D2B3Uoi&y9PKEhPE=LDB(T z6?IOLSr;zb>7GAtV|Mi9-HuSlC;^Qt;dhNp&CggFp1pc{LU34@yhccHq@AVxEj`o2 zhlA(4IyZ=GgoIu+S!!@l(N_Dm@ATL?{p_>L8D@nUb}orq%ntIrr>mdKI;Vst0IY6E Av;Y7A literal 0 HcmV?d00001 diff --git a/images/countries/hk.png b/images/countries/hk.png new file mode 100644 index 0000000000000000000000000000000000000000..e5fa24f60040eaf5ab12fe407889ef8fa9807abf GIT binary patch literal 1041 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFzj*TK=^dNS z&g$E*$goe5p;q03r>}<2u|Yb$L(d@*dLRZI<>rcy{PZ6M=&!U=o@b`G z!A|XxxBg}ajiPlM~h7T1C;PWqXg@H08;WBew@ z?v%gjX@9f#2~O`4oGye|ZT2wwkm7bH+TmKH-N$72JJF7}W1RK{TJH_C{*vi?Kf&!u zisz#wk1yH&pR@g6r1`u^_xYR?@H)fqb*A5^+`x~yf$y>c-em{8%L#a%6>vJ%?M-3$ z>w@qP<#7)RB0txpysu4tSDX5+DeG%f*0-fo&UDv)xO8T}0^<<_v5RIBXC2k=yK8?= z@p_f!_cbf{LuTN&ypWS|UMJ$cUl&Dxt4Q%}>wE++3ooX!V3e@^oMoE&hw zuJ~GG#iPY@F3y_#bj`B6D;EAad;Ii{ZTrMn4@hxd*HyfE`qY`-yU(0C1B^jnJdOe~ zLZIyLf+(Oi#w2fd7lsa2Sq~s*zo(01NX4z>gab@BZa$5Dq}+2#ebdJdkIY-Ynp%$J zCMnA<&3?6$MP-VPZF8g3p{l@(a+ynoyM6{=J{!Y)x6x@;B5P=CrRW)-Ue}qDjCS7~ z6rb<-aO%~{%MrVFO%}5HGuNlV$#7!XrpZx7x2>e3Zad%6;c0NXD97b=Qq#6}t8eMe zch`RHa#$Ep8hCEf5zW0n|61Prw#+KaLDAVTF6`Z=lV|xN>->)0lIn6$l(Y-ubM#Er kUaw$Y%&aSFnRAbk;oT{{t~4e-PEc@oy85}Sb4q9e04S46K>z>% literal 0 HcmV?d00001 diff --git a/images/countries/hr.png b/images/countries/hr.png new file mode 100644 index 0000000000000000000000000000000000000000..fda732810a411de2c34b57f12b931a98886e2924 GIT binary patch literal 1041 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzF-{a`KH#UBa zhtI(!OV7IaOypNs=o{Z`>bYdW!XoSNNNL+RQO9G;_Jpc?yQu~=CG-TD#Z(m?aCcnI zz|hLd+R4h=&d%P>$=S)z-z^|8NmzK2gv3N;<@u_rGZhu<<>f0hG&)R7*Qu*F>FG_< z)9bOYSYcu^+thTLvGGJ}>-kPjYwYZ21Oyxo3OeHFx69jmQ)uV`Pp|%n$dv(s(^FD6 zsH!j3H=Jl_JkiB%pI_j?@W_QlB?n6@j+R%SIeP5)+fSd)UcC78&!6wVetrD%<=n-K zr_P@J{rB&$KYt!Reth@-{UgVY{rvUo%h#`mj~v;vZ|~(RmoHwrc;e)VCr=(-x^&^s zpWolVfBW|B>+|Q&E?v5K{P?lk*RLHtu>Z~N8z-yEjxSsCq&WZi%H?Mm80r}qY8e>L zva+6GWxc@5dsRSSf}r3TNy)pivJVv%XG==H)YtEnk$G=w`q0ASs;TK$C#M}oM!($L zp1Qgmv9|u@@Bb$t;A=p@S{s{h;o%>{!hXcX{Y*)D9Uu2HA>ngs>YuEvuNfIF! z$q5ITf`UG4MP+qwx;*)^Q8D-FRSr&(OV57Ine%7Q8%fKbs#C8zENq(ft&>luP|hx~I@(w|IC;T@ zU2Ar%n6YJN$JTj`eQm2IF$H+Uc{v5S`Q7xoekd7O*u953$$Ufz>jTpa=emn9@_NJyL$6r3O{ds|WQfxP^ANy%C2 z>X)^(pDHRY*Vlh(pnu!c^sSZEXDzLD78ZBy>^?g=eKj)L;pX1{l{wX;0SzO%L$jGNDDL*pO z|E8vX&dU0&p?z-7+-ntGJL1!;D<|!muwiTC%vsrGMWJzi+c!)+wr^o(lK-nq$Br(Z z4)N771_p?ijxjTzVr4zf%6f)_1L(1fyu4?5c`pkHoDvc`DhYiS+S(K)QAcR*M7jFI7S1B1I378lJ- z&zYEbslUZF{?iPEOC<+}?V6zV`6=4fJF{z&jtGUx9%i{rtWL1pEjJ zdK(b%Cne=iV?8i(fl)jPaD~7w6R$R)9AlEVy9+}HtE>l*bI{YpF{I*Fa>4j8O!NA{GHdIu%wz#^yo`1mv zSBHuPp;MfEVoEmju3o?0IKU&yFU}{#$-*oUm>1o`yks;~G!7g*du-l>DN^T;o;-j2 zG_%Mo^R3G)c5B&Ms^+)~CIeB-k?$@g~_AoQ7K5F=7%}<42AYXgB`njxgN@xNA D(U(1^ literal 0 HcmV?d00001 diff --git a/images/countries/hu.png b/images/countries/hu.png new file mode 100644 index 0000000000000000000000000000000000000000..dc4eef1c4f20f9e722f62b37b96f857a0befad07 GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzF|M%_tvIPsT zUb%Yw*zqe@uQKE_Fyt^W7csLIu(IZ}a+YxNR`Ci{2}o2+$acueH_Iz_C`zYGD-|lM zH>fM-DC*D9*KE+#ZPnE%)6lBcGM#CvSFdN#Vqnr?Vlm0WX}Oc-1S_)+Gq>e#PBWa` z=DYc?_YYVT;J4h*YrdCLlT*O#fY^1hfl~ux7sux8%E{i6UAVU}Z)@J?Z=avNe0KBB z&Euzz|Ni^?=kK52e|~@U=GBW=FRtCVcIDcY^B2#bJbiNCfqiDZre58ir_P*w{`}b% z28PWH4228~1q=*ZnVEO6vTkE#-O9p0NvTdk;<~>6NnPFBrl#jCES@+ytu`{cW^aGg%IdkB+a*WGZPwPW{QX}C1T40& zcp4D!Brxzvc=(%ygy(T_w<9C(Mn}I)PJWh}`YtQ$Rz}8~l9Drr4qZ5Y{QR+Frw<*v zbNTYEixec15XMcSE{_o$vKY#xG`t|GQ&!6AE zef#w3)4O-?UcGwt^y$+lPo6w{`0&P!8`rK~yL9Q&g$ozXojZ5-?AbGC&YU`R3K)IB zNE`*^g}_9utR|pN#w2fd7lsa2Sq~uRfTxRNNX4z>gab@AHiv?_HYYLH+}ZQjIeF5h z2B&!kKeAe$Ox*V_u1+zqaHXWf!V_N>J-TzGW5Iz9FIvvL`D3#{pjbIL)-|%yGc&a` z)Hm1JHlSnb#=Yf-rf3TPuCj`nb$houL+h-l*qdtpGq2pgee=|fYe$VlHBvH@pC`Rb z$WO~kN=(gt{eVNn=vv@3fvF*vE}0q_UAbO-jg3q5LveAzN6wQgGBQ@3I_=fT*ve9Q q!?Kd~i0D<*D|4PKac$XH$QfOi*czo^D+a@ z)ka*)jCj_W@~$x9U1=`3++1**gG80K;4T;0%}z2KT;$igDR1>wKN6^YB20gOpzbtR zt;@-FSJR!&B|9weGdh~&xIN1DP?FPyOwZc|zNa%i?iBf7$o9Ea9C))haC@TLu`Hi^ z)zR0=BW~5kohggFQI~M9Ddkpk>f^qm%V$qtI&PWc7-3+&b z(RS-XtZ!y}-6{yURTy|NFJMEo^X-!Gr>$8JnlnxxIdt#()i+Nc=ZZ4)n=3xf54dvX z)VB}s|NZ;-_wV07fByXb{rlIiUq65T{PE+*w{PFRe*OCC)2ELgKfZhS?#-JwuV24@ z_3G7&7cZVZefs3dlZOu<-n)12_U+rZZr!?Zb9G z+uensgH_f8$l34d;uunKD>>l+)1=rxhaV?7*W8_ZXU`ud=io*sy-QNpp3N#c^v5a5 z$SdpDL|tiua6tdw3SNmjpfK`u^>bP0l+XkKa(8vz literal 0 HcmV?d00001 diff --git a/images/countries/ie.png b/images/countries/ie.png new file mode 100644 index 0000000000000000000000000000000000000000..1943e6b80d1e79de42b390089a40b19bec3808e5 GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFXQ*aiC}&{s zWnl1OV6J9nu4HDdW#z2rSg5Ggqov)g zt=F%oRikCtXJ|3c!gQLc#cT_sRwJuEYrE-o)_v9ozAZd%cUgDrqUp{^M@b2E7Ti32!x^Vv7@<8bg5sI6l zm3PLg?Mc-5RByUJS?frK?!h#j<5_yAatzMq8D1(hIbUFWwb<-em(z`M%Ucyz4{GiH z^tnB4bb8h5_J5M^yH3xC4X*zu`~RC7@Tu45@07rA{eHhE2mYKC@VYnX>x_h}?V*1b z=RBR7{C`F9rv-VxSCl--QhZmYe=5`9Ql80=Cc6h!cK>?3-nDuDn;7u3FW~>*KYxG! z`t{@ci>FWi{rmUl&!1nve*OIU^T&@LU%!6+^y$;Pckf=me*NObiziQ>Jbd`@-o1Ob zZ{NOgvvC0Jb(BC0ef}f*;5>od6U=1M$MZ(o7?O?1A{QL V!SlaQ9Y2D?$kWx&Wt~$(69DhlWjz1@ literal 0 HcmV?d00001 diff --git a/images/countries/il.png b/images/countries/il.png new file mode 100644 index 0000000000000000000000000000000000000000..a9161bbb8e38f8fb0cdbcf2533e101aea993da2c GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&MLS-~X#ut{y*j zyrsSS@bS}Me*D>X=H7`L&o&=8&FosnRk)A8WS>ygaiP-vA{B>3BD$5EPAJzMlnJab zY&oc1w9K^ikZJ1yoBlIqwVSM3_qZ>7YFIGOb;ebPzT=L4$1ST?`OLlPKH->S%hrhX zAA%R$jNSYxYV9lkX{X{hy$_vxId1LqxK)p17hlib^(AZDyVNxg%J+ZiI`OS>&6%c^ z$0qH#w)*nN*;`M{-F9-#;VY{TUOI9A<>2XKr_ZlixAE(*f19@Lym9CL z#j7_?oH_sM-ADGK{UYW2=0)diCI;L(iW-d+^}?*|TSUeE)v;&Yge%{{8*?_s^d{zkmP!_3PKq zpFh8S`}Xzg*H525ef;?G-Me>h-n@DB>ebVyPai&fc>DJ4TeoiAxN+mkl`EGnT{?H} z+*zPOXU?2Db!z$Y<-j-uM&&3VH3U|Qoz(&AVNCLNcVXyYmGuB}4tTmahE&{2PB_5i z;_@h{C-|#~OLLRz)RIZP4NiBOf;>3|o&MO!)!b`L3^a653_Gs$E$I45v1!8GpEl3! z@@{attZr0#<>pK`t=Wa!u9|NNXKsyAfU!WWAVWP`PSt=eC8FZo%pGzN!H$_FQPx)n2ZDcbVPwyGPfakx)5zxBY$ zHy=O!`uFeDnKM_eUOj&1^!MMtUcGz!;?3(TH?E&Nd*;{QKl=_HxOVHtsdHyeo;{tn zB{^wTaO<%$*GUH6)6Iis+J{f@%vv3hu{ff1Q%cL>;_fq5?vsq7mbfO&4CpvrYCl2V zvQ#m6u7yfDgJun@W)-V(JFiKrfMu(M(-c{k$%>|h(sotKZY^3)bsFJIOg%gF0w$Qm zFLX*><(9uKAbW$KMh$~j9kYG|XUGzLzdnPIX{KqLoH91K74Gsc*cR~o`Li=Y4E4qg z7s6Q2gtFd95V#V@e=b4jNxtG-Kgk;f+OMnhAJ$lGO49k!<@l%H?O3t(|7ijLrUks~ z^?B3d{d;=I-^JBEN)FI~EH_UzeHr%nMQ6d0|efS3@lcIrI=RL7X)?e4R`O(F}_Qt{S?%~*ov?;UV$p^l zI%R%&b$n*WG%rV_F}FThk}9H_(ptHr#YJ_g$do6IPOGA%er3I4(>mo=wae;O+bjpg z;B0Q=V(sYV4CVac;_2?f3npybzI^)9-v0W83A5*~Z{90w_MU-Z^+H48^HXQ0f`1AMQ$JA3dg|tbFd`#Yaz`JbL{2+pnMRK7Dxf^68$#`;J{Xx#!mY#oL!I z+qvS{?Gt^QC+5#DN|>6EF*RfQuIUSpEo@udHhc5za}UoQzj1v1?)5tk?s)m(rM!at z?gP7De|Y`s?W2Qhu+GNjQ+W8-xVT>_ zDX-$=U&O_IPEGxuk?}h#>uFBTvHkn6o;!Ey$dM)U=f8XL;{MH>7tWmd@#Dw0Z{J?L zc=7Dnvx^rm9y@ky&z?Qy<>f_1MFj-~iHV6JAt3<)0sj8}etv$wzP@g5ZmzDbPEJl% zR#p}k7N(}ACMG7v#>NH)2KxH?dU|?VT3Q+!8j6aFva+($($W$V5&{AOyu7@eoSdwz ztjx^Jz<314<|rU31iVu=&H!p)O!9VjVd!9$^#F1Xc)B=-RNP8VIKVV#4)fzplMe5_ zBNJ=;*Lkr}gVVWt6D2h-GQR86le1G4{MhNBxNJ$zv@bUj?C&qwAo1+V8IuJ8b%N~t z;c|y>NZ{>b0sl%pyX% z+UqwM7;c|rXl$grb=!ItuF&gSKYl9x*v-Kea`g(A=~jl;Tk8JlGwf2G+>2|Iv(xkc wvn-hK(WFf>SpC};vn%GeOTT;i9eO6q@HgCG-Zt&I?4XeFboFyt=akR{0Kk`6=Kufz literal 0 HcmV?d00001 diff --git a/images/countries/ir.png b/images/countries/ir.png new file mode 100644 index 0000000000000000000000000000000000000000..a6f49031fac803d9bc3ac2e60aa3d29b21380f83 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzF{}mW?x}@}S zbl6pedieeD)b+qcT4%i&vztKNnT|oGT@VKpUp|e9%x2I<9%LHf}x9Sbhcd-dkU#mncvef{$N z>z51X&K^H{kUa zbGo(l?fm&aR<3xzXwi?=tKTkN`gG~i>&uot+_UHBw{LG=zI^rk`H7=P7cX4+_Vw%A zH*fy>`SZv3@6Vq-yL{==$rC3|96$c;+qbJ%ukPKu7Z|_5SRMsfLqPn={TDz9#w2fd z7lsa2Sz!8PIOyr(7*cU7IpF|PNNDexId6PQO{bcc@c8JgX>`h}de--CT3eLXt6RU0 zrI~GWQ1q9-u3#^ouIkFJpCA9f!C}FLD<3*1JKeEST72hblk?$azU*8d3p|R8J2x3^ z_7O;Y{`Bz^b}r72lU?2%M@_D{aG&-*$>GJ+ns#oMt$9*cO#S>rJ(ZK6pO0h^d6kp9 zYW?cmoOkbDz07@`kXMWv(+xwXPZxQX%Gi2oa?<0;mp6H9uh#0~Dk?VG bSjo;1`Om2IOK9Ojke5AO{an^LB{Ts5@sf(A literal 0 HcmV?d00001 diff --git a/images/countries/is.png b/images/countries/is.png new file mode 100644 index 0000000000000000000000000000000000000000..9ce986449682806ee8b44740aa210a91a86b64a3 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFzgn*sw51P1O42-q1KdN?fXNLbk6(9i?H!FwVj zcT`vJC@)`HU%!6Yvb(cqpIf%XlMrIqV?N*yx_IGt3n>hLG ztl3vOyLPW!^&qckLwWTsd!Hq)K`Vpew{aL&EI4|#6Ma5Iv8W&xhj|K%DkBK@H zANQc5>|JNa`Rd9?JzYmCD}K+N^J(S`VEh7Oc@$s`0ns+?k3b2=ByV>Yh7ML)4gs|% zH9J+#!b;v+>-7xz3jz{dmnJj^MCQfSIR+MHdRhi#+*{J=6TIyFjGOk^-&%fhKRd_B z_4V5p-`O@>x2@Z^aqH&QirMrrwG zdHE&<$s|eD7FG2Qb;T@2tx_$EsTLNKEsW}ntlF%t+pRqoc?7HsaGT;5usk4qU3kdy zkhslpkt-rocBG_iOUc-kk-8-{Yj;-Wj?9t+C5KKOI(YKnzGM6L9^HHC)}@mdPwqRq z@ARe9w;tYl_2HF4zrM{BYsWbbX;U6v6woLH-c3o>0UFJiM>7Xc=$*XJnxo_RMX*TaC?D$f# zV8WD5+q$+UPLGXNE_Nx&@=^)#a10L(JG5r?-j#axnueBI92zOB^OV&x?p%zCkDW17 z?6e4j$fb}ePo5cPWv*DMaiWj^^LIur&B%|%AEZpKg-sJlb!Gd#lesme#Uhf`=k+Qt z?=EAeTHBZgr$sS3ZW%V#3*2}M7z9gLg^F24OE^{PB&=uZJIpb4o@(K{!YOE#TjU1+sI>u!>%wI# zdEL6KrE9p1`xTXHnT@(dJbDdMw|W^hGgx-Aw;zcMo+F#ISfXUJcKCGG)*Vhwng;M@OMQf816q*Z=?D_stuRT|2EleeyZD z-|qFRfTALeBS-uzD@|9f43v`MojAcaGSWCZ+bJzAKtn^($;l!(*we_!(7-_7-rmm9 z(P7s%h7D_&uU=Gq_So*@yOfC&A`{}h`1u&pQd6_CvQkn~;^N}M!@~mu0|NpA{Qdp? z{QP`;d^|lpJv=$dCrAV@&dPcVXyYmGuB}4tTmahE&{2PB_4{$42)GYlvvdQq`pu zCc2Z28l8FtIs4fDJTjWJ=uR8o$D4T$3nPPHzYaQkb%%xNnMGNjZ&x=s8UKptn&kZU z%a^x@FH7Cpt=-_{b2e8voh|%l`;{kON=v@_GjW-24cm0?+d4k3ZrwL;UL?=s5y^Tv zciQvUk8@Jq%$gK!wXla*<4WMX7ta&do;|%Vd-l9QgH)@46)I{6PPzm{#Cf`$xT31J vT0%oaGGpmcJ+AE((Bi6 zF5kSf_vq0(4Qi-zuY<-Oy4bugtT6J1_t$GIS1}1$b zPOF^U*10*&cXC_o=D*25U~_=qTEBqx0d5oA?aS>W7exAX`em%m$XK3{w;@kiOIcD% z^8JVR2M--In_%kR;1)GKk}r!v&q&+R)h;GJGBG7CH6uwvT0~JrHaN^*Qd-10h||T3 zBO@cVQkOL=z*~%&VY9CMG9l(HbE8NWhI1Jy`wH_IpfQlHCyxm2Gz%=c-GoFEL^hY#)oyB!Rdx)W?JSJ)$4m`=66r_{=qhKXLMwtee6=NHE}ugqcLp)(x$ro6h$ z#@gA%!pgO>3j#`3bgkO8Y~ISHy{+vV7p^lid(Xh|eVY}&z?D;$gp3L;h-|}VO7>68tf-^ zdCwRMT(Xe3Vk3LQQSrW)_9H+2H!*hK-oD;1$9!Cq>x2f+IYW`dhGM5uf?igqe`zoN z)>rd=V#AHr@`F;02P7ExOE4ZWlDTc8cH36%sh8=CK&y9=PRDZ-zD{g9UX^#Yq4Y#! z`GW=1er;QQbEzvImEMYs3w-Y?3qUyAjdhRCOAug`J5C#Uvb-nISHt5-L! zT>0_+`@etx{{H>@=g*(tzkmPw_3P))pFe&8g};CM_U+TBPai*ieE06%n>TM>zkdDd z)vK2;Up{~S{OQxDPo6w^`0(MaTeoi9xN+^;wJTSyT)K4W!i5Xx&!0bc?%Y|R|IeH` zb?VgdhRd z2wft&3aE%N$=lt9p@UV{1IXFt>EaktaVt6D08>}jr<)Rg7e5LP5=v5Hwz=!*#2Q(5 z@8P*+$F6M*biCJN=dke59E1J@ZdYC3%C7?PZtE2m1jNY%FX-K-vwuTV-_+gi4CVnH ztQiwJ=Qd1O(K2u1?s^xSfD>nDcVE2_7T^+d%Hgc~6iZQ!CxSAQpDa;SSJQl(At`e9 zIG+gD6Hgz{z)jb$mIstR^z%8-#?=`6Bx~84Bt2ol`O{`{i#+o2^K9CoF~!`pS($%! ZIm3t9>d&p({)4>3;OXk;vd$@?2>=XvP167X literal 0 HcmV?d00001 diff --git a/images/countries/ke.png b/images/countries/ke.png new file mode 100644 index 0000000000000000000000000000000000000000..7bc38588be8e29bb7f0546bee5df4d59ff1600ea GIT binary patch literal 1039 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFpDZT6OW)vt zso6nWyDe7MyF9&~*Ve6wjXSPycEZyBvVZ7azn~MLQCH)WU*?y5uc-Z4UbENG;(2cI zkG39WCT4p(`--}{+QvpJYwH!aw&kvlL^*O|iqmWm$yRf>?td$H4U|@f-3|XXWQlEt_|8nPP)M`mBP&1(j`^dMoDF zH?HhhaB4Y2jsR=Es6@58VvdeRnXz8Il}U%A#U$6*)tUV}rm_|YInD5$K7HEk#)K99 z`Lojkj!dZ!^z&WJz+lI~u$Yx~D<`K3GxIb-!95ZZdlVG5tEnweQaWR5y4%ojtARnZ zgv4nJi@hc$`z$S*{?7vf5)>8h`}sWz2sq>6@gO{W zkC)eOFRx%l#hX!)Pvhct`};phO?{n}btNTbfsfDCjEuMC<+pNkuNM_X>g#`PX?fMy z_@$%cY)Q$>mX;;4vEOIRkd}~eu(b^h3d%@LEiNpaHg)QvMT@3PnbOnK)7910+1XiM zUY?bem71EGn3xzB7Z(r^;P3D6=H}+)Y$8e8Cpvh(eC6aj&DZPc*W1s;_4N5M)}NKXjn$_dS6iyOsfD@K#kFF` z&X$>%if^>Cu>Sa2(dZ<$Ozqe&Be|tA^DeddJxgPAP-M^6_D)xpH7~by7q7OCmR>Mn s(VjJPnwE7mdKI;Vst0HbUq8vppj<4M!g za~MzcGhdp{^?9$=nQq3@eXQsE+0Rbqy*XFp&H{;V`|VD3GMsE>c)CRGbR*-HUfxG@ z6<@E?KUvLiwq5A%6xkPxw102&`m@vbR3-DpX0E5R)NVA3Tuc@?6~THjUj1v6+m8Ue#Gw)YsKCH@mSdI07D(gWF&QrR)E%IDv3)x7$s3 zhl|cZPlJ^XT8F(2uZLKi_BTE0XL8iX_)U!6X@9f#2~HP6tTuZXeN1t?6YX#<((ZPQ z)4o9KFPXj%65Q@5xIIbne3azzCENdNPQZ(FpVygwpK=4=X9s-D4SbOu@H{i%bgbLk zg77zm;UCK59u!1=sZIG@lk&bc^<8c1x2CKE@(las7!E43p3>qyq{VwiPvE$b#7Rqq z`|jG;11+uxS-g*Rx)bI2Io0b)lINp%kFOd2FH(IzX9T=X^Lw8e@U=eUU0MJz5`j@U z3P=rsoFfyvfqEE|yxm7D!N+crIw-cEcy)`@>yD1hCaJj}XR2B{DE|MHnR@Ke8m1VVqN-X~ z)=Ym(C71J$O!yvZr(uy9t)`Y>iivp7$? z%)kGZtSDFzkhx%T=;B#>6n0N}wq(nW4GaqcwrpNI(|7j5zHKL`e7SK!A%DSy-E&ti p-Mc#f{E?NBhJuQA^KR^6X803j5M#Jtq7o=9JYD@<);T3K0RX|@LUsTE literal 0 HcmV?d00001 diff --git a/images/countries/kh.png b/images/countries/kh.png new file mode 100644 index 0000000000000000000000000000000000000000..9c94193159614b98f5bcc94cef4e7314a7c5f485 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFKP)8H!Y6P* zRQ!mz^d)Keb6UFh4NW#^>s~T7-)&^FO3&b}i`&<;ug5fN}SI{1tr z*K{AZ?V`eS>}=QYaL;7tNaW#}#V;^dP-w2CYEs~0D(#m~GIy3dH&zL$~&@x_PV71=D`LLP&4kzE6Zb5gfoY%Pp zobivm9}xW@AnI0l;;pRWCs+2Y|MBG3*)?-tUq1Q&)x&!Sx1E{Ub8ha$hg(-)TeJAx z!5zOYojTK0a${=O@3o6QZC-WO!{TC?+nKcJ3k~Jx^%Y;ZS)6gPe3BYd7#eWJ+wD(W#J8C6UrBL)GgAKNWcWP8tH$vvwCQ4@h>RgXF$L;KR;mP0;6~o;0ghYz!N4wImRS!cNc~ZR#^`q=b)#H zV@SoVJ2rovl^dO+*rt_j3v+ul%c`nPP3)SPgJPOoq99}0 zvX{mxH!LcCvixjx3f()oDoxby?Ah62CcBre-pr|S#cFB2pKDs7W0XOu_M~*)8 zE-GefJ@d76Yv@x^k*Oh5u9}?j>1}k1)BD!9POeT-F!15QM#g=1H})_yEYC91pUEtC P9OP?HS3j3^P6Mb>-NZWeZl#n6YBsk|V3u9STqEnzML+NYbQ){KbvEyX#u#cTZfgZO^5E z*!IHeIa3xKZRlEAR5_t*(%Shejx=`6Teh>wyDw^iZT6T2BrZaV|({~@eJ7fNa{JI5|?aQ-D`-82mKeIh@Y|_2^{g*EB-n}EcX&J-r0ejvZMy!W584fG4zRd_fCdztHlIygZ#0@u#JN}M$4Ap+-Wu3}Q zt7TxQVPH7U$J@!pbwNbnxQNgVNr`h35)%Xk@5sqMP*gmxpfF2P@~XP}Gi~jc`ua;0 z6>sY6pVHNNYijzz%4(gK)?EvW^Cl*r?d-lfIqfhq`r+pG-OcTez1?GHr-x2XKfSyT zTU-C~^?mB*_R7=qg@?y4fB)YB0lxwQ-ud`^^z-`>82CLf@M}Q8+kk)zZf+mL!!P;y zeT|QM8X5U5De*^2%IDP7-&t9|YODYCbp4nz2^hb?SRMsfLqPY~oGCyF#w2fd7lsa2 zSq~uRfTxRNNX4z>gab^ME_L4uP7)S=v?zHKmzH$3qf;esahi(jkKaGso=v~@-G_}U zHSGMHyRmZw#bo9O2VFN@$*mD$Hnq~LvaF&ZKA`5ZWpJN5-Szp@3$2;lp57Tuts%Z96;D*AF5S_h%X_8AH*`ZKJHx4U VM%z9=T=E#?V^3E4K z-W#2^JGcBet9UDiWE-!1hoDlQqR|{>ld0;)^`@??^{qRtJ?5M~ckb!)XJ=+kdA)se zw-C>3bG@CqYUizuAGq253-7V>ST4w)L@f=)>%`-OO_^A zt;~LTIQ{T+yk%$gz{&29kK0psr&r!??|eP~hx-2u3-}b^^EWc^Td?1|V4v6i-oHZw ze})FU%uM;#-SKa7bn)ZIkLS*v14b?|ibnyi5cvAG^CnP^G0EHAg`tC0)&s~n z=;`7ZQgJIe;Q&)e$QGWnXG=`4ObNYeTFT?o;AG^Lq$G4`(WanFMW47Hbxm?m+&<-0 z!u16&CS3U7@!d!Mf6#(}==XOjFF!xevAR3s-HTV6r`Wg*L$CYg&W*WzUtsEl;D|}H z*+gcAJhfT6?|i0Ha*Ug!Yh0C4Kt|HdH#0XcJDZvH@{Qj4^Io~^TtAN-dvof->rNL=inAo&yX5W4tTjthR#aDLg#vW#d{M|<3 TztlCZgM97j>gTe~DWM4fHNs_W literal 0 HcmV?d00001 diff --git a/images/countries/kr.png b/images/countries/kr.png new file mode 100644 index 0000000000000000000000000000000000000000..0df561a99300dac225fc795d0d099c72ce9fe77f GIT binary patch literal 1040 zcmeH^-A_^h7{-sG)3J1#ZkZcf&0K{m>!z(W3=s!nQ_PQbQ&Z_C$+cn2Vm2KE12GK& z3rUBLlg*X#bs@<@S$+cwoiiLw5Ytp71qK*;lurLdSH0WwKKot0@193MFQp`7v#SPiI-FMBnP5{6F^xKt1D8^#3)v{_Z^;&;<{o8Z2`xs(>*Gt)EN zs$Lqo=PXVxd*i@jyD~F-b93M4<*D=Y)fDR3O~S|5-OFu!grq^9{#<*Z(dk9K0ZD=IzkZS z;NTz{jYcAoP$(1(1_ObB-|yeu-Szo=Uaxm!V`F`N-Q)4N-ENo5wX(9}bUGmjvfJ%8 zn{8=nX>oDUYPDL>C(P#g`T5z|S)yyjnGMP*&l}aQMu~;k;iG)I-Kp^1pcw8=*!{M~HwzjmiG&eW1+3cpK zCKij;(9pnSG8qg8jYcahEF=&JXbWf;|K}ek@Fam^LQlrkl~Bk4KLJNY;Y%^Opz@iM zQ8RG@kJm_7?jfYXL6fP%fcsTIik^u+ubmW?r`5t?PluH_FbKU{Bi+c(E!hF!VBO_1 z1)Z&WJfeH0SIc+9>;D$+N9oK9V zp)hk{d}K#a_M+0EAF=~>Bb8d)VosWA_Oju`X{PY0tazD?K)c9#x$+Pn_7KH~j6l5-p z32)2Gn3odQUs1R!FJpFT{?d%(NfkxQbJC_&m#!?%om-GStFm}$N#4BL@>Mlu%e&h) zcQmi>YF%$;kY}o&W1^R3ZkX%gRF@Px&ELB+HK`#jrPA8G*xJ0v-MONveqC3`awmt1 z;-aqR<{9y6(`GJQuxS1AooBZ!*fnw8(b?1Hx1Cs2vvbyjSIxQ4yUIT|WUq?!-j^Bu zvbpG8NBP9Wh;Q51JYKb6yR-2DZ;J*))${Sb*9#JNw$>JTxE}6k*;rTzj7MN>jslWG z;5@U_2cQPVByV>Yh7ML)4;a6qP(T z%_g8DG9srdLDaf^YVpDh@9Z3v0FBj7)8eD_-GdHVEA3twrzN8?W#*g6Y3liL4@5?HVG+5+yTS01`PQ!-z8=$8>xF$}=W?~4@q#&4L}>cFSsIVU*YJoGZM|T=rR2-S k3)egY!+AfI9)2dv;Qmto6*nv2b5KBdy85}Sb4q9e00cWbkN^Mx literal 0 HcmV?d00001 diff --git a/images/countries/kz.png b/images/countries/kz.png new file mode 100644 index 0000000000000000000000000000000000000000..eb7b9bef2b99b95be3d669c6023dbb4346b97e36 GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFXJ|Xa(0+!o z;|x>BY39yz%w6Z0JI=6nUtsMz!`^+7v+FGH zZT}y~_0R2B-nUU+4ssj}B`UtHQF8=ss#hltl3UQY8lJ8#mPq?OzvTCcbSy=TmbyB#;xO7Y$; z2VsqnTS6y}&k7BmKRYBaBYn|QCXrR|cpfA?JC~V}_qx;gdT=-cm#Fzq<3g?ujiV{Y z*j{I8oMLJ{^*iE5W$V*k*}FMBrlF}S8!FiuR=4Rn1~>bgfx^Pm)z4*}Q$iB}7Y%K= literal 0 HcmV?d00001 diff --git a/images/countries/lb.png b/images/countries/lb.png new file mode 100644 index 0000000000000000000000000000000000000000..44f9e1bfe35f515ed50884a0b725bd16b14ccad3 GIT binary patch literal 1042 zcmeH^+e=dc9LG=2VO|Eq3N#zJrjk?9C~w3l$DB@=F40_SVTGV#P@rj2iGf|MK<%ZA z*m@Y13murZl{(GKJUd4Zn=UW4*_p06kDb-7Zaba+gx>qX_xI)d@O}Aw?~C%XXhHjf z005u~vUvrhhms1}O(DM+WIP4{3Lp{|W|EO02=E|NeVE;IIM$lU_nZ;?N=oOIW zU;lxkPKRT4WyR<7dA(kb$FsAu<954UE|=YIx7ln~s};v_48trIi`i^8nM_8b(O@tv zEiLJEI*mqyAP5Y@5Co}7d?2V&siaaVIU+gb|NB=0EN4kK+1Yh5H;V_{qcXC|Fe>0> z6gDhfDj)T0ZGFLN`|ha`(oV%Q6kJI&*ZwK6>dpNOP?(3^I*kirPcl2@X6xI6^L3Xo zW!swMK~C4)@4y>deeDzb_VI>FH_gk(nz??h2_N@FS3K=77VS5eG{*R~R6jfBFP+YQ z^L9pXG^HNTrvz#1?fIQ-_N&)%F)O-xX|(@d_B14f^?GD+b`6AQk4#g8T86~WOTP^E z%6q3i-=PNd04)d9A&(MjIDV{4O7Bet=Ungg0ASUf=zu?MoBqNOWajbSbIWi40lScu Apa1{> literal 0 HcmV?d00001 diff --git a/images/countries/lc.png b/images/countries/lc.png new file mode 100644 index 0000000000000000000000000000000000000000..6b0389ae921c2e79846e8acd31ab30ff7fb3d215 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzF5B3kNDep;& ztqBf{4GYPfG-0`=X@#|UxwCz}gH5H6M_Y2-{P2)Yf1j#^m`TwQ9YuL7(o<&SX3fve zn3J6`D=EG=KWBbYd{0T?vf_fp$q7C6)tl<7H`G?Ht14ezTeYUSVRK*i?(EFoiG6#g zOgu1o!v2`3vhvayM*3ySik>P;UiLP1wpLXRwpDJLWsXJlu-oV`oH1Oz`q3b#uu}PMnjO zwkSDaMqJFKkf5djznbvS*07M~_}KoKsIJ8LiKRtr(^F@b7OlxlpIuqDAuVNUL|8*& ze0O8rj+)91WhE=>YqvDiZYeEZ)>yZ-w0LQK?WVe#jSY31n;JGYHEif;+ul&Oy02$X zU(e3o?j4gS?oUZBGd3)Ca%}eVEzizc92?VaKLr6r}M1d|gZo@`Tmu|sX^M1`-%tzI2+`*$T^-$KWS8)WBJ zimYsrc(+S`-wf?vC!9{N@{$nc^>nkFS0?ajx9Oh~ZvW2t|2!3NVws8*Ln79;jfapOq`#l=lLPhFyC{$eY1PFK9SL}I~& z=#8ruiStM2#_HuKmUJ~q1ZV`=hTfR6KIz^a%S^|@PeT737OpAb%#Q7y)oHx?=He$y zm{}X0W`6AZH7#^=)i1TsRi3Tv70j((EIt-q(z~N?shLde6#My+xwYx6#pju7=KeEp z877ylSl=%kaH1``d+FBI+v{(A`R13#9&Vj;kC9>a0>j<6o_?$VdEC?0&t;ucLK6Uu CQan5W literal 0 HcmV?d00001 diff --git a/images/countries/lk.png b/images/countries/lk.png new file mode 100644 index 0000000000000000000000000000000000000000..2f2c48bc7dc9166b06424a7bc52183eeec7395d1 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFXLDwd2ouz7 zk{2!J%-fzK62PTeC!w9CXw#=}QmW-L#lp4CI&`5&%!+`(DQ=mY;|jK>mhH|G4`2}Y zXE^iF^vD&pPe1Iw{BrvJ+xP!}|7XuUfBpUTpB%Gr{54!MHPv!;j31yuLo;S|{(lg;vuGjdnHZ9WE1i zFxPEcGQ;*%#_j2>yEEB$=LsFDRzKEa{dkVw^96wit4vme^FHafn-(JdVrsy%sR3sq zm^TNoo{Q(blB4jj!Q$hTfHPqX=OUQ5`Lq9BlJb2)>PA<_CoNvj+5*h)IS%czfzm=dY0c(Nrq*ztQ*t?*62%YGM7K&V|pXj zZG{x;9uvj&vbP*Yo=qqD-mV7-aS zB^Rd)PELF5?Jl{w9d&a%>FIgH-~XDw{}~@2U=#x*dK6%Wfa;sYh7ML) z4+>D&TVc>|MJ>~npPT%r!cnO z*!lKxZ>`!h^{i8oEK9eZVdg62vT%{E`o8ptW~a4k>Xq|sTpzh^yGmA+wJ%@QxwG|G z=@|wtPR?5{uXcZDo2BjHb^27eKRegPkCARKs(em_O`C9OLSW83Hjziqjkqs=oHb=~ z=G*-jyjJIF1$49@HgP*&T6BBPlcsYF(~pHM5a3?zxn{A~yEQ*!i*L`)TF#REnUBGD WqtVADQ|vWC{`GYAb6Mw<&;$U#XhtCb literal 0 HcmV?d00001 diff --git a/images/countries/lt.png b/images/countries/lt.png new file mode 100644 index 0000000000000000000000000000000000000000..c6252cea6650cdd9568da3a6183bcca6dcfbb315 GIT binary patch literal 646 zcmbu5>q}Ds7{;ID+2+~hY&ut&VXdO5bSj9~K8U60K*h|!g3!#x0#{~7^iyO?VC2-6 zScFtW8i6-72_w*`=u;mmLwBDEDS4?Cshiu|@o(ti$Md|rA6{Obw$hRUUJ<7Nz#9wm z%Ea8ZHFK=!SBj>^1#`W$s65~0gvSlH8!i{@PWZfV*zw^#0vlW~Ag8c89MTYN4+XVL z3k;ExLJ|r_5XmVZ`?Y{sikc<$3~6SFw-fK7XeX(C6yu_(k89Ef5@7|B2o!OZWCE${ zNYg;NdWxy>bNg1YcLn-Y>{-UnMZ_;-*AHmikZmF|1a1>LLi8qL2-+|r{Yaftrq0RJ z=J~XFW%@T|rdOKoM7Bqo;gK1>pr=#S)2ZyXD!Q$5n^k4&&~|m`tX5syEp1CH{~`%v z280Z$LZ$1`3PygYnrc$9F+5s<1jWU7EvvBt9N5)sK?R{E2XEHYSN zFb8-Ucp_kD@L8<#zZGuowTnmY8S`?>o9t(&PHNd)9VT};#x0Il8Z@+uNLGPjift6h&F((cxa?!Y()VREZY5T4 zES++>WA*2jWv^@J-S1larFGfstkyk6eaAajy=$0rZSv+X{cB!M-}+_Zx)*29Up{{F z?9bo-K7ILq^wYm8XBcq3wmcN{wb{iROGB*0-?*81- z@rS49F>CAp{{H_01Ahht{Evuu6BP6=IQUz5`0tpQUvY8YQ&azEWxY&F`kR}3cHh2> zhYz3Gx9|4Zv*!;TdU5O4-3u4~ef;?K#ft}5uKfM@@zb+sS5BS!|K-caXU~3o|Niga zzdwKe{QC9l=g*(tzJ2@j>C?M+?_Rxn_4Mh}Cr_R{eE9IjjT_glUAuJY(uE5b&Ye4V z_Uzd+XU?1gn(+TWFe*m@sUaZQod--O42((M?k)@+tg;?J&VEl9$B>F!$q5IT_UuWz z)cr}wsdn$orbRP?jU1g6JzH5@$>cuZ6CO_esCtrI-oAbgQ=)C`mGdFIg@ z-E$gD{I+@*EOkqt<(RNDuymPM)}GMH)&BXLL(4XXl&lXf-WE|g%PVbPZ2h*Vs%60i zCyFNQnzQWaicOcc?mxU{%j*j_-(9);{QUKgw;na|m^JfTv3s|-b+jNN9wTjyI z$+-5(x^~IBOjPjbR&blFu^A z$0=#4M`pKe2Vxuc$2RPau00UfxHqUeC6z!vu949 z`SC>lAo;(SRAYe3&0$PNCoWovupt+1m-tI089jvk*K+ZN#7srr_TgeFrm?9$Q z3VRnjz4hs}&|&?%=(3~JpFmYsL%$feH_w>jf;1%^6y-J^N~%oE6La>n3;$@5YPn#7 z`?jcQ{i3rQJGV~A$XT_>Bw&S`|Mp3qd-pgwPmYXUzRQbS<4VBwJJ&8=y?5(U#O=uY zSFZ7jXr1OS-mrC}IH&(<-BZD#UF=*dE21S{NPo6sJEfxT!uE4FbF0b&y;D=B@_Z|0 t=CUl5+%%gpcFL560)j#hUN)VzW{CNu747x;N);%WJYD@<);T3K0RWHSH=6(e literal 0 HcmV?d00001 diff --git a/images/countries/ly.png b/images/countries/ly.png new file mode 100644 index 0000000000000000000000000000000000000000..8741c4c76fe3c2370a9beaa901c133c98a7429f6 GIT binary patch literal 623 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcX*_=LCux&QzFXDEwL!m| z>0DpaIlcycZrXMBTGh6CO-{NE4qBzwRttly76cizx)`*$m~?v@ce>jx3A32$XV&ZG zv^>gclAlqXi`%L=$2np4(}SJngnO+`v}*UYZuj+FpW?P4+IL-w=aM*&MX~-HQvEli z`L9n4*pTkCJSlKPy5Fjl!1d_?YtsVOqz0@>3s{*Nup-rMN@V!D?6@sOahr=GS7fK` zs7T#fk+G{fZEHo=?pmXE*OVRQpunLeaNqw{2WUQHlDE4HLkFv@2aq$@)5S5Q;#P9P z0j7wEC9+A*XOHZdVbQ8$x@NC~)1$D!M6)29GjIL~d5OvWb5L~L+fiX|$rxs47g!lA zZXdp2LXk(whGhoq+S@yN_U)a&T{qx_VBUmXTc@v|YZ#!RCX+Xzx?%H9#Q+VV90C0c z3hMUZr!90B1WcG^z;1j&fw@{fKUz3ebb-JjSBK`35Ya{_gJv7%xo3N~h^B0;WM{bg WS!%{rcd4(SQ1Nv2b6Mw<&;$TXT)2?{ literal 0 HcmV?d00001 diff --git a/images/countries/ma.png b/images/countries/ma.png new file mode 100644 index 0000000000000000000000000000000000000000..a5d9234e3b0308311a709755fc6ab8a44484c980 GIT binary patch literal 1175 zcmb7C`CpWE5PrVj?|UpSys#{+94agdCXsmHg@(%Q60Af}c58xRrKXX1q?Tz#_i1Gp z-M3+#!4=Z7j!)P;!Up0KK@gJX7{8|1iN%BEc8F+s4n z)2<+CV1@rclFpRmTNNkOrD@CJRc-71y7fK-(Z1G5@8N`?fko4-0-S`{2^}Kn0VaV_ zpkFyhM(b?UE#*sNSaB@57=_cpC=NkKj9kBjHZ5ePVD$N6l*c3`6O{FXI0+^NOof@r*cQ=p#(yGXVP{#2b6GWAZ7c5*9v3SYSWy>R1ti;Vxt5&axj){$nPe@#=Pr4;J z#jq|Fx2D~eo^ksf>+ihl?tAXN@BR%NAJ}BbMAqg9v$s6-@FQEdZGUvf&c|{d-<7+2 z5BBbRV*i1IPd;_%>BC2!dG@(|S$TO%_xTrIeCg#^UVZKLH{N{f=-cnSd+fdUKll*G zKFa_2lTSbU{EIKY`udx1zx)39t{)2a;KYd^fBN~CUw=DUkpKIsKmPpdbnYfYA&SnN z{k!;|l5?f!3;r#;aPd-k`Q?gAR8`Naxl&uVr#`Zw(P(J8YA^;jx1hDH-DK|Q>{54I zdU~zuy_vR^ef?~cP WJ|#8saAe4JHuUj^xZ^P!4*drhPK;;( literal 0 HcmV?d00001 diff --git a/images/countries/mc.png b/images/countries/mc.png new file mode 100644 index 0000000000000000000000000000000000000000..8dd6d29069c525374decf238a9f6e74ca403baac GIT binary patch literal 1040 zcmeH^>q}Ds0LAZh40SnDo8hCSgHTg!AimJFwzj!zQ?JgjiHVet6br%+`Kd^dj3O<> zib_I;iugiBG>5NNlX>r6+>JeQI@{8=HE`hC=C<4Qf9PWe&N-Z~zw->PD5X*oDF6Ua zAwH*?=vcy05hNmSBJ`I4KmuSv4VRcWj>|3=df~#ygoK0CR7Yl}J}u3~WR5Zz+f1fAH`iTI za8y`0n~`BDDDak)_}OerQIRG;e>ppQ_ex2C$J=MILSMo3gqN4wxLg+mIr)6N zvN8n2Zh;_JRdrld<%8jnQ0Rf-Lm0+*JWp+{MRU z!>CxSo0zaHE@IQuE}2X|KJLe`eW?^T8hu)=eRI=qFnA4yP$(1(1_Ob>@$s?W@Avt9 zUa!~V@f;l;x!vx=!$X(L<#ak74u{=tKR7tB*=$y;)nc)j&1RFyWHcJ}dc97k!!S&v z(WupGl}e>lDisO^N`OWXxm+%j$)r;0>guXQB3W8mnwgmy9UUb;BA)uMe@?)h^7Mo( zc>8)O2k0f!`NUX(IINm3tLRJPtskT@ww&F z&{c-$$687&y$yT>aqkJkPp5tAA7ak+t$c{?86!PXl0ob_uJd1Ce!6DNcz}b3z=f;%v+epY6q<&Ben-Q z3lG5_xudQwaeT|I5q6e2jD^cj*iJO7Jl95k_d@iwev;l%te230a6wim_h*OUgcZcC K;7qX_yZ-{kOl?X4 literal 0 HcmV?d00001 diff --git a/images/countries/md.png b/images/countries/md.png new file mode 100644 index 0000000000000000000000000000000000000000..9d9d27807a03b0334b2def2613917d0a04ec0193 GIT binary patch literal 1041 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFziMj6AU?&y zdvie2(Uj853<6QiQq!2Frt&J!kT+SZXw={sw#~|Wfwj-P$n5K#H_-9nn35(aYwmGY#FCdr#GkTL3()GAlETWa98O3S9p z!f%6-%M{zdg&whc+#**8q#g>-IUZMZCM0cZR_*1?s-q>XXEf|4m(~ZBRvXTm&$V(L z|FIKXo40cBJs^1ctkkJ92DNo|XU;I3JI8$H4C~pmoQDqaUb-X^70LbNiQ<(j@;i4) zU%sOD?w$U_hZetnIsO0d|L9;q2 z@1F%;IK+DGB=7CB5*H4sy}IwVVx~wzhRCBUPOtC!UOMJAwbwH>iaE%GvoV{YIhVbo zOnpw5byc2YnkPd;xZ*M!){X80efqN{sQN9VYn-YElvvqpxOOia!j8~?Dg z`{m?x%gXA3z1<%-x2H}{|Gd0jxw-xK^?m2*`QP9FUqHYoAD_R0f#3Z6eg_8r3>l+(~X-`fABEd&V7@sd`kOO zwOVt_lPj$}e_~~G-YRjgwpKsOz~#AuYs1S(Yc}?o?xLkWGwcL4jx1I^v+CirIkUvX zWAB)kdYK1w#K*TEJ)xtmZf@Y})+tq$1L|wGtlhbeOJj+G q-YLcR?;bvVD;<34Qb2I$S!;%>U_*|H`F%;Cfbewnb6Mw<&;$S^Iy)}_ literal 0 HcmV?d00001 diff --git a/images/countries/mg.png b/images/countries/mg.png new file mode 100644 index 0000000000000000000000000000000000000000..e93f20e0a095bb44add8d01e4c9c19c25a878f09 GIT binary patch literal 1041 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&MLS-~Z#sj$gTY z_1N*_SFc^Ya`lROEtg4)i2po&w>BNWUQ_E{3CDg#-#Oa8y@v6t?ZReQg-*1}+2)(J z$}@JRQ~uUK^L%OVX==8miuM)C&b4YTbsFwXT9J!Py;^nSmRSY%8KwQ zvsc=3x56y}Ict21wg%>{_sd%9@6)d5-)#^&#WZ+=N!%Q}qV4`gTLbj+nC+@~eL7_0 zX6T2t8HBeP$Ml%xFL%nF?^dq$ulAG1gu#SqHe74~p{Mwzv5I@87SV zKYx7x{^s@TyLawfx_I&L-@m_p{rdj>`?qi3K7Rc8=FOXzFJC@<`0&P!8&|Gexpe8$ z`Sa(`ojZ5-?AbGC&YV7ddiU<#n>KA)zI^%IxpSvXnbO_eU0+`hj5=TpjsmhnVA|FB zO+d|zN#5=*3>~bp9zf21PZ!6Kid)GE2bh-m%sdel7$7J6Mpi^{_KaDKLbI-14~Pts zcqT0&H+jOOx$Gjd?%WRwkBt#~ATK34f6mPLtRk~6oVyYd9P&z7NOJm=d9x?8i6o`v z*+qZ5;L^8C#nss|uRi#D6Pgd6>uB|LP z8l8Ok=GxjGnlq^@D{5Ao7nhO4!fSo==J^@gRf;C(hBC)SYAz6{F83Fo%{P71#I{}g g=FQo{V)mYa;q4#8ew%4CtwDj}>FVdQ&MBb@0N0yLi~s-t literal 0 HcmV?d00001 diff --git a/images/countries/mn.png b/images/countries/mn.png new file mode 100644 index 0000000000000000000000000000000000000000..9ce7bc9043112f1151cb3016a53e846b4452eef9 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzF_itPg(7ZCF zeQi+7%9#GGQ}^DE>Ry*VYhTukoeir`2J~zWo47q;)`8rmrz$sIZQXsZ_t2B3O&9wQ zKknXh$9B>|n~4XUrX6*ha>#x5Nw0Zl0_L3zTX8jR{hg%E_Y3yDtT_7Ke9954smH9Q z9kZHx#Cqyc>xuhqChm8fbH;J@X{VXT9i|?3nsUH<$z|^)m%`WI4O)6JeBGVE#b;A? zJx|&BEPMB}^euM_k9?>;^R4>C$A)v?>rQ=YI`idtr~2)s9+xLr9G~d+W@GBv7X2sl z1KzHP`>;Oc)258Q2@J){NEE_cCY$y%RRW^K$edO0Kf z?xe`QIo2m4j+uxaH2Ykp3c$*n;J<;oan*WD_ zh$q>hZwjN{R;GMy$*&M#Xp!RjT9)#mJaxXl;;V!JU=#x*dK6%WK!L}f*FaImByV>Y zh7ML)4oXRX^Yf49u35eA*zJjd z*DkP$%#xO{%9onHt!;)_e7b*bwrxO0 z8R9c7gP}m3xk!t-P?Nbpo3%uTwOEI>P=~WbkF!{xx7wJu%7iOWS)k6GzuZ`;%3P$< zLZZ$_Fj7mR)>gK|NwLRWzS&7S-Auj1Q>n;KG2cdiMu=jTwOYB8Mx~2Ef1v4{NbNcg zt!g*DCU4yaFRfA+gH}I-7C)2jAmh$Ji>VP7QzI>=M4I)6I4w^zs`GVQmFYM;(P>Vi z*V*(U_+75@*KZad4cPT0@fA;tjrHsk?%Go zDSTaN+?JZS%{3`I8dJA6X6$Os-qW77yN$t3g0)18tyr74)IhewLB7dBsm)n3$;fC% zh*7)0-I7GBNfC~766~kP+E0sio|9>l+6BDzt4zmrfO2v&GElWatWgVR!sqKqP^Vw=UhiMYm zv2W`f6dl)^$hYt6d)H}Nd*-5<-ZlqCSAP5NmriAgUHdf6jaz)V#exZ;4a*bLnd7f7 zc`}K!@7%Lp4hwnS-!QniYT31uU*ATuUUR$UpeS#BQ{dq<&Aqw7zq>yrFS^p;l&7U6 zbFkC$W~=DVl^?5Sc{wQ78s=?V@Zrm*M~}|1#PX(AE|_4VFKu0)k~Ct@S1vo7%1cg@~uCpUXO@geCxkpCoVq literal 0 HcmV?d00001 diff --git a/images/countries/mp.png b/images/countries/mp.png new file mode 100644 index 0000000000000000000000000000000000000000..9523df6e0170499ec84f630f6a4584bae54c2297 GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzF-?we=mepIX zU$}AX@TrXG*7}O6nTb8Q>FvE8i+650=V)CQ?AM-}*r}mhp{x+*?ldJNU{Y?z*07-7 zqP*?x%?D@C*e@Knka$NM{wB+^iF^e-(Hzp@6PmEg>8q^aTH8VeZYfk3I z^pur_x!VhJHy7q@iI1IJTeYvIa#u;wx{9*RmF1foYInCb9c--Iotr(Wt7B(x_wJIS z=`*GsShnP(vSOv0O0AkorLK0ZjnxEet5RE=3SaN;@X$FCVRHif`@=(L#6&Id@oq^> zSP>gDFC%SrcINuR{2hh)Tk~?(7Zz+yOqg9(;%ePF*^D_~hQbhw=(mlvi%Z&0Cn1-0JAs85P^+>07*G=b;s= zcdlH$Y2wV))g9A|`&PEiSrm|&ckuX$>Fby5yS;zv`r3wxS*LDpUAeex*MCcWA&IR`vl978H@ zB_|wUTC&tMrfF~X534IlA}qWzu8vMxl8#qnHmCc|Ju10A_x(#&5g~)`-`~zWbnVtT z!^N)mb@in+mV`z`8Pqnp)fMdnT_wxU2|9{VBfy2 zZt;$`s=KRBp7q-n=CDwR|Lmr?Z=Zhl&b%Y6eL2Uc(dlPf*Q7n4m3Hku^1MxbdDIKW z)}Se=$%|`e%#4Usx~zNFN2tMRRnZ@#PhM7ufsAENp2s?0-Pps-a7DoInVi9&{UA?! My85}Sb4q9e0579g>;M1& literal 0 HcmV?d00001 diff --git a/images/countries/ms.png b/images/countries/ms.png new file mode 100644 index 0000000000000000000000000000000000000000..f92b84d512d29c18ca4e190413dead45da6d8cf4 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzF-;`ajZtC)Q zkLbDeGwvL{xnueENk!An?YP(&-kBDiwSD!Wy0q!1_dVRa`eaVr5(mRc5nl7Bbzh!6 z>0(L#L_4D?0j`UjESCj&uC=#pi3#58=FlA;us9-cNlfU<)VOVF@!N{CkJOZ&GtiuF zVX)9lZ>Fi<3{$=7ruwtY^ke&OKCLaizBGVrB7}+VYFF<>#wPPQ*se>}Rjo4hMIb5lkA z;ik?ry;II_J#&BB>YX#U9zON*+n(zW58QsV?aIyNhj%XDxw?Puq{Fw4_bscOv@EH2 zM*M^s2~($aZQ7pvy1n>CU-hKez>8@iUz&0c<;8#KEPvfry0fwT`=+Ijm&{ll8+b6l zsnJyTT1om&PrDLVr^EGiz?cQb?~bp9zf1PPZ!6Kid)GE z2bdyubgO?X{4_m%#Y?H%)on)^Tc3UNpKFu*%SO%6H~9F16BVfoF07HP6|Po4Ge>zv zRA6{?@Ddggq15!*hYp{Ko}n3d^UAG=WgH?&qGB_30}dQa%?l2_e+-Vm^(L}%Ej_v`Wo5Qx)NZyXUrS1sRWP?s`n$H|3a`%GX5~q{c7NJy)8NFl z?Uz)Q7+>SVPR^T_`|6Aw6xEe^bA_$HUyyjZLcmhqTr=k$Bg5`{hRuN`=Q=&TSx!^ literal 0 HcmV?d00001 diff --git a/images/countries/mt.png b/images/countries/mt.png new file mode 100644 index 0000000000000000000000000000000000000000..7f35e8201b8640e8d95036895af592f1820dcd56 GIT binary patch literal 873 zcmeH@KT8BL5XA@9LJkl70}6s*p&)|jS5S7m=nTj?Tm5Ox=5V+;6iYSo^vl`pfoTZI1fSusSp4uL&lMF6awQ!DXc22Yt$Nz zL2J=D^d3V%jO!C73H&R8owt`!Jg}ChyZy`0a(t6qZ4~3zg{N%k@oRB*|9E}#_Id99 YG})d4_}&_xU91+(!#wMzqrKw#2W(=X7ytkO literal 0 HcmV?d00001 diff --git a/images/countries/mx.png b/images/countries/mx.png new file mode 100644 index 0000000000000000000000000000000000000000..5d481f0678645656e39e71a886a35062c5f42230 GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFziMjsXWI1N zv*$i|_3GJ+7ssxhJACSxP?e#2hYLfoB7?gKbAcjju_|Y|26u@jZ>bhynpB;+e7lW&leJ{Bo^rFjVz!w&o%Oh75r0lFo+g_Wot08qub=K~tg8l6bd2$RM!py~r zR_*>N+p5yG*S!1op{S+o;HksAj_$d5`*P>(o+%5bUB7qZ^`|#m_HI3K;pDM%$G-pg z?w{tJS)EeXTAh#{(=)X$Dba5K?hPpc@>!9FiIMJM0WP(rIXA9eiZu{iw`}3zHOn@w zT+vfq^+Zu|xwP~KMa6ge`kR!McdDuF(a`v0YPw%b>xi!IK^>jrdU~e}49*%EUNSK` zZ*2U-&hD3!(=98j2ljS<+}xfzIsNnUdgbQ!-`Dq@r{{lv|9=4ipL~4&1_plf^ZOkb z_%k5jMq1j#f`ZpIHD9~Bu2xk&ZEycHY101%3vS-H@$cWizkmP!`Sa)3uU|iZ{`~gs z+ow;T-o1PG>eZ_!Po6w{`0(Dnd)KaAyK?2qrAwDCT)1%V+_|%7&z?DR1{i(7NE`*^ zg}|Mpt&f2^8I!!-T^Kr8Wj%nL1D-C9Ar-fh6Am!>R4zH&JGV;RZ?4r!EhEM4EE-3Y z*X68uZ;^QF%E`Z14I__Ebx=&KjOEsyesbYM;a^!s+}d3YPMf6IW_ii%t5X!r+4?he zsilKrsB*5WWO}~*e}}MVlRoV!SukN~U)PkDy}R3&i&rP7G6rh}c=-2v2b{QOrEub4 z*HR5@T}h24ddE*{CtMa0dvop5gvk>{*hPW_9vcf5zI~aK`)-B5e`h}%m*=PA*`2pa lw;FCMzrIxMm|Nm!J_cb0gBd*14}OD!#M9N!Wt~$(69A7VSGE8E literal 0 HcmV?d00001 diff --git a/images/countries/my.png b/images/countries/my.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa6f816e8c91234bf7e537e740ffddc0eeef878 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzF|2lo<5m(Q{ zuAZlS1I`78U5k!8oSJzkJ^P4H(3866L&X(m<1>y|HC$i0E+uNFiF&srPo1THmy}>j zZrZ-m+yf%q^^vh>jVu>r6y6n*npxJq~S2l8bdd^-Uq4nL}cJ9uzSI$h! zPgu8mNp@M}mOcF*ej2gKmh+b8u3Q(qajVmtHy-Emvd@xzwJ z+l_VStICg8l)aeHd%LUS$)x_f{XOsI&i=Q0<caLxl~wirKIRvTkEZgvVYxO%VVOS)Yaarss2B4!n=<4cb)B<(o#31ru?2f@j_L_ z{`|a8{k?ng^IrFKovJ9m+E90+x$)PG=?^Xc7Qmwa8h z;sH?c)-8XxZ~L@v-Mf8zudZ41>-6bY2loHJbn)l8v%n|@M)WAa3;{Wxm8?Kf#w2fd z7lsa2Sq~uRpr?ytNX4z>gab@d*7lf~T)q0FGUoK_nq@4l46QtCRln-=hCa2BopWba zl{za!tIrt~o;PnpmRL^WUKRaI{WoLlm)s>Kxw;}LKlZ5m&9}_{#I?>bH<9B9#&bwE6*Sd>@@?0yg-m&p b_?eHP*2d`L-gC2rLH_l0^>bP0l+XkKY(9gV literal 0 HcmV?d00001 diff --git a/images/countries/mz.png b/images/countries/mz.png new file mode 100644 index 0000000000000000000000000000000000000000..5e6e87b417d124d4deec8324b2bcade831036f7d GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFH#0TMD=tdU z&d4puoiTex)z0FottEP?>dJZiss)1T1;ScI;yNV~`jyglZQ6E?I_^Ct0n==Kdu$@- zxQ9-5NnGk5JIg0?Re0{Y=$zFtMH>?{=0_E+O{&!Q)ahz$IP_!j*1N=gb^S{kNInNV1mH+AZymX^i^ z3+B$BKWEQ2)};%TH?Gmzv)$m>LDMrQt!`X)egD$`>4UKCo4pS03;OgnXkL=++wol;v3E4}h6lYJ9UOZRv?lt{&D>NS5Fx|OX@5o-0SC5@u zKXJQu-s$#Lw|CD2p56C*^*CVvuDU&|IQPtC-QUhNrPS@_6x&@L9(QK?pQzIPurTA& zq_kKSmi2z(r(@->&Z*m-?s(ioqFPVnc3ITEw(>Ux0d4YJ#|(rvIcl9Wk*E`7xZIR`ym978H@B_|wU z()wa)y2bSB6w%5bQ(9b9QyZLeOU2%N5^CBLbLS7!p+`ZN92PE{R#nXx87eAhSZb-u z8Y{aXz`rmuo!PjXarHvO*(*C|3I?pWV6}b4*8aqEYb1l!zWUFx5!DFE&5OKz*Sh@M znU|B*zxXH3ViVEQ*IfJN(&nO)qHhJ|rNsq|T&CO1#c%xj$==rD?$*-E#?IJkmG$|p zP4c5jmp5-R4ho(m)Zi3aX%={KV`nC#<;;C{_u@X@*u%^)`@NBRSo^VqAisOM`njxg HN@xNAK*&TS literal 0 HcmV?d00001 diff --git a/images/countries/na.png b/images/countries/na.png new file mode 100644 index 0000000000000000000000000000000000000000..83d63cfcdf5a989e515629d55d65580f6882d719 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFKf}RuQ9$IO zqRItrqkBdcpL_!U$EW-(seISa{I8>bWqH$~Df8CVb*-AXbaK^%-u8tC`i<6Bb!n-q z85rUi7@`>&ZCF`TI5|^!dDDc1G9)Al&0xeoD&9tgH=;EXgsk(+djMYU@U8>-v_KFOZNc_4J>?C!Q}VUm`4K=ENPi zw-?X37#s3_>HLqYmtL?lxfkep#?SpzR^r3Hj&oeBw`Il8$V*((Q-5b=ay~NT_LPZd z7#PknGM-^&J;T9zmXq@e7uPjj-Wvh}PZSleD9FE1Q+utg{ng6qhn?LoC#OGdZvXxL z{{;k`iHNwFk#V@E8yK^|_#Fj!LLmO5n+H&uG0EHAg`tC07Q{K|>EaktaVt6D0MilQ zuc2E)o~Ej}sIIA$PCv)S6*+BMwtK=$0+%-y-D(_6@3-E{tcRqNbXL;Tum2b0Rw$Bh)Frj1Dq+SQ-&n#l= zoUZq@Y*1J*VcEpDd#=5!+osii$H;KL)`&fC<>}`jk9)fMxvXZV`K?q;q2iPo+78b(9m>)i^sme(8B?t#~6wkm!*8cqJMoWZPur z+vTORq!mjQl}eN~>NWJI=xfz!>2>H?%&{<;XkyTA;Iz`oZMB=zA}6=SZUNf@{5Sji zZS)J+5MVaJRH=zIVY6xOG_TURfrZloT+`Kj3v@#&j1yb!@~8SJ8Vba>>sKzbQZQuA zoyyR@TygC_p&R$r&Rk%8Riown740dwzXw6H)q_r zlPe^I_1rn${Reo{(m3zklem0YVaXEd8#mNTN+i6!h3?<8Xl+%0@gktQTL16gl&xDm z{{PEZupn;VzLI_Ws!L1bmn@l^7{_q?nuxm#`_(N1clXPFza01XYSxQY+9z7LUQG8m z)9Cp~UGcT4{(Do?-8woa3=A%sm>f4Ud~av>-O1^)wbd^-x5rLS$E>ZNySe@F^Zn!R z|H8}jPe8yIKfiB4GAQtSO3JsiRA3YXBYG5IhQP%~YUw~x#w2fd7lsa2Sq~uRpr?yt zNX4z>gab?}OP@?Ny&~$GsXy~6Dz;w^ii!_sb)CBO zhDk6_F3zsbk#T`Qc6exHWnokjyD_&kySTb_Kt@%xlV@O9P)>3A`zw~k%Y7NRbaQ&o zpZE3a&3-x4Ci@=GvbqHqn$8`X^QGs^o^PJU&(F^@+Q_f*L|$y}r3+Uigx|du7m^W? zU=Z14{v?&rdAUNk1nLBY>V!mEMT8rKCE6q;S|kKx z1!cQr=xTOt#PuNW@Xf9 zUcGqn;`#IE4CTTe?*@+o~z;TVirC x!r7HkL*?ArL-Xtws_$R0dHcbD*f^=#?25PFDZ` literal 0 HcmV?d00001 diff --git a/images/countries/nl.png b/images/countries/nl.png new file mode 100644 index 0000000000000000000000000000000000000000..99b5e139e4c930df1497829b3999920c8bc3a454 GIT binary patch literal 1041 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzF@8;vbdgbcz zW5-XNJbUc;>2KeEKYjM<#?8AYPM+Dj@8FN0e_ptsxD&V|L!hN%1&|$^E?J^D%lmj-X25!&{-Kyd>+c5dOhVNq2luOz{ z%k)Cm8bxn4OWbb~v%@HAqeb!&my$bfCHI`NPr4VK52$+-Q1j5Q;$~p&UHkYYzQsq} zGuB5o-SR8g8C82SZ^}~^t2J^#2h0<9xfPztnD8W{_jY#wt+VGZA3u5a=kI@?zI?xO z_3HEI&mNpOeujaeo`K;UGxG&j)-yoF!Eu(8^BOPj4FQ2Gf`aEnL@r54Oc4}(C@XtU zUjB)q;uU%MxssCa^!0D(>b^EI`ebVQ(86MqzTPhv!-n;kw z=FKlopT2wO(DKQXzuvt0@A2cmj~{=!dGq7Vn^*Sl|Nr8}kMH0A{rmUl&!1nve*OIU z^V_#?pFVwh_wL=RSFfHvefs3dlZOu<-nen&+O=z!E?v5C;ljCd=gyuzd*;lUQ>RV= zqYoH~qky~+Q17mt1k}lx&=gJK-&Iyovu^KJXK0-jbvH)cf993@w{M=haqXy$sK$}Q>IY6e zdvfCB!$)V%oj!k*SER@waPs7-;oD6&Z{D)qz}%FLE7P-!tJA|n^R-)_+&rhFwdh*Pd>$kq$xzDJQ)IDw0vJHpWwKD}w3WZGaWF2bM zJ?b3eCxw?RnYv&TtA1w3jCJi(S4>;FYr*=%3b_tzpcAt~NWlqiz8b%$JEVFYF}A6 zbz4fy!i@H%`F*RKmL4gcv}WR_i>-_ImGmy1zWwT?jpt@;I=TGN?Nx_vZa#H?`nC&a zn`=KFJ9KW(?z1))XCgw+MTehBi2gcx!m*0de+%Yb>FW5tbkP|GhI$5uvy6=An3*rI zvYugOJq}0ueG%| zC@Q|w*WaY9yhlUhld0)`Ev@5vdOLNrzgk(HGBDVrrFGZL^o*&|Lko+mW~P@+On%te z9Wgfg<>a*6$mqPKV|duh$jBF&X`c%6E+!}bs;#}@u3Wlx?%pvjjU_7=E>qIiUcP2^dcu;t6|49~ z9z9Gdy8dYDoP%c$9XxyT+%YbZS6V$E&4eesJDL6N&5HF}=UKT#kGEFN;y(2y%zW#W zDbG@tF}6-R#JpFhW$G{K+gaY9HX8?RsAOk&%W24CFqwA&C?Gst{an^LB{Ts5U}9e} literal 0 HcmV?d00001 diff --git a/images/countries/np.png b/images/countries/np.png new file mode 100644 index 0000000000000000000000000000000000000000..254744a23b4524efd4a080f12b70b43892eb619f GIT binary patch literal 730 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcX*_=LCux&QzFKhDMd%F5=X zvB_~O>z95(7u5{^zkajH!1``n#u7&11q{NQ^c>m41JCr>&vWy+al%g(M{`}gL} z3kMILIdS6S$B*aFpFeZv3@{9VAxQ=}-|M#=s4cG~$S)XZ2>k%V0#+Mipv{a)-tI08 z9jvk*Ku({hi(^Q|t>lCQOgcYZrkWNDGN`0Hmp-eyrb*|C+_V{aStkzZE?B@Q{K@Ot ziAl!ATQ+P;6%T3R*m&%i%ZIMh-lsi0yH2jkddbwf=n!+vj0%yj6VG(@czbyp8a@hl z=4hRj{``r=4@*Ptm4{n;9tRs63)$HIX};;QMbU}xn%TN@-}3An6&vr(5wfbfv4@!< Xs6jW%Ir-59P`G-!`njxgN@xNAqWfLi literal 0 HcmV?d00001 diff --git a/images/countries/nr.png b/images/countries/nr.png new file mode 100644 index 0000000000000000000000000000000000000000..7f452297903402732194a6feb0be6f9d33181a52 GIT binary patch literal 1038 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzF=TPnAQt#u_ znJj5CP1<6foLQ%$WskUeoUZ2@Rm(avzvT`wdt74H*@w)v51JB`wLiSzgm=Qqu-pT2 zB?l5p_vSWT;MHsq&~6vh1)?@#y%rvsAQAmmQT@uCK55eq zS@RwRtA2TlE@j(Est(gMoMvge%#hVf({h@i?>R@?x!1&ZzJdD`1CJ?Y0ZTNj%B(_G zs+s56hAp@7pQYzeYvA1A7`58its0Hq$L;v2*xr|MYDham!pI=Y(YMv=8hK&)?&lv^=tCe?=)vBg->$(c^ zok~mGi;LXqY6I)*LVLOsr%uW5?#h@myL|PkmiD%c4eLAi?4GrFlKj#siaS?YtzTeu zVu#P_dG1$_#U0)nadLOuowJ#@&Xz8lslCQOev|lNnOQ%zfMh^vZZIvp-YZVRgSKe57n}a zxTM&&HEP~;Q1m#w%3fWpGl)z4*}Q$iB}zaTH3 literal 0 HcmV?d00001 diff --git a/images/countries/nz.png b/images/countries/nz.png new file mode 100644 index 0000000000000000000000000000000000000000..841bb9732770e1e4ba4ec6969deddee9b4b39898 GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzF-;!IfucYHp z@3J|W?Y9qIkMoG0T{C@o-;(Xiwl#;h%`aFysdU6t%V>-*$e6FL_A{W~w?hY%QZRUA8ul8_SyW6gIHeV>n>oql;V_~wu!g!XA z`4T&;W$w;v+@1R}QjSN3Eziw3QC4)ZvgA@#>BZ8bGfnlEEKC=>Ixh|mT$G=8F*0HM z>yF|Vebrx@au4RlzwfMgym-d&wr=x(#5coWEuPIO|W0JSK3quF1tOt;Dz|+Msq~ca`!U3imtX@?|ek`#% z#p^4g$}F_G(aBid|K;2FvyU#x3sF2Jb3cGVWR}^+)w_!iU6JI{4UMzPT(#3du~KiF zr_&szYpFtyOuuUBNI59-S#Eu4w06&(sef$V-mKbW=&N! zE0T3<*Y=xe6f(;^ZJSHs-axw!VaIN9p9%6IGc-JFH3Hl8(^l9-_M4{8btv89Q?kyl zYJ0F_Ip^!gkB(Uw9^qg(!pV4ym-VC&*Evz%s|pg2jJ0AZKfyX0W?J;e7}fam9k zz%vXCr76dWMztEGOqRUfy%Oyf*{{&I<`$l8`tnDe+KN_KdXjB^j9~ zii%eh({TJKYxDu^y%HZcTb)?dHC?*jT<+vUAuPW%9Tr(E?u~A;oP}%XV0EJbLI>% z5`j@U3P=rsmIM|SpdQ8~Z+91l4pvzYAZNd)i(^Q|t>lCQOhrzgPjgHEQum*4m+BPn zpUxhjv2@8MlkKIKw!92h|MtDiu#CC2Yt<_4Nm)|avtPY7iJEo$R-@CJqdBRHcI(c~ zt2@K_@@8bF!@?&`A!6pz#o6rN8#-?6IFYa*AkJ;a^tC&e&h5^R@Tn0ARtV5AzIFSa zQ*`+K11FB0xe{?%Kx4{__Zdr<>M1W@v1r+ rs$}53H2LY2DMEsi1jL0!jy{uRV6fDGX%rIR0}2aIS3j3^P69bE?ex@|6efIkE#yw|`p1VD7$=bd94}Jaqi_0Wm#Gy*nuQ{b{)BN>EFW-K4 z;MlqMpT0eR^^Q?Lli4_j)ijUYynxptpWmiX$i76vsYKDYRo%Z)GoVpFYNA18r&IPE zkK8$ag|joeHy2LWI&ahII}e^R7-lgWXS15-a$4l^+Lj79RPfsrNVrzW`ZURV*Xo8g z8^=wsNbL8oSRPQmc;BI8Z{L4Bb>`gNd-wMpJiPDd$%BUuZQ8tf@{}oO&z`w;^Tvt& z`_^-_ZWHF+Atta+gnzxL;Ce}seR2{9m1U2rE1ogbK5n3W!BqdUmFX=PySpAvSKS=% z`?&3PvVRohd&ST5aj5^Juz&~Qf%ifK9)<^>4fK7I5OX&+@p2qsabLYH0f9}HW zU8|TF*03^f;^EpUBC<(B?1ZM;ZawX5wpKe#OpZF*J@ECq?(g$3B=GjKr6*Ue+_iM+ z>HYgp?b~_OE_ zm&51HojN%@A|`}Ee+qQ1plzxhrqu1M`ho7A*bH(bJrzB5l7=>TGdM*6=4yIO? zP|+nvkN#xYa!VpwDrSysgVVHAo2+gH{YgtY+q=?psjqN@(=)eSwmdKI;Vst0FY;L9smFU literal 0 HcmV?d00001 diff --git a/images/countries/pe.png b/images/countries/pe.png new file mode 100644 index 0000000000000000000000000000000000000000..41794a019c0181602055cb9a89efde71833b6f09 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFKh4W`Nk;yr zk?{pnvm;j4pOR93rDyyoE&G#K^1rm|%$)gG*RDTv^3<(sH%^~C{qF6%KY#!I`u*qB z=`;21y(i9|yZ_|Lt9S1%T)A@Z;lr=rzu&xl`^2eJKYsqqoY{Kn!r9sl-Ej*t`%X-s zd}QYKw|n+H+7~cAVByV$_wL^-nvl10*V0vcmRz`TwtH2@_a9%&Tf!$!seSwQ&B6&8 zi@GWnXL&z+@_6Iq_9OFW9q@NpKY8K_28Lq{40Q|)wG0d=nVF9>GamzzEG)-aSx>RE zpWx&?$;*3@pTCof>y(htSqX^=f`She6)!2spI1YU^)FxFr*3YqJUw4{c>MDB z{}T}KD#MSu;B8F6?Zmne6(-h=L;8pe*gaQ z{rd~&&YeGZ?&OIRzkmP!_U#)mT7i)}3h;-3%5SF%pbEw$Z+91l4pvzYAm^Z`i(^Q| zt>lCQOgV4=aQ|NBd3KiW>FIBUXNK~LZ2EleP3C+pO$7y`%~lqB*T`u+5xjpf^r-f- z#cL1TpA{Ao&LqN>`z#}AW5AT_K^If?SFAn5%C+(9b`|5<8l6%vG7CblJXy}ry6bk) zpBZPa`s((E?v(C|6mE2yyR~Dfx&B|;Y{u1!{#8r Nd%F6$taD0e0s!cTaC`s& literal 0 HcmV?d00001 diff --git a/images/countries/pf.png b/images/countries/pf.png new file mode 100644 index 0000000000000000000000000000000000000000..cf744fae21b27c2bf023aa410ecd7c6c95443cd1 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFKNc2#B0Bbb zX4d1yOJA+ouzl+E!&RNr(>u#NtJ~9OO)6j9RlhSOdf}9wla(cl7tOo8WXaNf2cEa| zT%5OPcWLvfZ3kX|`TAqg`t#p^{=Rwp&bf=1-hcV}?eE`XXU;r*{rbked#BEy|Mma> zkH3FE|M+qF#*Gta&Kx*$WZkAs-+%vp_3qt^H*cQ4e0lo(`E5IQzW?;;-N%oe-QDLe zUi|g@_s?Iye*FA-;o`;f7cSg>aR0{LJ0CxNymR-?)oWLe9Y6Nt=l8Q`Po6$~^5n@A zrw?p9v3tw;mV`rjUZ?hK-;?S0Y~7sw^Cmwyy60e^(dF{Q{nL7mIO^`7(D``&tW(X6 z$D10i^mQNZ>$$sV!NcWC|LouMdB?UB3=GE^7-|_9Y8V(!GBclMWjz5zoSYYVc`pkH zoRg5aEi3y#QSqXJ{47byCDPKb^!3*(E59{0-L0i{+`!|2rVyYe2xK@bDT#!{1q1C&R)nL`P3>ak-P3@v^GwYggB!#)cgk8NVh^{yJ&m z*V(g<)z^KVH}7mu_nNB89WBl0rcc{9efsZTzkdDv`R(i1uV20#IeZw%12R8;{P^zO zySH!OzIyfQ#fukDpFVx`=+VQ65AWW+d-?L^3l}b&J9iEkH2e1L14c10qDKK{2xKz< zo(~jdO!9VjVd!9$^#F1Xdb&7r=4MqQ{dj7j>O#aGJW+_wCwV zoijdHO-sM>p4D|wRQ8P(l{FRL&yeoQ8k(w`yI{hEohMB)%gyEM!}BA9H?K5vSlGGu zT5-xAn;X?NwoBD~XWGhZm?VDE;bv#l^ONIq?EE+L^P2{zTH|MW1tL!$KYJ>^ZGPVC zEdm-T8B0~x=jmvwDe0vrtX#g3Uxe#5M;(F?{`H^l_P*?i!GPJzf1=);T3K0RUUjs}ukL literal 0 HcmV?d00001 diff --git a/images/countries/ph.png b/images/countries/ph.png new file mode 100644 index 0000000000000000000000000000000000000000..24007ab8bd4d406430886344699d5b2c5a0d7a27 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFKdY>I*3;|s zsv>^>$zE z<~%htaAlC+Vg`mRM#daQ#%xB$EN12$X68&*);w0$9Cr3XPR=|ot|DIEQeNId0f7o3 zp%M|1S_z3d35g0>*(OEBHhKA4HMJf|$tZ2@K6Uj*ef>$Mrqivg=2%!vu(O-z&i^e);T*Ws4_1KOgq%Vaoqk4c{JB zpV``ZW#6VV3=HR(nJ=)iUSwy#!o_usm-mK%z!^co+aeg4p#%j=b!+kao*cb=aA{r&$11bp)G`5PGc&Cl<5VBpVy zfHPrXryJ@&e*F0G;loRpE_HWz10xq0#iIaM2n29nP65g>CV9KNFm$lWdH^{GJzX3_ zDsCkw9AMhB=j)ogvA!lxRiA`x?L8yg=p^{hPA+enRhN*_si?NJZF&w1e?DZK$H%61 zDacFe*D|wnWey9UEP0V&ZyM>zS{j?ItzON&AfP6yDkNor{{Dsq6FO$>SYZ&Lp=hdV zXwuv~wRi69>HY29!Wtsd;=)G`O$m>=Xjyn{$-8TA3ogu=u;FIwPS@14e=jflR$_96 zq4n9h*;A(m2Si=BPOXZs4$f5#(3otgZM}cVs_ai^ICFKsUVVCF4>QC1y+%emnY)5P OzV>wWb6Mw<&;$VZKSPHA literal 0 HcmV?d00001 diff --git a/images/countries/pk.png b/images/countries/pk.png new file mode 100644 index 0000000000000000000000000000000000000000..ff220ee22c62f438b177051a0846c0eadecc1e94 GIT binary patch literal 1041 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&MLS-~Z#sj(__2 z`O39xyAJLxf6kNI)n+NF+!^#9u@#OiUs| zQX*7B++SQaR#w7SLN-QLF-cKAMqV*dQQAXVJxN_LKv6$WUq4r0EnH1MLti6O!?f5` zD_YC6&{Q{8*C5$IFHX;*z``WM#2~@IEX&L=!O*F}$*JDSvC7e{$<49C(W%18t=i4M z%ipiV&%e{(v)SV&`7#_Wb#?yLa#W`2PLx-@m_p{rdLp+sBU|-@JMA z^5x5i4IMm?(VLyuLnjZ zFiuASks+{e)A~a|rHo15?k)@+tg;?J&VEl9$B>F!$q5IT($3C`n>PDt`od)kvQpj) zit!80GF+;qe#h^0ko)yxsuo&;8YabA{;6Gy<0dTFSDBGk;-nLh5oI6j+Prbfj*iYP z0`6`x!T}vKH*UTXHMjfhnS0ItO4f(uHLhH{7_?^XiNmK}ipfltk$k}{lJ)+bc2J<$ zx>Rvr@9B@%PG{vR-Rh?ka>?Xu@=87ZiQ*s1Sh>FX&6u-3G2`{o^RddB&tAV{5m`0c qWaohcrz}-8x9&7N5PXbrb~%G1gQ26+t>r18AnXINP;va_G%ux^(Fx(B2Cd&YwSj?%cVvpb$T^d-v{5n>H<9zI^W7 zxl^W0>F(~XudfG24KRX60qsJ-&9Y+!&~(NmZ+91l4pvzYAZMSai(^Q|t>lCQOjg#n zBP2GT&YCsrm6msL@MK4)w`U_?s$T8&eC^gV_Rw# z1Z0~Q#|702N9Vd0`W1QUX$N#@TInfj+1Tiq7%7>l>DdWthzPw&U#g+IIO*9dX$g@B zk9kEtm4^sCdLke&*?jBwf(-^27`ZA}b{A~^+r>mdKI;Vst09(*x AvH$=8 literal 0 HcmV?d00001 diff --git a/images/countries/pm.png b/images/countries/pm.png new file mode 100644 index 0000000000000000000000000000000000000000..6f9bf9076d8039c6005227fd73f2df272271ca92 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFpIu!usjmLf zg-f?~?48v;LC==I#>%Qx92tcE@CI zh)!RmW;Ipada9P)6iu6cU5Ck*{%f5>m$^r+af?_LlC~u_e@A-dshqlV@ph&S z-{d*-=BMNpuG_nJ>a1B;Z``6|iu)(lHZ zonPP9p4r=1zG+j#x^+{gOmbYjFt)M5yR$uT`n0q~3rlxwZ(p(4cKu41##-|UJ)YaQ zH!-c9&#`l@=#^v2@9yiryk&Z5o8F22)<53{ynE>P^k%@LYyN%h z#utwHG*;^$-sSP~UgX`&q1~-!tCzSvx|w)zNAS}5o=fKWb+-B*+*5J>fa=sPh3D5z zx31Lv{@iZOLZkId%#QAIo78D?_E4~ezT}!(iSGK8LsKm_#;~r8FwIFWbxAr=hrAHoZY>9@3w8gCfeCfMyuiSi6+QMV~=j-7Ha-9y?FHHB0&emX{^OJOO9$?US;)q@+l?h$BjQxkP4}B!1E<>%R8w(wYTFb{$GfTyWuv=H;|vkM@w1Z(mEwzfN17 b@R^Tc`z51~7d@2XLH_l0^>bP0l+XkKz=d;p literal 0 HcmV?d00001 diff --git a/images/countries/pr.png b/images/countries/pr.png new file mode 100644 index 0000000000000000000000000000000000000000..0671638e9f51e57e45e4bf5d6afa3fb9bc4b5153 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzF-ytG;%G7Lg zYTA4;^$q1s?L1oUg1RTR9SG3yoK-t5%b_gRzBbsZ)=ay4-po_lYEhy7Q!9(Nlof8M zELq>*b!__NV;;`^E)Jz_jfaa17FSm+eEQ^*i$ix*_=3LfLpQF!3JIFy>RJ~Yw@gYl z#6M`}^x4N&tUvtm``-r-?w?pCr`LCXXbHsh6)zOBfK1^ElofAd43KL zejO5UG&1a5e9Y&0v%f4}aJHlE`jkme7BBp`X~UIya~`Z*zP6?L?T&3b`g@Peoc`nJ z;fGr`{XTW#)8T`smMuNMdezNsTR&a8c<EaktaVt6D0FwpJUzvr9pXI~$`U_#HD9X9gW69Q9WW_7NN zOympja0m=(nr~~MV`aE|$Cd_5W(^fJC6(iAlXH`^uV1>Bb^i{Fh)`J2mdKI;Vst0GQT%_5c6? literal 0 HcmV?d00001 diff --git a/images/countries/pt.png b/images/countries/pt.png new file mode 100644 index 0000000000000000000000000000000000000000..8d32759e8c04d837012bcde1f68112d541ce23f9 GIT binary patch literal 1036 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFzhG*1Dkb$m zY{sP3v#lzv8KM{%!WkGW85k@Wm}8h(V_7-lIe9aAxtzHqvLpn(1?3CmB|{_?V-&U0 zv@Dt}jPi}FE37^GJpyI~xV5;&Es2X;5EnT;GG%#6*7~f}rKwpfvxHNG3~Kb#mZfs0 zvZk+0$y=LYRj(esz@uVqxLGN4_B@Bs0w(_i!P%>V>zdT6>v+q`)e8$9Bf?}m+QSbo zl-x4QW>SXzxm?+6rRv9%#gE1aZ1H57YRA6Qll`!-&^$lQ`(fHAjCmJXtLzW5nVlB3 zYQelCB8(@b+4m}mJk(M=&cJYzk?{mG^J!Mr6RfPKI62R8ab4i$y(}PbO+@5|gv5CX zi952g4-^$I%gZm3mVTtB_EcMYjiTaPef?MZ`Y-kM*DEV;Q&Zcaq4Cbt^sTAs8&lKW zT3Y*bbPnt39njT1ZeZ}<%Ic(%;V}b)2No6=%}mdkn4C5?{$gkM+0O2}lhaoxr>j<0 zKiu5DySd%5x4Ug`_t44dr;8#GvJ0G8qettg! z1HT6behmot5)kk$FmQED^xBjZV0-~%Z4^)?1THPO&kZz)G0EHAg`tC0)&t1d<>}%W zQgJIe;Q*7x&X$`ZXSkG^YMGrDUs`>u!6~NcQJ0b0MaO;r6eoI$uC;YgtP8X()lC-n z-~Zslj!nnjr7f7yv8AnX>E!Km!y|IyYQx=m13a8OZ#UgseE*=C*5X}zH?Nb>SfaH$ z+oJL6-HTcq7j50%xspLcMSo@HlT(k<-o@OyaXn_{d{&W3L4nsUZr;9;O)?~U(qtwP zA>juP11^8}WR{*XSBhUm=uztPXU4u7`7bjyPM!7XJNQhN;d-AzI&6&1U*|Z3qoHk`T9_ zfuV(!wS$$ljh(%nle3ebzgs|HlCbb335f}ciu09~=c}qtmzS?lRIJs|n5d;SNkgMU zUA@WFbc3nsIz7E0uK85?eg~C z6dHQK$*C_eaFv(WjKIJ}ad8`S^G@gF94ab0ou7Z``}bd8zy3IX{?d^n#}6Gk`s~?@ zCr_STx^(5}(c`;z?KyhveR{G*RCFC zV5nhWIKj+(nw9kg5OH!|;N`t6AaD-oXFM0G4 zm-_l|O-*kY8Qrz8`0C`e!^r4|o7*Et$EU6?m+kEjTU-C~_x}|T@FgH%osG@su&__z z;a}t8ex;mTKLqK|eYzt5kW0JSK3quF1tOt;@-_yl0q~ca` z!U3jBm%5~X-&$Q{9Bf>~rIj_?(W%nZR<^V?a^=gLKc8Op)pbx@cI_YMUEWkx*QHax z=FZ(4>!3L8=H@h?S!d21GcA0!MKgH$a)wqX=9*^bKbD7;EC1Fo)iygdIB^zUG(34{ zjbP%N;zf^yCnq&J_2v1U(~Gl_srkcqZ{0h&c@B!z+>EKJyta;s($>-0+TO(rCiL~p z=vXmj&8&SJJ11^i)}<8S5f>EW6y)C4liX8F>@F^ZWual89HnnJ9Z#Jfi6yrHCLBHV~{~$i$hdS-X`xSXqEK?0Ol+Z1a-UFeoK9|_QF6bMq_v-@ zw4tfDrmd@xoWQBGx}~nZthCw5(Cgdc|Nj5S#>dpv)yBui)Ya7I=jPqr-1ztR{r&y= z`ug|x_xASo@$vEO?Ck03>EYqw*x1C8r zos^W6i;IhYe}Dh~{{R30qz^q!00001VoOIv0Eh)0NB{r;wMj%lRCwBBV88-uYpasu z!vr`Kr4>}QP2B@PLe=G2Qj+G((()>rhOYj>K%tt7yo@+;E;$)x4Sh%7AU~i`Wnn^2 zv@n~jlA5lycTk`QP$-cxJ3mHG#<)mIg-}6KdbGifKjP{ zVTp)og}6n9jBUM|Ym-Ifd?VjBo5)FSNpnN;mu5C^EA8EPb`!%HAlkxkW-G(l&5UO@ zF`nDTd~Q4QnJvs`HnU#b&VFze``OK$hgNf5*~4{ZFW0p_yyv#_9$L+NW52+$^?bLF zh}=6Wadx}-rCkyakINq2Ao=91;*)cVSN6-lIIni?fXeGj+V5`Yzq_e_ZkO(-o2C!X zTKsry_v?|v9sBk)U_|2#G6 zWjcy0^_15esckaWccdHMf zZdX0+u6oo#=UD&GaRINR{hmkqe2NeJ5Fhw1HsHFh;v;MQ16Bqn z>`dNx+IEaktaVt6D z08>S!t0j-{p}lK-Cl@cjTH?dN$@#iK`pD1QlF`ea_~yT!&m|%>A>_d&{!%mZVxP0~ zuUaqV*HBrv{K(4J$*C!i=Y<(me_EoqV8WIzncdU6Jr}Kxuex}r^X^#(#nehoGu~)! z_4gBcHdWfL^>t8ml{5?st!D3E(6Q!{<=ft`4vLYSj$)?f-y4>^m^10zv|U;YCTtUs zpS){%end!4*~c?&uecUW;IQZ4oR(0K;!~6Mu;i_@% literal 0 HcmV?d00001 diff --git a/images/countries/ru.png b/images/countries/ru.png new file mode 100644 index 0000000000000000000000000000000000000000..2b7093c18881dad7c86953ff272a5bfb738a1c3e GIT binary patch literal 1041 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFU&AZ0MnGz# zh}eDZUyv=$gn+$UoS(L60nRU~@|767M>s$Aq*s|~V@e4Pu+~+%FYZWW@=`|iPsz0QjFu|m1i$(JRv$`E_({H-= zUvTO=YF)X;p<%mQ*P(#9cl>5t4Vr&9VB)Fpxz~I;cV(@4n7RCJ-nz#(AHI10{@acF zPhWrf!4S8cIbkJh+)~cum7Iyoc{4ZhBrTUM-zQtNO}==Ge)}2I&NBw(>&+YYI8DFl zH0hFK?+LewXZ#o3514x^c-G~JMR&vJT#j3MH*Mv;?FUaDK6Cll@#AM07)~%SoMdLc zz{+}tmGuNC=S5!L8v+8CBqZ+0%05w4yrdw%L|S@-qT(xk{q@Sqdo(mYnVRm_(mJlE zcih0>p@qdI6O)T(rr(^L{B5Bz=gyrwd-m*^GiP@1 z-aU8j+$mG0)YsPoqY@aQqk#Ajkb9>p3{=gS~e#=$6VtGf%kwK+5a3!?RTLGL z=jmIUoSPb1$QYoZudHfnynMs1g)7&s+OtJNes(#7D}!O_Im5EapiuC1^>bP0l+XkK D+FWGp literal 0 HcmV?d00001 diff --git a/images/countries/sa.png b/images/countries/sa.png new file mode 100644 index 0000000000000000000000000000000000000000..f7982cc0282ece208059d5c7b989f4cb34b934ae GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFZ(iHNP{P1a z%)sEuz~I5aSjfm+#>`y8%v!<9TE@y&!Nyj`#$L+KS;5Iw!Npz9&0EjQTg%H^#misI z&lSui&?F#KD*}@Y>9^|} zbQoxrYZIA&nlmQ4FUe^`~x=z z2CNV8TjdwHKG1EtTfmxtkc}b!O9Fi6`S>sP58oIbz9BqzTWtLH__%Fx@mt~}S48?v z_Dk8F62BonVM9Xdj?}DuSsA-Cq8CSp&j}Bi9+I&=qhx zUzMM~B0pnpM(c^zwi9i6i}G?8=60OuC|FX^xVy1zd0EGSj>@H#jcXehTv@Q@{F=?z zHycdUH|jJr>o;|r=U_j}&VGhn^!BK<9jUonbCw-m3XDErB#r{|LZF9(nGdLwG0EHA zg`tC0)&s~n;OXKRQgJIe;Q&*_&5*sHCcjPDF>~jUsXcd^8=Z1Ct*gwO_i9qpoowV^J!hzqg!o@4o&Mh;9w zrm4Aezh0EP=CJVO%fDHlnt~P;`3X*bR4c2~;B@n!l+v3wOqXW$Ei`o0+k4Dm;SM=Y zKfB`hEpsj{yVGg5?3aULv}B%`oGbJ88CNE$R2w_zE|_3sZ`?j%PG7M{h{OD;ozu9? b-ZL=VT%db;d(BsQP>^`K`njxgN@xNAZx08$EjKll>xasi&{3dOY)5fgb!fDVfWYHyQn6BwP!zz51RcOCQ z#s+nZSdX-oewmBIOSZa1_Z0OUODbO)l+<1``B>M23$+vXF5Pr)$I(YDIt^@kwcJMa zJcc!VCJjR7P15$A+CCHHjUp`~=c-z#yQD7jNLw0Jz9qR~Z+h#&%+~$6od;8@S1jCo zQ_jB1HoDg*t<`(I5j@6F2kUXH*ZsbYrmrB6t(zecInGK6P8+~t#K;a?4PsB z$E{D+Do5I(L@{oWsc*ARP?tgY1e3@~W@!t73cRwGx|MA4E!*l}x;3zTYhclOzvA_N z_U!`BWy(?W^xbRJJnJ;P8?^jebpzY=LV65?I}O76j3XzRMocitUh5P$-70^BTk>4H zyC2)v)4=PJ7ro?XTD$=!_7Os6DHVh-kh*;9sBAP)~623E}N%tW)H*Jy^Lq}vR*sN zd*h_QrllfRj>*5cq4wgA)vvcscQ4o++strgC-d1|oR<$uKe?cIbgR)>WhA zH0PDZ0Up;vZaFx$g|98jim!KFQLPrxaoi`!ea7uwYpbJjC)QRp$OoLb5zv2lPhMVl z_RiJOjuZCl2b}N-Ik9Yca-8qN;DS28szv+(9j7-H7F8F|TgTe~ HDWM4f7Su+F literal 0 HcmV?d00001 diff --git a/images/countries/sd.png b/images/countries/sd.png new file mode 100644 index 0000000000000000000000000000000000000000..32398df2f3519f1e7b78df488bbb44c1b2121316 GIT binary patch literal 1041 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFzh>uf=I}8~ zGt0{tFDof4fB*ICVVWN=_$ zwr1u`;$+og<;~>fOXlNp=Mu^llE{^i$dQmQQ;<)W=al7CuU1z~P}I!V)XLSe=&`Wq zu&}PR_L%AsFgL)h(=A|jK=`8YxaDyvYf>`SXJl>2YF*r_qM@>Ihn?X#1H%bs=F_aK zCxD2P^8zpLWdVV65)y|cB#uf--jS7kps09WUVg5mAf{Iy=!6d z)ye6Ho7*Et$HUgvzx@4w2LyZ#2>1{j{3$&AM_ke;hDK7M@v;>Fu%&u(A6`sdG|@87?F`}XbAr%$h6zkdGw`O~LQ@7=q1 z?b@|Vmo8nrc=5=QBfEC(Dl9BaPft%wObiGJ@b~xk^Ye3ab8~WXvbVRlv$HcbH8n9Y zF)%RD*Vot6)6>$@($LUQR8*9em6ev377!5N<>h5%Wo2e&2F4vQ21fzeAy6ZxD+bie znB?v5!qCAg>jC8K_jGX#skoJ#aDXXi4)fy6!iVUZxM6O4^K@yAl$FVP+FFSLfpI|*0U=SDTq2i3!v(^PlGZ*j*VNHly=omJSLO`Q zPKixhOs`#+x_;CA=2oWGkdz}5YW{Ds^Yb#YUcPwumYM71Nn@XxSMFcEbmKzK?VE?q b7-yF=NU$2nuG9J21_~5US3j3^P6uW49e>nl{Yf0Y~<3}#-&gp zVRb;w{fxHHIW5Pzc5!#yQXg3bZT8K6;-B+0Ap2HI&5P99#|+}xjH+u`)Yq|UZeZ0| z&!)MSU3&|M_6km&Wn4Pz_zbrRn(P!bS|Mh+N78DmkY>Gv`64-oLrN~k6dZOa*soWx zTOnoGq3(H7#$=+R)huP(IR-%&lq@G{I4?B~zoO-`T;FTGb<7PzpG~HLyDYj=rDMyL*G*BmwoUKQ za)XUCbkA=xJG;qx=OWu1dp++R_Mg>Zy?l!6yUQsjHiayh;IVFA__CSto0g=X+Fh|@ zRsMo0iN|-=oZ8!T?c^k2oC0HZ6c7vn_9B(PKt+s6-tI089jvk*K+b+o7srr_TgeFr zm_$U+E)`buGYSn2x@frVI~N^+`;a`(CVVH=;`BKR;Dbiu18f< zo&Gd9Z3{Fknz%N1)~hNpzkLrA?>Q`-S)ArS`@)S2_LW{=zs!m>UdGg_rS0`;^{ZFK zpSikDpYrbJYIO3H%-mzS_3X{gm64h+XJ(#sP?QTxTXtg^pJAC_o*ti_nb?8}tM^Im zPxRj29ulykzkBgq(SQ>!-kvAc>@^QCJ9Pi-&4aguW|uQO(l+>UwY=^f$n&1AelF{r G5}E*)olWlm literal 0 HcmV?d00001 diff --git a/images/countries/sg.png b/images/countries/sg.png new file mode 100644 index 0000000000000000000000000000000000000000..51dc5a83e797ce924d32b253f423aaa39dad0a54 GIT binary patch literal 1041 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFKX~ZSrp=qL zT)pz(!Tq~;?_9llhYte_U``q>c!#eqObF(oZGYO+L1#)o<4qf;oP%pSKi&b^Xt`%?uPoayLY|1 zee3&+=l}lw`}_CrpFe+o|Ni~!*RP*HfByLK2A{`~oK z=gyr42K|{cr%s(Ze*E~6BS-e{-@j+io}D{)ZrHG4`SRt!$O1;$D4B=`jj&O1he=E(n-WK4Jdqg?-!BO`N%P@8o8tfD^h$u3tOi z;D7%{%(aWIcW?4(Op%)}G4GYI^z;c+)`(6O6XX;*rL!_SH$QuY-r3|cdh4DhFmZ`) z+`47E`PC`nDJf!`wv~KkYF#CD`}XYDTHKqBK50u?SO02o(#d_h_G{=-%buO7Z)ESD d`FmpzGs7k?{l$x_vKl~P=i$gAM=y literal 0 HcmV?d00001 diff --git a/images/countries/si.png b/images/countries/si.png new file mode 100644 index 0000000000000000000000000000000000000000..e8f874309f6218bb9a1e7d743d1cbfe3d421f2ef GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzF@9vtraN(Ai zxYDJ|_g=buN6RoUyJ%8z&FoiiKF?XQC$(Z(dFRID^n5w%0tU4-R_!cS?MyDcbOEyx zQS&@SwbUgMgv|2fU8?o`8;pF*EJEt-VmsZ^XGN4Ri>g?>bo)gHy=-QKJWkU> zUaN9h&ldftDF(rfW|5sv*^4bAS}Y@5+_L8Qm#q#cUE!S6kZ_JO{cE7tEl|LViH=g*(*lH%Gf&AU&If47{#4q1U6N}|U#r4Fb|9x_lm zW2Sl8O8bzx_6%K>#YP(It@LksST8o!dFW%e%gJoLt?^|)$Dw(a~ODXZUvr;dnC)HF`bhNbm`}gn9pFh8U|Niys*Uz6nfBg9I?c29cpFX{N z_wM!U*H4~2dHC?*y?gg=+_-V=+O;cJu3Wlw>B5Bz=gyrwd-m*^GiU1S>wz%{jK@(x zMhL|C=G_KrV@&dPcVXyYmGuB}4tTmahE&{2PB_4{>|+EGl>=7H zi|uQ_nty1@%E`a0t)eBO8=ZJ{?2etOoxI#{=7rl=kKMS#DH4?YDfMx|rp;H&&5AyM z_*BBqb@Fpj@h5Ihj;;<*4{fcJUW~0Vu_;^5`uLpH)yb8SdAoLPgVQT5t3|U8MLn9t zcB*X^SJf_ug}b^YEjsk*(xy{Qw`RRs^`~e-KvBhn`h<)Wr>Zi)G_Rx_o&XIk6$J|& lB|T+xeQjM+O*^UCBuvHR%b`zJ8yLqOnF|A6DZ{-;7h&m^TB;T1ViQhsL3)(uk1 z-wqwUyl?;0OP7B>dp?_Ac8;>~R?moeS~i_p_FbOIE2}2-$5m8^mirh-#|M`My5wfX zv{z(LuF9LzQM({Nr6Vr1DnGT`*EJ)=C*Q$5$<-;x(Yx9%sIj%JgUh(cGC{h}=a)Y-rfy|O;k44}2R?uO z{_Mr86KBq^Uc2t$lc&dyAOHU8V z4`pSqD9B$>Q9P@txLjI#gQDU)ef>?!%6l|4KAD={HZa()rFC3S?~ zJ9o;IDfRXBz}N)F=_nvF1Y~x6^93qpO!9VjVd!9$^#F1Xc)B=-RNP8VIKY&4c9!7b z8^(#BwqypYefwTk*3gpX*FRN2TsUvORi;zCc(QrG2@S2NEmNo4Pu0J4?%FXc8zzk> zQc`O1x(ZWtMPIyl`B+?tN5p9RrVx$X?$eVv4GceTD==r}`uTg8hOzf4u2Za*)fGD} zEg4!(OhTu8dDF`)5_3=h{CMxD=3JPis1Pgg&ebxsLQ0GD-I AMgRZ+ literal 0 HcmV?d00001 diff --git a/images/countries/sl.png b/images/countries/sl.png new file mode 100644 index 0000000000000000000000000000000000000000..beafb9ff4c972eed4b2e969e3b4b20b86067142d GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFzk22B@ngqN zo;v&c&%d9){=9nq_R7`kr%sj>%jFB#Dwb`Rj_Ob^Sgsh~uUWWUw{(q0#w^qJV|s;43`$p6H0?I2 zTxZ#^-K=u0+q6qgo%{Xg-3XX-&2Rd7uL(z-%I5|2?eS_@5xd}0V8^D|X@_#w+|6Eo zxp4hmhM4)xaSJ#T7s{4yRZ5wx-*!YRcdl98MyIJ4-6k9jm~%OA<&_t&USGR$^UBq$ zi}C-{&gDzI=094?o72PWl;8Hur6n|ujF)T;Pq+{_o^2+jS&p)l?`l{ z4{DdUPm>I4RZ5wwA3s?)dy#4B8mIh4_GweCA{vd7d#t1CEE+ZjHm{59-JQ^~KDuvr za?hrWS%*rj%NSI>7#ylu?JHTmS_J%BB%&rMT1H7^&a$Z9;MTk~pmlTj)B{;ZPaOLB z`}>=Bug+gQd+H1@ERP*Me(1-quit-udH3PMCGTS690 z$WE;+PA>J03=MX!&5do94(OP=YF{nkw3Y3d zyVu9K!70a2W{!V=x%EonQ0j+%bXl6tn6GHyI{hm9UT)k%vjR2 zYudK9u0?xz0z3{KIumo{(k;Ks2k(WQJm$qUyPUynsiF0ivsaWsA>rxj=d#Wzp$Pyv Cse)$! literal 0 HcmV?d00001 diff --git a/images/countries/so.png b/images/countries/so.png new file mode 100644 index 0000000000000000000000000000000000000000..d087512609669ae913df487b21cd822f22cc075b GIT binary patch literal 1033 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFKYQuAdhTki zyw$n|YxD|M>ldyuEZt;KwAP?-jZw*Z@RWx2oQ%9$0Q$x5Kt-qjSqX zy~ui}x-Fg^2Yq{vdNl8_N}p(+)Zy2$Cv3_Y|BgN0O`9F^XF3mFq- zIA6N{QQ3yaX)}(LZ+KL;{z3Wr2PG@7S8saMu=zp5mIrM+p42bc)4AgC_RFsiojCjO z;lpd!t^p$j7&W7S)*;}qrspKk4#p&JcNc~ZR#^`qXS=71V@SoVKg>)i%5u9Lm6z p`e9>Z?2|_?bCOmp)M!0x&2VOcX7sl!<%OUy^K|udS?83{1OSMRQjP!s literal 0 HcmV?d00001 diff --git a/images/countries/sr.png b/images/countries/sr.png new file mode 100644 index 0000000000000000000000000000000000000000..e06354f741ce2a2a9d016bc65715d3069bb3af19 GIT binary patch literal 899 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRS!3-o%c^#X@z`)E9;1lA?!0>+*jE2C74S{02 zskeYxf~h3PFZe&h)9nUcKpta~x4X;#rR<-M0y)Z_E{-7;w~`YWnA`*s5*iF8B@%Mj mEQGncBN|-w+j0}c85r1;7^LNAC*K4rXYh3Ob6Mw<&;$Tur5rr~ literal 0 HcmV?d00001 diff --git a/images/countries/sy.png b/images/countries/sy.png new file mode 100644 index 0000000000000000000000000000000000000000..be08e92cec7ca2243b3445bf1df271f57527278c GIT binary patch literal 920 zcmeAS@N?(olHy`uVBq!ia0vp^VjwmLGmxBBofpW!z|0Wf6XFWwGW=(7a&l_<-_rBH zXX*c?YyYp^`+x7T|HsaqD?SGV|Ib|mg8$dsvqNYGYce$QgLs1*6hlT-sG}F^Vgry0` zRb*^iTvWRjqhCw=pK`NS2CYDhuhFK<#SvHPUK7my}o?S7CLpg<0C6!YtkxM0w zS3O-oD@#Z_Lqso6(x^znAV=1$RMDzZ-n>v+H%iUER^7H-+oeg#G)2)kQQy5y-=j^< zGDE{U+sL!k)VIsPtyar6SKBV%DyYxExzsLfl7(N3nOCh- zo?z==;}JW_HL}MuZgN2SeE-yW{%Q04Qf39F&kIPM6OcB?H)&cx>dch#m0@|ads-9M zuV`C2Gj!kTv==8+9~{ZjC8K^K@|xskoJ#aDd4r#k4|n$a#|)r`L>EyZmOGT)ix(u_QNOdCD5eRauEQ@7eENe~eG#O62UMC-2iUrbVr} zfBE*>a0ZcAC%XB*aCUm?ttt9A>qXvVRuQdE?r&^6S1ek1^X4@xYgvsc67Pg1BJ3e;yGF*(UEPk`*gXsg`W7AYEk5B_amky4!v8I847m&p*$mA2%&Zlxtof{* zg`B+gyu1~>0+j+1^%Aljva+qR@{RI}9g5Ov(nvcZvGqm-R8Rauk{aD8xXK2AYfI1V6A|1x1wpciCMR)$0|4H z*-nA$1N>L|#Z_6EhqC0Z;3-`v(6m!w(g~wgcY;>j2+mr}Y!<|nvy^SoRoBvG%$2J+ z%2#kUZxL?ZAU*MbO7S%1+J#yR&s(&wHkftTx__(ry4#-fkGpKS7rgFzz~a-gQ+Kg0 zJubQVy212K`V01$9(v-m`lQ|IH-Y=^`ks0jI(rY#<||r#xF3IM*-Fl;JA9_2T+1B$=lt9p@UV{1IRh( z>EaktaVt6D08`bj-4(BlTO; z&zhXrpRBD%mrmW)bu<){~ix7KVN@uMy|q7p9?k`S#nEDYR`;}m^GWB zHO*(X&BFE9qkOy^osT<2$BJrPxq0#4wOf+}#UzEN3&=~$vWlEKefH$3GkRJpS7feO zzfMb^nTxfea>vftpuIkHsL^ea!P@6{mdKI;Vst0Lep48~^|S literal 0 HcmV?d00001 diff --git a/images/countries/th.png b/images/countries/th.png new file mode 100644 index 0000000000000000000000000000000000000000..5e15d0e26318254090e78c9acaabf1e625507bcc GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFH`Q3~X|vnc zX>D5cvHFsGT@4T0YwuJP>};&sw|v3lwuWtUr(amR{L%WAk5t8%sE9Atm0zVJzeHDI zsh;9;J;kMZN=prtmm8?8Fi=@)thUNZcbk>&dTafS_C{N+^;bKXuJf@!;%2qQ+kRhw z^I;F$O|CXe?9BS2{7%IMT?+Nu9UF8e)O%-A*u^lPEkT}ZV}lMv`ftlgxSbMtIy>Qd zTJ)K`q??K12lJ9|7N*@vjXoL~uqG?vR9W`jqV%f;sh7&K@04ZVNR8Q9oO!7-|5`)& zosPOk6@@!%%l36No|r!2T21+ysr_gAIuCAM`*z!gw-?TRI(hv0&Fep}U;TFH){hm- z&MsYiq9DKh)X66c7aU(O|JdeDHx3?nx@qI(Qzu_enX>lWxszwlo;Y*nczu1%&!1l& zKD=}7+QlhTCjS5b``52;@7}$7{`~QkD;IX}-tqnWml_q}YGvW0mhvZURgT)KT=dXC z<70X^+U2b@R^I+zsjvoZTbdf0`$m=DeQx2v-*l&39;3;H>^ zVO>V_%bu!Tg(=6XaxOHNe4X9(bZXnLB~!jEob>PCzdwKeeEat8)2B~QpFVx^J9z;Sz_Bv1uolDE4HLkFv@2at2n z)5S5Q;#P9P0VXak?N_&Etvcn^)#ZI!d-dx^Cr!!9pOKb3Jx_MN%)A*nbEU(=j+PS_ z7VP-&V#S6THx4|QP_bY_+veTf+nRQCY}vDF-qgj-tN|z5?p_TD^oj`bb3K0N;=L$& zjUx|_tvaTnrg(ZyX4dnR>=Xu(B;!CaQ4xVjftQT7nOsf{Was+$yQs3Ds;aX1H~WW= zzdrt8XkB)8hH3V*FDoaj`^_*(J@&@3xY0?M*K}*|Sy|iKzkBb-&V9S~#vW#d7q5*1 T7P)&|0Que1)z4*}Q$iB}W;&0} literal 0 HcmV?d00001 diff --git a/images/countries/tn.png b/images/countries/tn.png new file mode 100644 index 0000000000000000000000000000000000000000..f05f1342769f31e70908c574c88dda3ab067c558 GIT binary patch literal 1041 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFKXd%V0R@Hw ziVXV|87f2>4k()t8)aD1FvNeYv^fDl6s3e)^C6^yix^Zm?6kc7FuD~S=+2a_0VX(oTkMgL`>)#tQ; z4{3qNGo!E72&n6SuyUwI^Nu>bulzlyZW!@U0F4WtZTnYb6}?`f$vU-f znbj-@Mg7!7zGoe;IQR1IoH?yc%F98~Hc&21@8F~(SGsbtnM*|@7fevm=eC}|qo!zA j``&%iX3a4%d(XhI_^0kE+ta@UK_TMl>gTe~DWM4f8{1AX literal 0 HcmV?d00001 diff --git a/images/countries/to.png b/images/countries/to.png new file mode 100644 index 0000000000000000000000000000000000000000..b53e46f1afe262aba5a6a7a0844af71e26adf1f2 GIT binary patch literal 649 zcmV;40(Sk0P)K8Vb-H4bUA8&m9fM8x7JR5Xm7D)g%;#5faUQqE{PVHDs?O9CtUs3d3Q1o6< z_Fqx#T~P68UD0b}eoII8zq;MY$NJ>r#ti|+5Cg~;4agb|$tD`lD<9J_C&)1-kRuzd zGb`LfIEgJN&`Ch&QAoH;Lwz(a8g-OfA0$JyKnC={t9%?~t4&D0|_#LdP;8z^M2Ajl4Kkt@(3D`Q;^ppY`qMG`=R j{K7mPEDW?%uz3dnqM;>sG^aEs00000NkvXXu0mjfCgBt| literal 0 HcmV?d00001 diff --git a/images/countries/tp.png b/images/countries/tp.png new file mode 100644 index 0000000000000000000000000000000000000000..f8b4dca6c48b06feb0776fc3406f6330db5fd46e GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFpKfl`UEffZ zmFs5fxM<#jHLF&;Iyhgwa!r-L%UK;(vf3}>bX?Bmyq4E(J+I3e z0k2IGfjcDp*2#wMR*c#&AF@R|>6m`nDbwt;7Fmbwimy18Uw5m%>DzF}v*Mh8s zcx~_gecyh5fBNDXLkR;z5d(7xGiwDaYZ)tN87D_N2S*wQZ!NDtoq$A>glw0rM1h22 zx1xNDymY3tQn9jPo}&INeT_;D(>bPEwOV>jdIoI<7Bei&CYqacnK-RjMJT1^BJ>vv0DGTo>s#)h~2GXvVILj4c^?d-JZ|xcckQug_mU zuU)_P)$3Q6uUuAbR59x_b?<@>@Oq~B`bToupl`q%GuU-N^fsS zKtOSRet&oOmQ9;BtY81{-@iY9{`~s&>*vp(-@bkO^y$;Pckf=kdiC__(C%M@7tWnKcjnBQQ>RV=BNrIOqX1V3m|9$043uL`@^*J&=wOxg0CEm` zx;TbZ+)7S3z~nV+#;PvUr$<Ztm>H&iGTifC RgX0v)*PgC^F6*2UngGKSUiSb1 literal 0 HcmV?d00001 diff --git a/images/countries/tr.png b/images/countries/tr.png new file mode 100644 index 0000000000000000000000000000000000000000..0ecd06c99662602110314937b765fed83de71f0d GIT binary patch literal 1029 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFzhG*1*vk6X z?mZvBeS7r$*$D=Q<3Pm7aEyVWmVu#$f#C!r<8emDlg!K~n3<2Uu$*RPJ;lm;f|d0+ zE9)6{_7j|($2mFAadBPb<-Nemdy<#8gNy63fWS2okyBz~Hzg!)NJyNMkT@$LF+ou9 zn55(#S=rmNvJVs$?<*=^P>??_FF#9Ca*4F`BQ>=Xs;W=5wNI$4uTfNdrLX@|Uw^%_ z@)AYGGuqnQ)YNVm=8q2|RV%9UikZ8@bvr?9{x2h?rCJ?&yh z&KJ$i#|sM1S5@7eG2_OxX_pr-KDlq-+ZQi@Q2>mHQ9%C?aOHQ91=`A(9Bx(L}>`)=6HCDf2_`2jnQMp>09Q@Xq-b$Jiz@SZaiIAbVq#8Bv>xx_IuiK{lUw;dHv+sdDHQNQn{ z{n$_ck)Qs2bHxp|YL~qAUxt|OaM5`gZgtSp;INnBjS!2IekN~X>`wcey-#rZoZ@yT z+TmKH-RE?#+c8f21FgSg`aVhVe3azzJvZP>w*QNCpU*h~uQUBVzP2-XhC&TwCzEt>Otwg}qL??_-?Sx*Fe)cRL;J z_NyTBb#D0C^pLY@q08fgKlRm~Zz(@qTkvjn@54#0d#ds){XPC~SafIplyg(Nf9%=V zmy`Bp_ojPW)*O^zIHAII+Cbuph5YM4%S*mipJUzbM!9}S4fs``bGtVG$i&X~d$-=R zR$FPHICbL0;=;nz)YQ1RxWK?bKR-WTUtcdTFAon7CnqO6J39jd18r?>b#--FSy@R* zNg*L2US3{SR#s+aW?;+$<98I`34zd1DpeW z^;a%z%0DE+`RrYYv7{*c8)|jp3uv%pwTEkkOtPiyuTRBWEbyjX>t28j3$`FS-EKRgnDyGH& z6LkW@0Texoif{k{xp-1R6h%=`!#jB0TDMt7|3H61&-OmgetSQ??^BhO7;_AH28lo* zj>W}dANVuGKfy`J{AQ#)EqgSrR*}ip0As#R z>n6DsY8Z47TGbqQnW3HK*|tamEv3WEggwpUo50joy~$nF+QYG|2prpzx&1nEUqPF^ zkk?x`(vR0}rbp}UP4ToWN zk{SRatF2+g#jz~CSB*7UmiSX^O#P(9>FaXucFb;q?wziApV;mpiXf60qJa8x#VAz{ zSM(aIG}dnw8hE;WwvR(qW@O5m#P@{gSTV!Bbyr6xz z+eag8)>4=msq39wZ4zeUMbeiFLdTPY1xn^_b@6uyG!W9ZXhqPwGF?2T{Mu#m-Mju~ z{r&#eKR$49JRj{}2jK3-U=fu^!eafPkHg+hrp)2fb%8f1(OJm7y?d}|R`nw%^lKn( zE#V`k)QrtUW3GI=HGN>d%C)&9zaIWXk2ebPmfP-6yYNU<2oB$BvJ8a-%|xzaQjigh z!iAn}L|?Lg5_(RB<^s>21)>-q*mf3+IWii2y^fx;K?p*wqB5N5bpW7Y!!JJWOF11# zV_eXjleS>q$O^qG)YT~X;3e*g%^u(JRF literal 0 HcmV?d00001 diff --git a/images/countries/tw.png b/images/countries/tw.png new file mode 100644 index 0000000000000000000000000000000000000000..2e82e66c8f9a0bd5ad2351ae364a009ba55f0a52 GIT binary patch literal 633 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcX*_=LCux&QzFKg7s`D&hvu8_hsd-nwp(-cDtXEwUUK%B`f!8Zh>tAqFa>I?kA+Ydhv3{+U>@I7TP=} zh9XvT`WM)!c&YK4ty#XYw`;kI9ddWaH~lR>g&jPIavDTCbbx8dhoNWs7km;1{9cTh59&W_qHvT z7IOOf^~)IshO>-}XBZjJF*BcGX1>76dWMztB0Kw8PR=V_T-SJc&++o!5D+*oBy?Lu zknZ+?Ei0|S2s1bhq#_?waf3}Ik6V+D7; z3YP;V7?Zr+T^Kr8Wj%nL<(@8%Ar-fh6Amz4+4?nP$yeW_kveZ<_8z|cxzVYuD@e@A zOKp*l*||7J%}P}VMOj@>N5fEM!8CRL|4-gLl36gJapTNov)1ioS-m^oCoR!YD!{`p zE;7u`(Rl`MNjbROF+Xth7FSk4R*Xo%3X>~muU%ry z3J6N!2++89S?-n60>_JqjSh}6@GtI|@J>*}T$8)uuE=2}`7SzDLb+LqhfS2{V>IyzRnxHP!C zx45}Ad3kksdbUN!EC>mil#;q8JbYSo^sL0h#VILEgF=_Nx_5*}t_lpE9TGM#A$fg5 z@;X2NUQU0-$VoXmS@v0TDpixsLwi#L+T%pRR5U}4g>0mi6AUC>loWlmyc@%u3w{0T zBGYFV6)vjIn^#e^xVCt4Er+3iQM|Qtm7jHnOX8I5q>0(N^ULka+~gJH)nX;1+I*}t zm3!8f2ImNO&+#j+QIL|7$j#y@&gWmgAfUZYp*)d&VwDmP7jsbrtFF4p+8KeJl*v(MATF{I*Fa>4@WwxiQAzA&+6R=?sLEp>TKLn9p&ovqc=ZFTwgADMLR*sV(~B?~4r z?p(UA+dm`DKRP(pt;SF~;KZ4z%eDq9_iSIh(@v>3GEz`uN$x}0IcG0izd1=V`oKaZ zJtmP)JRO>E-oO9U>zx`jIYeBTg{$@Xw(o{tT3p39u0G}2$@Q7B^;A@~WYyxJh$%~+ zrmD33sBCarcb7+T;?Ff)b7D3r|tZy#0d%_Pgg&ebxsLQ097UT ANB{r; literal 0 HcmV?d00001 diff --git a/images/countries/ua.png b/images/countries/ua.png new file mode 100644 index 0000000000000000000000000000000000000000..db85d97e7382372366f5e5ed666876e46e0e0cf4 GIT binary patch literal 1041 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFcUXPKarGIe z)n{DRo^#u9(QW+&*EMH6)}Hm=e8q3uHShK30(RU8+I8D^!+Ddk?udQ&LbhD8uAdTf z@L|HyCrKw>L~Xy~(lIyV%xkZS%To{BDZKotVex%OCHEeYJ9bw2;tiu? zXHD)ubJ=&q@x(dzH=n|8-4D9^IO5~?q&FXv-hR%1^Re{IF^01z7|$GMJa?S=%rWK* zr&!M%W4(Bq{p@khE9bbbo##DwlJ~|Xf%7MYZeJC-cT?ihS&4_YWuM$rymDUt#Ur)l zi=-g4Z~8Ed-QmI(!%IDP*5-J2Kh9XxsT>fzhR zFY{`Mh)YWfy^t3Wk&zOV6&96a6PabaQ%BoSQF;BA;zwsZ@9Oe8EWCNu^5nLMw6XObm?*RRI!i}-FVdQ&MBb@0QNhZpa1{> literal 0 HcmV?d00001 diff --git a/images/countries/ug.png b/images/countries/ug.png new file mode 100644 index 0000000000000000000000000000000000000000..5c87b921b79ec50e75223ac536704a22b497025f GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFKR##P-iGFr z2TrVAzINNDZ98`F(=pKT3-%2P545(o^78Za^z}&1NMYt+!8vFImRCbvygo^}JiR3+>t?QduRqexv-g8-`1ksU1J5f8?0{`i;7` z@7e6!ZG7^y-GYTikDhqlzU%Y!dEl+P0oQH>+`1ii>vrmyGYpHDFtD&NFflQlJ;QkB z4C93htY^-!Ub(`xbQ$NlbG$ch2y}OI-Mc4o>5{~gCyG0F$-aKAedC7uh7F2)_Gohuxn)Zcm>&{r~U#?w#kGHy&57IsN+=@a>!5@85w(k2&7H z*15S^YgR7aJ173a z+|(m!>WhOEujT2#tFyXYY4@YY>rJQ6_X&Y-x&zKvxgB90kX&&w3l;G)}9Tboq z99W(hUz?Gp!Of|`%N^t7)KyXfj9Fm(jsiR(uuMndDo~m+$=lt9p@UV{1IRh(>Eakt zaVt6D08>wI@}x<^j~6NRC@C#|oGjen^r%ScSC!(YX>F4(@p&;W+~uGs{e440y}EX= zFn6@O{`~~|1p#i3-gRl2RasGyp<#Y;d1e7CcJE)mckR^9si}`z&fS~0j&H$*H8X?N z&(1r1?wC#fyDyTLm-(=9ef-G9_2F|j*Yb{nqK^gKg$%7FQ&LrqEJ+a!G2OcL%GD5& zMkl$lXKZQLzOB30=x8@DPw$+=!mdY$7ESu}s%_b`W50IYn&p*qkCB1#yWwgVS=CP< Ok9)fMxvXk?Dmb@g7Xs=L>M?vWN)|mlvGlYOwbXm5Spd0X4I!lDyt>5B`ib}U_U zf5rL-3EAsJL&6l zIxz5AeEike*iQuo=aZ5i<>r2`uKrY2b)%r*eSQ7e{QPGP4Y#YRe)ROb?d-f(U46Q& z^v8q=hl>i&RaSnQFyTUN?c?t5@3Urpnm&DZY3bdbp55i;#~bQD%$|LvyX$CE)2q32 zek@ydrnB>CYs=y0=9hElzL-1rOn3K}<;#z>x1H(j{km$^wW(9@&zbXM!-n^(R$ZSx z>+zB$XQoa$K5^o)i4zx;mY$kAbxnQ!$IY9cu3B|r&g>(TChh3#ygYB-**UX6?cDKW z@7@<1H-6o_=h6Cg_t&iXcHqFrJ$v5l-u?Z=@n5G;1LGGM%cB5m2xu}qEd)w1CV9KN zFm$lWdH^{GJzX3_DsCkw9ANsQyJpLol2G-s((isVZS(&zEts%#>DrZ>rQ!<`0z5KY zLULpRJZ_(KJn!LtbpM)7I~UjgIwR?zm~HKzEX})d!-o?yTBh_|Nm(#qVdvgujk}7f z{1PjJv!lIb15VsMd->|&R(mTuO>2F7b8TS_kq6ITKYluQ#7#5LLiRpp~ zNolE%pF9+O`b_Hq0~e=vx3`za$rGHK8eJMExlb{*T1l^3Ep=PnXSQ+qwJV;Je^+g& aWM|-rYYv7{(!MYtH)6Ty2>j%Ccq4t^8E0mQE)qHP@WeR<3ewX|diP{?x_FOc!i9m=TWKpuy!WasLzB^Y9My$R=-qnloB=a)8_dSD) zn0}~qGv!T^+ICqRfHn8PPiWoE-7+z{${fIiT8{|vG61#0xb~?R?&hdj1E^3jtv0%O z0=-BzGda7#{;J08eh{(CVH9_rFVE7H*=+kJ-dwZLN^(N}NsSDkSLV=4a#@{a zT`k1{r`$cKnKO^|Hzc-DPmZ*n-^L!B`1u>AGVjF8fcf3L@D`*|nM@`cjTUY;-0y$= z;{%8HylqQ`clQZfXM$1VRI%4ew7Nu(v zEJPFqS_p|hrr96u>bO{;Q3>$PgZLNCE9ZxtPg#z&!ldbYBPCI9D7;t(qqaJQDvqao zjB&Y^PPw_Whu9yYqLD;WKj|tL)$+y@8abyEcSnkjYl?se_gzq)Io^_YLKRVqWGITM z)Rh$_w+M-gE23AY+$65#U;dqu%qcp0DggnHTsc~B>&&A|`P7Q!JLxgR%%rM^b|S%B Wa2DvR$=mz)aB|wU)V`G4HGcr5;n(f} literal 0 HcmV?d00001 diff --git a/images/countries/va.png b/images/countries/va.png new file mode 100644 index 0000000000000000000000000000000000000000..0fc5b5fe82cbf8195013621fc5180a83a5f3cf85 GIT binary patch literal 1042 zcmeHE>rYZ~0KG;mWiiv7y{2W4`IyUPTO-|?I!s+=tTdyQbEVmIxwe|sGMV<$X+Elz zMdTwLDrrQ{1g}7aTn9fcmmA=nPV*Y5fRa*CGLYzB=yPW~=j?nqU(TsvWu?(+TWJsk z(KFJS$9*2`<9dIJPfvlcdI+LGtjz3GU-Wvt{aoH)Uq7zHd%An&awUf8XJ$-V92dQN z*CP;oHIsLq6b(uRm_hlpl`{Z$l;3C9K0VRWU3%lzdC~i3rRuE`kt@|L<5RF2efHV# zUJb+=jhrCVZugQ-H)^wyBuU^nX16aI40=r4q*reTFvKZ?IM*OlO3@4l7?t$eN*aJS zkh(D5!!1+VNPJ|E{YxC57eN{r2%M-KN_5$eEzhz%%LTs|3xQe+)UuyH=Dn-m!5{?0 z5a%kSk@x|zA1a}MK?)F4uwg2YP<7IE8cBd&PD6+2C`>1m8#HjBb~soo4W2+kFxf`U z@Fx7j=Ev1R#*u9%U4;JAcD-T;fkaM%xOrl~s56GtF-V*-^d{ahlQK7!G&h#KFqytQ z!_p&%opZU)`COMR&oaUG*bBT%7k^m`z01X3NAcUPD&7mOWquAz`%e|DCG0`zWaP9{>Q&9P*W3X^fmp?9Z6$C)zq+bUyx@ole4dnpU;=C z=|5W+TYKf<(S@6mgz@LLlFF3RP0@G7mVIQ|ByX{hUiTm=!lQuQbqo&WU|GN+zl!jj z)<*Wpbj-Fw(*Hd{px5!DAeuQ~&cUhe7@^z~R;)`rA4ER{KFby+!Gmx>E5 uTn06&qfOBLs_0^|nIPJYiIpWW2fjg2dPUq62rAwCcan_MEM{Lye$^kEC!mx7 literal 0 HcmV?d00001 diff --git a/images/countries/ve.png b/images/countries/ve.png new file mode 100644 index 0000000000000000000000000000000000000000..0a90e4733a304618e8c9b7457afdf835420d1859 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFKWyl{c+#b~ ztZP{%chd^5aY!x{R+=KFI#o)0skG)y8SUAM1}jvIml(Mm(X-p2Y0~HzaM;oRfR+1d z*N_7qp_@XJPbcQz2}?d4op~lY{YY@!nzF{r%BCw43vV7fA$;Zx!?|JNPUAxA6yEAp2vE53WD|LK$IxpVsWADBFR zXz}Zp)1NUtncD!^(P=lk*xc?+pQgOA-rBg@X*5Is+s8}6O&&~PJi6o zo;o?ba&!Cd@Bc3#;G3V{&wzlqIH2wSfl)jPaD_kz$EG(xImRS!cNc~ZR#^`q=b)#H zV@SoVF3p6n}rTHJ1=@P$++lKgVV>WTc5VB zG@K~t=$UzwRrRQYV!C~Oym_>Cwl%wYxxaiq|AGmVcCOsh)3$e8Uw32E#;%2O0VfWf z2|cZLASm{-;f2#jJmSSQmS`!etLUieYAdO&R9m-3gG)pxB`G;EE%o_>XTlGjKYjR! zh08ZHKQANe^&Erbb9ZK5R{Q#$p>8!nbV-GV!{RyMyP033( PgM97j>gTe~DWM4fPtHn3 literal 0 HcmV?d00001 diff --git a/images/countries/vg.png b/images/countries/vg.png new file mode 100644 index 0000000000000000000000000000000000000000..1ff7ca119ffbf7a822ff05d53171546b6ec93ffb GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFzq4S`-jL`y zfnisRE3VZvc7;csShixhiS3=@niCoM>yt9C*EGLazGg#H+X`#<0(Je{^&Pu9CY)Qp zCDqAmMQwYEi_g}X3+884%uOtslV7)M?uN5lj!v!WO^r(0v}og=O(*n~BPMojhz_fD zu*t6|@6a(ww{f5JfTcGPursr60;8JB3G}+9n(J5k;oB)w2b(@`bc> zMD&W~%}bR`)Ac<%4O}WsJR23M&*!YnS`oi2HRp

1b@MzhPNv&yI5c<^e`t}B;rJ)U;x z?d-*?BNjfY*!g+sxvvZN-PnEWN7IxgJI_7Zd;CJq@*8DqZl_M!ojv<-``%amOSfNs z_HFZ_^G{yAPo28EeC@^kXRaPUb^6rB%cswr*|d4{wo4cD8|s&y+J5==^+zwBKK=M| z)1hsvuWVAAWbC^vkYPH5*km#JK7}h+uk^0(E?g16;^f?8XO7I;-PFA$XZeAWeP?Dp zetBu-x@i+u=*(YdyKQg#v-h13pG|rDaqaYZ!t^X95`k^BX zEp38VZkm4h67c%1@2fZddk;7qKIXT2jobAbQLo>oJbjT;Qfl?+ap|kKHTNHszkbto zn|TUehw)xL01|La$Wckk^!ee`+!#N+PWxPu4V zs;W{RK0N&O>#b|oPJaCO^4z)OA3wgGGiT=AyLY~RidnI|xT-Q_-+HaR8yz>Uh<*3= z@w2PFmoA>&H_N5FtMkf=#*J~3mlFI>g#~~6_U+@xj}IR{ym8~kwQJX|T)A@T(xnR* zE}TDq{@l59XV0EJbLPycQ>Ts}KYrxMk^TGk@7c3w=gyrQHf&hFd^s?3fl)jPaD~7D zp8L)~ImRS!cNc~ZR#^`q=b)#HV@SoVuM??kZLLUK~1=m8tcS^PI0$+H`sE;;GB?qp=D`LpL&C2L&PBnL%S z&fw_(IbmgHeaj4(1ruEtOqeuf?o{6>_2BaG?u|3%tg#C4aJ_Kv(wV)DGnXz7^N$Pm zmejZseK<4k;j~LPp1pj##5VO>%z}XXOJ1t=@ts>($N5NVt?~0S%v_QFv+YWo76yi8 jwf4N~xw-4}#!7aE-`|Wp*g8J#2l?95)z4*}Q$iB}HYKov literal 0 HcmV?d00001 diff --git a/images/countries/vn.png b/images/countries/vn.png new file mode 100644 index 0000000000000000000000000000000000000000..31af3d543ee3d420db534b3efc4d8e70f3a41ddb GIT binary patch literal 1038 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFzhG*1*vk4> zdd7uoyf^Pj+)nPcSnd10r_j)2ytg zSXoc7vK|MLoSetGIL~o$UEt+C$;;cp#dTRg;FOTi4GD>J5)x-6Bqj(7-jS8PEi3y# zQSpL;{CRo#^9l;HBqbM1OJ7!3f2ys$Mp5ylzWzF8VPy2f&F#CJ z+apJZ+xB*k933AzIsNqVI&5wI%h&g*o7*c-&lesZzx@4w1praNJ0G8qettg!1HT6b zehCQp78v+8AmDq;zhB3+8-G!lpRn`N@+2iTr7*cU7IpF})moIxi-+J|E?wL}bw|5U;@@{ncrI)#u z_vXB;Rc>bM7&VWEIwf+uZV8BgFzb zcCNLH^Xr&D+1nvt*A^RfMvW_%CcI2lJ$?ApIo;5p&;uguB3VpQDH#gKjww!xkDVbU z%_*{qv(VsL;KQjC9tP{3_Uhqd<2q^`{bH8p$@X*&ttTojt-qLCZFEX|a_%_jX?gT@ eb9_1YOqOAqi*7;Ukpudmu=8~Fb6Mw<&;$VDeHhXJ literal 0 HcmV?d00001 diff --git a/images/countries/ws.png b/images/countries/ws.png new file mode 100644 index 0000000000000000000000000000000000000000..654b8420e391c68e142439e0da4ad6e794ca5463 GIT binary patch literal 1027 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFza=Yo!PIO! z1K$ot{vE8sd)P(y^2#0+kh|#U_be{!S!&^C2Ei@NBAYoScPi*hvTo#I+{w?nTbOf~ zlEgt(>4Q#IyAvay7iE1+i@n6fu$Pl@Pj%HN28LP&h8kw(GrYWKxwtyy?gTft%VA+Jyu5a#r2KIASeKFYH#75VX6EPG+TX>+Ps__6)zlsq5akGxKRy)>Evk$5~m=u(O}wuTxgus-||sK!1mZ##>XRe$w6yl>=p5G5JD{uk-pcBvk>N1| zgS!?M=S)ma8ykPNv%6qs`qjzls+H9bH@EL@Zny329y&Sw^z!=U>-*ZnB*B&AD+~!t~YgLY?_6+Ry8<%lDftA>)0tJoo(+JFIGY%6^t1PP<>Z%xKzW>CWOS`xhOqjK7-p-jTn|OAYS44T{mI?-V!~{8c`9wrbFxJ?( zVbwAVZjB>{&#E3cfBN`A7NZq&ESWW~gor&%On&={+hoN;C3{;*jVlt*Q}bWGVK&sT zHWkyD^74Jk(-)FVh8n7NTpA*;k}{vmahPeCD{HFp%r0lhxTO1o)yJv}6nLJlelF{r G5}E+2sQB&x literal 0 HcmV?d00001 diff --git a/images/countries/ye.png b/images/countries/ye.png new file mode 100644 index 0000000000000000000000000000000000000000..4c547ccc92f7be42b12f4f5cfe6ec302b79e3531 GIT binary patch literal 1041 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFzk22B@ngr8 zl$Ebsy?XG_A$bM)+Pd1N<|Z>U)7;#g=g*&=J$vTIWjSmD`zfJY} zo)hq{ApB`g$fNAwkEJm`nzA00Cw*zj`}_IhpHCk?K7ab}>*tRzp6!=qs1jkQ5Mnr} zz$kMTUCWmTFO82(tjW0wAsz*PK4u^4FC5T0bh$EKa|A1 zt4h6aVq#)oV4$zBucxP{rKP2zp`oa#C@U)~EiEk} zAt4|jz{|_a$;rve%F4{l42&aSOpOAnhrpvf&rN`aGA4PuyD)UH%6b4f`#oJ8Ln>}1 zCmdkvXlG0dmsXb}OHxEb8=cg``102EZA)`o_Uu~OH@|ZZiqfjNvb>g_+=bqf zm7?Olr3)skZ)n_SzQ29J?&Z__*UeLu59pX_sH3N9{zp(T&X-=9uHEPxl*4_3k?mQ_Uw58SWP+)nw`njxg HN@xNAc4R~g literal 0 HcmV?d00001 diff --git a/images/countries/yu.png b/images/countries/yu.png new file mode 100644 index 0000000000000000000000000000000000000000..9947f62dce77cf45cdcccd9d66464376dd59192e GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzFzk22B@ngsD zJo>a`&HmkouW#LR_R5|2XD&ZsP_JT;@L|!aWznkP)T`q$YT;3dkae1*8#vz~d7Wdz z690l7-dStCGFJx_Yz;2nk=k@%?y}vBRv%cq?NmqKoLvVmUcLM7%;m=nnpF&vKFnG* zth)8Ay0yF}t^6iU0u~(-wjF|6@lp=`iXPMCow_BBGc>&?>4z*djasJdT4ND4&naz# zk#CDz_GYW_e*eN90mVDR%eKYU?2aniklMH>tNrlFOHViNI&tOd)#uNj-MDu3z`ngp zG#Qp^GcPmXTxZI=(?xcJi+s1a^fU+M6Jh!b-L=;E8*B|Ty_)WHGTrS?k^l9=fYq_C zXHK5@_5Ito&!67Ddinar^Ow(_E>dAwrpdZQlXZiMz#2=5JuZr?928eMDNnLeT<@ka z&q?ESnCS{ny`4cO8+;8n1(@s)v$&q_b|l{Ec(Uv5{D3RjehWhE_NRGYEs5Bg;&Zex z;(l}bwTAQu?YY;Qvo4)Gd-mjsGbfIpK7Q=qub+2s-nf4G^6wu%etiG_@87>afByXX z_3P))pWnWH`}FD4yLaziy?XWZ>C-1qo;-Z`@WzcB*REZ=bm`KC3m49v0~&Pp%$YN% zPMrcqA}}gP0jVM2z4V+HP!D60x4R2N2dk_HkaNJ(#WAGfR&v4trYTdu>b_a)yXDH1 z5Yy7$Giw{1?%YZ%GgGRniP3u1)V6Gzkb@#)a(;VweoS0jw^&>I&NWL-sxP-rcIUrbvLK+i zBsjM=);HNF#o1+w_YUoV6}wcdRV{T_FW9nZ)uufkFe&*; zM%KN8qSuX0KPFE4KWE;%$y0yNop-jp>f4p8)>hX0j{V!d?~_y9_khe_2^GIf+TKl> zdw$Q+zl!E-HSBljxg9p~J?|9r&_CywU&g1#uASXejx1VpfAii?(xyw4?AB|!?Kbc| zW)^bME%jMI{?`M?ZeO|ayrQ@1%*{)!v->A4pEYCE{B;MnZalnW(YBQywIFp-e8l~uG;l(&+X)Rk0sRM+>^Hw`p3@i8&-Ffwp8a7%J?igEHt z@i6l?bBb~b$O`aF_j8MJ^H28=NDqiBi%YFdO{q-Txpya{EQ64~psba&jJ1TZpT2K~ zr(?Jkk2YgwS>m*1z0;TVHBYMSp50i}RopwfrKmo$x}#|4{w)QKk@{||4q-yJAq?7< z3=>l+)0(w^&TOfiq5k#z7vDKXxyN)C1T0N2aN1KSWFGv!k^K*DbvR3K(@_aYH zI_vPEQ^(F7JjyBZDl31D*Y^#+W*0A-UNJYg#LV^a-0O_B+M5dszH{>QcJ=Wvah;95 zaPv|?;`3*+0%FqQ!h%d9v+m!GnVkCg)zpdeCr3vFOaYp_T7SEFx!>8#PlQ7!h)wrHL*IuU8XIpORioG37s-kWMd^eL-0SNjsr}46+mA0 MboFyt=akR{0B%Aqw*UYD literal 0 HcmV?d00001 diff --git a/images/countries/zw.png b/images/countries/zw.png new file mode 100644 index 0000000000000000000000000000000000000000..7e69c9e7815cb4c447de09047067031c8bc29dab GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3-oL&dByLFfcO&_=LCux&QzF-zTH6MpDj4 zOZ(A*Lq`kBPdD}KUbkUq$HXO5roTCG?)Q(M=B8%1uHWkE>D|6-&&hM=JG;C0A3L0q zlPc{bY8WS}SI8PY(==+5MfvLRj-6RrxeR*wtd`XRcGVJ|or*cj-6GnoOV$PyO>!)o z&0M>fw`;v@X0!CHefq_H%C$4K+7=u1tubAB+G*hdw~d$l*PRPEa(s93bcP2n!dI8kROkM4$M66BKm80?z24!=uekk(%ieuR zy>VUO$z#P0>lF9w*7)?n^!PEoOBYT4{C0c##OdGPfNx*?R;-xt{{6cPr&v!NU^ucb z{_TtPM|Nl4xm}6&?&d$Dui|e9@$bJb4MOM~(YHDY-wO?CVt zuU=k80s^mme7*z*KKAv!;_3MyFwjX+@k~i^h^eW+iAk!PTbz?qUO+&WpP!+=zMQPA zi<6U~fx*{Lp8^8{0{s2m-P|5Nd{|#!Z*FeR%gYOlVqip%0?ZIN{o1M@D9V`R?e4$8TR4xHwl!tX{P;`<0}`tJkkGvNIDt Z^D(T|H~N_WUh_Q2zn-psF6*2UngBd(Whwvw literal 0 HcmV?d00001 diff --git a/images/device.png b/images/device.png new file mode 100644 index 0000000000000000000000000000000000000000..eb153a33d13bb21e935456d533388f8baaf5bef9 GIT binary patch literal 500 zcmVel8&MR7pNSL6bdnSz31V6q6H69Zw3N83NEXFiz`u}1 z|AL?!v(cT)F6u7`>8fV$CWO)^x>0MuiKJ!B$F!gnbs)y;B0A3a5eRtTa5;zjp7Wmj zo+~lD31=V;3$9cuc92S?kcUCX<8d2!OF+I)X^`oXt7|nPVL`wz7z?Q+64Us6KBpQ&2Ds||=k+TSfcg2ijE+v)kJd3I zB4I%=D43g@v6~o%K{Oiek8pP0Bb!aTSaeK@blOWKEcmkVk7~6_F82|`I0m3tECMhB zti)pzG+Qc~b|;9c_8lM)c!Q>m^R@5|O?yY7P_PTwvjF0+xha0_mqn+Ycb(2V`FvhD zrT5(EDFJxBA+~ppP?Q9_dj^V<;86cPaBE$g*l7Hr-EO1T66nP)vK$IycYfJkR&X5x@)l&pGte{_}3aK2W>8 z^-1ZE@C)D$unHgs1_t!p+}uNjwOWnMUzT|Py;pcdl{oRi3W@A2p66Z5=ksp^-&%u% zgDfm8U>F95VRXb=Yx4O#+sQQ^e>BO`*()Rljxj$!Pdc4GSg+U57K_DKjr#>!YoaJ3 z3_~iF3gxx0$W1*-^VbXHR~?SNJcDIfEG{l0gvh2+sgkuP28g1lbKh9|nR}IW_Pe7L zu2%430qA zl8K24W@e6)$z&b`>^UeD3cU4vliozgm&GfP9%XiR7Kji+6NVCKIsKP|-Q8U-FMrAt zW6$yD#&=v;33=z;lQbG0zVB17*YSNH&+~|)h)xZZk|?EEUjCZVK|wmM`D|sKzJoc2 zhKA5u69f_|n*@QR(eTk)w*Y&um&;|;_9c$J_zcz6bA0og!_ng};W#!sJ3BO+4T3-d z0^e_R0a`}{LBPhD3$eWy7y1|)C2IJ$;QmItf+PaD7d03W3GMU76UE=XLrfGDGC}qI!H*WFcb%V?6 zRdoCS+3YY1)y6oGR zYzu9K&`2pe!v+rknoLbia`^BV{r&y)_4VPp32fWJvP^^!9Z?j8fJTTm0Kl>wPMtbQ z7)F?;XfKxj$DXu@#}FtLbtCwGgKD+fwx;j1_;7$}n$&7Flv0SEo*q3iGJ@}W|M{V` ic-`DWi1yUpKJhmX37afwuiEDT0000IS@C4*({TfjOl$aNYd)qT}6#gN(1PO_$Zg=Ot-Ms_;raJ(2T_;(`D9WPj zrfoJ)n=sW5hXa73C~Rk0c6@&WuwJhv0SJ?+D2o2Decm2Fj#HTDD*)N`C=|~_iNE-m z_%!%pjMs(aS_VM305^C{0BQKcy96Y7dU)rrssiv?RR9(bi@toSPXIy)qINI4p>NZ+ z`6^#7A0r~orfX;Sv##sPvW$ph-(HkNQR+leR9Tku`Mk%6eo|4kNZFQUiq`9X?{TNl z?{O{L=i3ATq$Y+$%ZX{^iSj^^lzh*HkFrVGH%(`KWywIqKlKg!$p=c0nGEv)0000< KMNUMnLSTX}zm|0X literal 0 HcmV?d00001 diff --git a/images/files.png b/images/files.png new file mode 100644 index 0000000000000000000000000000000000000000..76864d496e46155ccacb5725d67bedfa583db7d8 GIT binary patch literal 1113 zcmV-f1g86mP)kZGm~O>9UI#?M_TRPb7$xK z=KJQHv%)SzL@lC?Mh^V`71K9=;Lcq)h#>U3x&!0bk zJWbOggs>x#q9{m`#GgNZ{`2(o^cTP^5CP?`%0y9=03Tera%J7!eQj;c(lqrnO}*dm zZ(LcHxw~7p+tuaeWxsUk^Iw5+5!tu7a@m3Tvx$j`6J=RONs@%!m`72>p+g5bb7qvq z#YLT(`Zk`K`TmD2%dP=!U>&e{lc@=C@a);M$F5($-dbB*^Ei&BF|sjJL>L|(rq}Dy z>2&pti*JN^XlKJ^(sH)WZCqMusZkVd7 zH~MatrIAL}h~q$-_L-WR;>nZmc>44yH*el#cJ?Q-EZ=e6G#*IPicOFRxc?`Oh?D09 zBP08nn3!N>WFJ#g)6CC5qb$o^7iIkRL|K+~1&SGfQI>{TNm(j+o^$NjQ7&HmjJdfv z@;paG==b{@)z%B{T>y@m<6b3IRf?jdEKAHvR7=*^-;iY)Aq3nZNn&cbH||>in#r;( zFf&xEgsO^a1sXz(nV_nG;|~3PA2TJ(vdtB22WTeqJVPX)T2PjXnb!c2Bw(ggp@K-m zod4^A)9+_QQN^+>6{zH?5>$RPajNQBmW!&nYAHKxrkeqzmL*4(n!Rqw6-9w43YZ!0 z)@Uvv2yqTIFN&NredF$x=~Z&ATh?$F%#4OVR3@1rP+j=1~#R0sZEpA=s2z!|Ut^y=ih9{Ne0xJ7kv3wsZ% f%}ndNy&do`r4zaIE2bJ-00000NkvXXu0mjf$oM8t literal 0 HcmV?d00001 diff --git a/images/go.png b/images/go.png new file mode 100644 index 0000000000000000000000000000000000000000..78dfcf833710eccf9ad7b4e58542e23f6de06908 GIT binary patch literal 440 zcmV;p0Z0CcP)L-G+J2%#LmLX*2>aOQshrah+ttEh(>%w zn-qe&D;gh}Wp?&j7~_L%valaaHJo$ronZzhXLic|)JRr|WR*y>b(l#akNpSPs%<1n zoL_B@Tj)@;xUj_L{yKpFU!nlfdO&DHj5UOj#@GmL20Xp`NUR9n0(7J~X&-U0UE?Lt zMIaanZtuFZd#6}2KfQ|(6XPfsSIuC=V6EZ0d&bV%Eh z>K%Zh^QBD9{(*tO1Gws4^4|X#3*-yAL>Pv*Fsb57b(wr2Hx>r)hLWU6QsuOfa;22* iEo6be1)2VXsqiQ56R^dOP)`DgOWf1gS|x zK~#90m6c0xTSXX#pE(y_Vmr3u=29naLfxbn)F4tyl~TGaD}4EwTrSSi!Pc5HVs5c8@FkjrZ|`8<|K`8$3D5(KK2ZY2IQncfmfQv=$v_<`M!Ba zBiO0-w$_%f8+;9?cv)4;vTo;c*5^QNd(=y9j~z00%|CtXT>shg=T291xjdRCFbspL za0;`gUSILP6yINjZGDwQ%fZu~+flL-KQz$h@j4XJ5${z58+OPE-z zX}pGy#pE;6x#!GmxXEpm7`}CnM&|&>dyaA9Se&ErRwf>el1L;N8yf=%0Ih%r&~~4J zKq(e-DYn8UiRm#0?%rl9HH#iPfnHMts}Uk?5l;1;;P{bdW~T1(@ct0#bQ(?5kW%V^ zYujAZ0|a1Ht2GvqDeexA;nn@q3Zm237`p$Cielzx;cHmpZ@-SLXANxP6bUkL_%)nXA_K!-skbtc`6*D zwKdJjlPAe!GP@JH0{}p+RwJEG6OYHac<~~BuaD*BWs3O}0Z*Qx@ma7t*HKlzX&@oplK z2-T`XI2_{6ogvoN*7gSoA&5q!n1(@WDMdIOCKL=2>^?{Il{38UauEtQ;qiFUG=Z*b zbai%;NF*qi%lo!S2_f+Ld=&C|%9Rp@f<-XcNNcp6#f5p&YtNaPnZh((#13^53WZTX zLxT^;arOl4xCcrpq^wbuHFQHqB0-0OmFLQpAGmz^63=F57#{wEWHL#iSfE@f5eWG3 z`~CY?@HYq3G|>$mm&>G7+M-h4BGMEl+!Urzu*m1L6pI$+atV|RA;ilzd$mX@g+kF3 zX~OMxqiGtoT8+ua4{2#Rz}Yizva~dZ?((1n*mjXkP3PI%9Hwdhw+aeYfmp1ASjQox zlvFAeRwKDz>E-ca0bM(azhCx?X zCk+h^WP7u0Zfziy1SHvfmIsLkRLXlF@SXs}FnIXr5gxCHo}M1uE)%cUM{|q7=l5gV zMK(6p$>y@$9=L^F+@SCEH?ZyT{Q*iT9LJ$jDKj!M!u0eM(da?i+uKn1DC@?ws zgk*AxN~y}JzSBe^5wh9r{(zO0m5rM>Z~DAmFM&XSrKKfCNAF^q2AZxRYZA+{ux%T+ z+f7^BLDtvT$z(Fvwk>(_$m~#kzJw6sBTdsj6GDW5e`2AO+AD{uKAuv_=TgewfIopD zU=46~FZ2R2;4l!b+rYmEeWyy>#uGpRsO?^;13sW}8}@$yiWe=~0P=tXsJ{R|KLSzf SPxwOs0000nJY(i5b*a|{viz&fDK@p;)lY?EeSqdF8xKuX>ow^r?;1CFf z(zR|ajxHHoN*y~$Kok)|(xfU$Ufz4TdmVg9W2)lN@ATui?}z*SJNQo$J@Gvt2|T`| zw+4I%8h}w9U^<!n|*(9aPSGJcR;dQt!9$R zQzhr+``n9vO!`$2)nM?+y6vh~|))-^1+*iGjcDvoJl`#fm z45?I#v9U3<)_9(W)*8oga9#IiP_x;*JX8wHvJgU0tJP?=T1-z*<2VkE<6zr1wryjK z`4{AQ-tSVWL?jX+6bf}=OG`^wmPMn{!1KH==;-K(dcE!d2Jkx|Q>)cJtgo*>4~N4~ zrIe!6-o?em@cjHdo12^Z?Ch+iweC!I`SkR3J6MswpklH3qgX7y0v-i>Ct|VKlgY`+ zFO^D#-QC@vp!2P}-<4$@3db%707*qoM6N<$g2Gft=>Px# literal 0 HcmV?d00001 diff --git a/images/home.png b/images/home.png new file mode 100644 index 0000000000000000000000000000000000000000..aa6a5c82e70e3b6c37fd43d812ccb103ae3b2d7d GIT binary patch literal 1105 zcmV-X1g`suP)6f{n^x!XSQwL-PNVi zbh9XpIoc=^3TZ^rX~rj7G{XbEwTj!nKIQ*#DO;{R!07k~n@rsd9DI7q#us! zOW)1n*K2t71}#(wb}}+jfRoF?d7Nb{OzwR1?APj*jGHAd3d!tik+db6lCm*hST#rnbke~oY!c?AEC1&iS2}VY+x%s#tUQT z&t#Oo{%xlxuKI7zPTwHjp2SY1P<5MXGsGXi6p3#broDR&$#jZ~C7pF?hrXDKrfDde z!ED7MH-2`fvSH|rq@H+mSD6fxqti&QjMAoa>E9AY*A6m0kCRG7u*?7hDUFQYL<$Hy z7K);fomrsaw@#=4nM{gRnSQ1wyErp>5&P;4-D`(v@7YK)5ylFd2q{sU;JQU@+eXvW zyEy|_S^bF$5DXfuUDHX>vB~Aql!^<)*7mU~VPgjkgre}x@$a~B;Ua~?0tXK4qkq#z zR7Ij`%TiSD2})HJ!eN_0po{!}5n}NuAxA?6|Ep{g1Jfmm^15}3&6=a1dFc^h3_rYQu=9fiCL zkm!bi?KoJLjiM-b$=t6bkAC)EVQ#MY?(e70eSLi@>jm3Xq!iq9098{l3?18cutN?~ zQ2>GOH)%Fo_eVSY@jGQ;@BWXDGT?iA(j94}6d(jrDo7#G)BsWoplUw1@W*8uUY)tZ67vg7l)N?^Ge{!oFn(?3*ojl4V~%Cg zo(j?18PAD_AJo1Nzl;P;{g9~}!(m6q)K#k0#;2p>H-G9#$4JHvETe5=$Lp^YR^t8# X9hhd(3{BE{00000NkvXXu0mjf`NS5_ literal 0 HcmV?d00001 diff --git a/images/index.php b/images/index.php new file mode 100644 index 0000000..9d533fc --- /dev/null +++ b/images/index.php @@ -0,0 +1,36 @@ + + +

phpLDAPadmin icons

+
+
+  '; + if( $counter % 15 == 0 ) + echo '

'; + flush(); +} + +?> +
+ + diff --git a/images/info.png b/images/info.png new file mode 100644 index 0000000000000000000000000000000000000000..092335a20299050cd5361fae7397177a953b9a0c GIT binary patch literal 510 zcmVpBOJxYwKVqHA9Jzp}L5ZV}}l<=%|P~se_?T z{tb2$f7Vh{+jMYH5C>60HbrR{ClTTza*M$jH8F{QnB<;wn-1Q4xi`0)^n=6s;k@tn ze&>4+{D<%Xb3hExj1e==eC3xtW%~gjG%*uWUN;5sRCv*)PC9$dub(??t$q=}Fz~|! zcRQpDmh7JNTzZmQdu%L_f)^EBhdENn@*@54|lmUVBfC52dEp{`^v%b z8CSVmq?CM}>Ia~AGK7>8DJ6yc1JUoF1mFiwD-43*;P|`)ETpugnP4FVB|Nmg>s5fD zT|sPdZM*qUy|BQtYzQH&wN@;!yE1nOv{V`dffvn@ zlDOhLon>=j!r`#?t}!Efo`dK&tBrOi4!mmchd=ai_@% literal 0 HcmV?d00001 diff --git a/images/ldap-server.png b/images/ldap-server.png new file mode 100644 index 0000000000000000000000000000000000000000..d40900d98abae5328e1c2700891e8d7e902097a4 GIT binary patch literal 1084 zcmV-C1jGA@P)WFU8GbZ8({Xk{QrNlj1+3MgYKATls8GayP~Yjt8ECu(VJ zZDC_4AX9W@X>Mh5Co}I@000AjNklFZBx>O9&-t_^ipF8m|jYaF(Ot?Kvbn*dD~bk zMX%kp_uYebRjpQSlN>rQush$*{O3P2-)soKoCXSgHZEU&pBIsP_rAF(^atPH-zS|; z1K>CgSFc{-#`OBZ@z-v-Ri~n#~qxPiGk$9VPR|5`Ub zPXz%0QmGWGss>nia{taPS{i&Gh1+-UcZ?1!FTdUWeqwThCx3{80aR6`*=*uCPS+t4 ziFD6jdj(!j*;JIU&u?vQz5ATWoa9(49t1E=lUOWRyrg z-~R-_vP>>qSnN=7)c{3{2A`m&@_twMzgz_~LJ$TrM|o>bzq40D4Q)+XGo{bL-{}KD)V! zLvXU{Ppbi&qIOt^dgGT$B?LjB(P-c}4yI|cxw%Q9@aRQX#T6gG!NGwqd($-0G>u3k z;$!4E4zXAaQ50ENSm;mGC%zKdw#~-I2BIi3Jv~h}n`LBVq|2yR4-XG%wOaqlBG7|! zxlA^jWqW&@+1XiItrnsv`j|P6Ln4tN6bd~*z|71HTU%SKtgH}^$4MrW3=a2w-h*GZ?-G@DHf z!@x96EX(STWBn6@s0ZK$k4B^Dy3Wzj5td~k%QCvIqpE5*ux;DD7dP~842}cT>vbxX z&JJlb8Yqf_q9|0WRb*MFR;!_D8ufY|S(ba_i~==48C0qSFavz*9zL&r;{MOaykY5; zkgEwG1;pKV!ELmzLe*~RL zL_t(|+KrZ9Y!p=##(#5XXSTbxOVe}>YnK$3wiqxHni|3%V@t$`#)s+yCWZ$vK@(m` z1hnzN_yQOb6Mc{ullB3OF*Nl7iKe237!slli7r$qUF@dYZM#d$cH7z6KeKav=+1Vx zt-wi6X6D}9^PTgZ@7_BK754Dqf5RG9Stu0Bm0p#KVOjF0ns5TI7ktm2J+AK>$%^dX1Y|0ea=s6hK-X4K zX$KA*crhA{-tO(~Ehdvm4jw#6I-Mq!O5ykWi9{mw_xA%_0a#jE;?A8re*oVD-K#;? z0L;zJy##Rj^lA0#)vH!87-akQ?d;gGgRNV)5)Oy+yLa!VudlDXW_EU#2M-@ zzWnHecZToJ^Z^VG4w6VDoCf~3I>NDI$EdAc$wk+7E?v6B;lqb7e*(9Ge;k?=XM=@8 zAu|;pB|krjx%h~D#vq$nVDWJZGm`;8(=_xNH^QZ&xog zDQ(W`9w@mqx%3Q1B1+a+BJ()OTr$Cuu>=x4o*Hzo2UQhl>dHw`S69c)n>X3FZ{G>v zyAr@!71_3pEG|#mkXh~X!LmzSq~Yvja^cAXIB@7 zVW21q+qP{(f7kWp>J_E@?Ck7xQr=kI1KUCtG8A%)G#V|BJD@=QsvamvRYM3jE=?!6v4L7uVw&zM!8w6Kp%B0qfNXAVJ~cTxiJ~av z^ZEZd?20y$BC=S(DipACxl&IoWYGfPm!Y9D9RP>ke`r5>;_aQMoE>dh7DGcr&h$dn zJ^S-FA2adqIN60HSu;y6mnEOgQm~2$6ly#=gQG64UAu;17-*VCFc<_N7K@?lI%8vF z?BBm1;632SGQi7z{e{1i`Kf0)&Gzoy%fP?@w!L!xg~MT_lyrA@1M~tv0e34aPyiLs zOV8DRJQ9`moX_Wrr_<^6=H3VX0PX=f^nh?M4cdc2qp?sR z+Y(m|G+AkyR1>5v)WzBq*1>&re`a=eX7}^rFZqeJwKcNYEUK!qv$Mm@%#2i372o#( z=ytnoZEcB2B!X?*ghC;-L?VF@g45GeW@l$*yEm{Vq!wBuCC&F9#d0OSeAvZ>r75gqN*y3i;Gk$718VU&{S2We^4k81Oer8 znYp<+*4NiXG#aJdZZkGECa0&T$>nm?YBdbQKjp%g=x;~~ErsKC!RhL9c!D&dOuVI=Q0OGMU=~O?gZF~m; znKZ*vfK0@aQbm_45!nY)fB%0vDWt9?x6dNvsYD!V^1d~TG*g(ZIYrbjBR zqt&dxxVF5)Ypow(N(53>!G& znRiG?cd0(U&$&T|-}irJ@4*ue{!qBO)WdUfsM(bAq3gEkdLcf$vclVM&NKhfEx!I@ zAJ4l>K5x>WJHwxc0SEgX?muWFQU=npt2nJgj2P5vzoCVE0>4cne240jd({4|Q`-24 zm9OCFKtp@x!3US$f90)<7x{c)iEGO@a9v0x;nF+s`WyY2nL*-4j6|eKB9=j<5=g7Q z%k_BghLEUS(iVr{z?sH;x%D z#yCD{5m&%=p(kMI?8`K)BA;ok+g zoCD|ruF%lX(okQarKP2#yF$;%$;8OOz{tza!NMuXCoCk$Cm8Wo2P0buBfpro56e_+Jtr9UUDb10xR;6AxHaKotD{U6*YDwkrT-{!#m5#YVCs2y7R1;eU`!faA@2jJA_+NpesoZ+Ki!dTBYOS;D`22i@Btmv zOuPL~P(ht4$VrHOa+LRh8{U9;;2mz~3DQ6fK24s>;#ipO+22O$N3ZB&c`JOFN_;2N zlGuGLe|+2V=_ygHI}^&7fkCg9`EudN1z{Gx9_&R;?<-VV&|0<43D$?in!@N;R$<;fEczUDS45$Ua(bE+J?i#>To5+#>=A^ z#K*}gwP}X?{?Fc3US}53528z(d3=)ium(rhQ_ycXJ7VhiRn*wfTp{1)S6N%sXpMw) z0R~Wjk*2^%=g~_SMBZY|{EeCSp9(Wr(wkdZD@@@NXVxTHG}6OCU?{{p`HHNJW}?zJ zyiLh%ZlZ7>Uf|0LskPR*WFcPY&#p7OW=D{)i z!aQ}LSf^cJgMpcMYaZ&nq`Zw@`gINcUQ9CUm8YnQsAyVg2D?Rsx`=BFU*4GMq2+~f z$<)o6{hjUj4E!_ma*gNr^z5D(GFKpPpIipA2E)t7>_tiB<>;<10GD%^i710=hx36t-N6sCpzOY85x=NAi($ zeE0UmO8{#*O!d6KY1`A2^!i!););Q7h^d$b0bJSZ3*YKcKVDP=Eaz9d9uOwdREw); ze@Bm)KpR^+QrDlI1aM-@*u6of3Wh3UU6q)dyyovcCjM|k*Hn~B)*3K zK7nCpjZFDWe*iK!Q%adFBFZ#t73@R=ixkgsk|!7F;aeKERKk<$r$oNer&-=7A9Rpt zw^_j^I4XlaBt4TK!IJ*7@X!+;=V_F}mF|$cBvhB&x;>#9>1#6h$(FWJg8t|4ptrYM zgN6^UemJyxR)54q7dXzn?1MfF;}I-#0ei83?%;k0Mr8j|qw?ok&BPmR?>wCCNG-3v zn>2*qdPOdO`_RV;*#(7E4@2F4nj=2H8qHq_in34ItNKHP%*hWw4Umz$j`U(`*&P{= z_LZ7udYFwys}+BNB-gX!Bz39S#@X(uD<89epN%_O@Q_yAVV~Mi@qT$zv6*~p=2X1v z&gq`)g+-8~afm>4^!vV!QRa~N7n-pmXP)cjzO!D#r~_ks6B$=IJ*44|{jHhUhO1@4 zca^#xhEW4v;QeY$%DF|=4pm2^HjiAhrqr6O zx-SU$XtJ$VHqW;4-Hcwf)3VdMe~rfAL-~`RuC3}pZ#r~`u5#BKBErR|cr?qWV)@!_ zo6fo0%&kh@zl+=`JU|MkMcCZ$J7V7Io5EQYmR-*zyqH_ny96|#SM7J@kj^razUkgN z!wI*3F!)qH365`wiZh>Yy28_e0=8*AcLk?q%R;gG1 zCVU%I<7?xvI0cVIUr`%Yx&C~#r4C_okW_iQ_3DFPvS(WsUUJ*ya#+@Q9jEyiadzP- zhB6mzps6s4X-jPsx@U{|oa4m9qZfuuvmWbeSH<1=C+hK~M z*P@Ku0G=;KYILi=%63Qh$-#^T(0Xzv&$;&W!WD~%OKGTZsQ&}&i44Ea>5Eb^Y zMW+$l7l%1j#kbp*1^jmG4}4RX(sorw>jY4_dvb!WO(X~V{Q^cII=$2mqBYyIoX?1X zD7fuYyR@Y1J&m14u!BXd8CGjebZ3|CQpQgJ;HVYsR^G^7!l7A49IBvQvyZDkWE)DoCTZ5y&iA$y56?XT5g7DOt7B+RT0;G7D_E1*VH z9~ee=9P8KDzYaAh4prPtU2mz%3~Xea%Sj2s0w2x@`dQJ}kn=(S!ML;}blA3-ZtY65 zn!ZMY!1-O={6(b5v@Rlg@vg9Wt zb)>xf8PmF{`JAnT8uJaV6FF2*x{gr4kvZYFx_;u!=gpH%?RO2pGdWupj=S*oC-?0Y zhiT1qYi?F&)phF10c}jYK4g0*c|@Mpf2tuwqoVtqiv?&Vz>s&$<2P0PhT{OCp6eB@ zgJ*+l=ppF9=r`oRdNvok&(=E9ZUD#r&MvvEMpkxb*44yae>|C>EbsRsoXnKCk#BDPV$|4F2XGTMdQS2TVjug4RdXHJe=Lj13-7X{48uA6%1VKx=PhdxrNb zPJg@04DXSM)WQuzrR3pC2?`~jyYq&>g2=1Grah-JjeT-eM?S3Qb{yhSGsl013+^^>x+BaC5#kZj1ac~rP{xXKIv zdDr~=3I&0xh}}elHe9`G1of&6M6xS`eLtGs=d71g_j7ftTiqn*C&~8g&5pJ=tCv+J z$XJDn!gm3;1&*G%=P$wDnP81QO-eqWH-hC6=_SJ99zLGdmNEtsXM@tZ?!FRxs{S`i zkUa}v+^^WxPh+eC@uM_UF^~`X0aE2F_!$SC@+jb)$j)H)PL} z^v;4tMh3J{fbg4{hW!>ukzX` z3xq!oysvxj2Dv|27Hsb=T7zrKPbxBzf6;6?&fg=c;%qOD>MD6PQaP9`@wMoxfXMn@ zpoxe4T@fiH{eZ7^`^^j4Itl>m!-bVV^opz2Z>v?;p_+-02xMPx(|uiGSk1lx z({2XkbJ=4VR-QFP-oR6z38_x5$Iwbk{EdVsXtgzcBPWr4`pF#7<66`~Uotu$q8U3j z-tltP%L-vyk2Nt*+})~4?KW5z=L<5?AvQNq=nl!6m;QoUv9nB6x=kdg{1JVdlRkT(v`BiE2-<5N8~TX z^XtvG7G-7-IqJx&(lUcfzT#g2Mg~t>;kO;OLg@Pm2I?-@ zbOt-hlIg}T^G);Y+LHA}h8bAe$N7Vd@rQ`so(knQVv~YuD5-v2Ba>KLu)Re)z*L*W zae&Y)ZzYX|oHQG{7jwRbE4;u}s-a4f#D3ug;@ZyBCL>~JGnJ!+;Wk#OuA~ZiwWxkn zwxic+bL#5w2VBOYYt71#$DomtwTFyqFd3GuVe2NWm)_iG>#IYSK!(QbAUB zIGDuVK`$5fHMXXs-Zr;oewS&Gtk2&0)H`{>oybw=o3<33tTgsv{9XjsHt6<#^W^Q_ zzz@eNmfU@Pag{>YkqjmqkjqFF2*`JgWPrn+o*-S%tRfLKQz=a0i z%l{TtR)2H$3t&fL6g@@CXWQRb>hWcP%rF(K+Uup1l&?Xd~Q5TaibUl6<51?$p z-l6QAVuC(V729;=*m%1ZKS>%4a0^`Z^guqY|Lq8YJ4$&2ezuFmO9xFRmKvJ<%`NOu zXclEs4#aA<9fr+M*4b5=#Zay>YxKrFCeQg-zT?!#;64Sb57~MDq&-5UBuOHky`Pz| zs>tb*K4~=@H5lD-BCSOPU#n&JPptO&(7rl1dw(QT-DNBYoigH zYM;3~Or&DUWk-H|{~hXMDcJfIM$b9_#$5|hp$TER;Bw~!XS@JQxgUB$lxdk)B+*4E z^nOf-{_-aAmf`opLcwqv%(y`uO*!AA?*pa5|B&>*=+Hw(Tw>`BH*}bMRh(RLrD&`d z`}4M5XjXvL*V%tC&7zCBXZ<-<;p%WCkz1k|jt-~# zz*|B(Z75o*&<0ODD0zPIhW}5~5P`1I87JZNG~6|T?$se~4J;f5)L|`X@|NsVYwHOy zWnSJA44&-femjYsX1=y4D6@M`ar-QQJq+1(>ZkDaQQ%_QceE%S#55O>7D@Zg@*_wx z9Xm?{;0m$21RUsQ6b`R4lP*S+E+Dth{417tpPcHALtTpMXQf)A^XX=3CfIsIWg1ZP z)tOl2VmCq0rj6RT-LXs9BiYEvGlGv=!F722_eg8D9dF@o?I^x`gm2x)n+t6Q5r95s z5g_YpJt{nREq~sd^53)iL}#1udV4Cv3#Me}T7wvHlaXHC*b#R#5$&b#R+e?nNltqM zI*Z=qaDH3)n^|UxJ3wR#q*FH?@J`Jw zh$^Sp4?w@ZZ}9!A7WOK@*QLcu`znnY5_U+7Yl#OWW9UHy4}mj})c~xqT_5h!sjnhEZ4R|3~3!A7^SndksR3-0 zUogK<5w!ntG)K1-W+`ezcD{!>gI#Hpk~S4#DPT#k@lnw6csTi3PN%$d*OKJ> zkD!x%$+9)%34jTk@ z6v5Gp_BANCd5$uvef(m@p=70xIKfzhzuuM$C#+Myz%e3tA!5pW`Zu`zA2}v7XIiDC zEFfx}Z@`Wm{;-Kl?Iok?u-1O!mt5t83$F440<_AMGl-f0>jJiv-S(g94O|Gr*@pyI z$?irZ-BpILmwf?7m5!xK`4j4ebeL1Z5tMn@CHuI98r4a?!?B!g|)ox$g`4T^0dH>2L1* z7QgLcXBqX~5wC15o8)7HM19-iI<__*3OaKBcV}^)a&%*8+}iZZQp93vM4R=z-5B3e zReE2Naa!2OdC4*Q6npQQnL%{;Ru!|>-u*rGi+ZMW*CMf%N1@CM z|EK@9%LCofbh6XhvPej(4Q$6h?z36 zu)Wl09W|(J-N$rTb7bt{I9)&?eBUVP5foEP!I`6VT>os+q2DEIQiqz|SH-sLahg(d zn%(*Lv-0m_{{L=$B12=mkvdx`y9F4^YKM`FO6{%Xg-;i8+FR0jEK!Q55@!{;QMI=# hOqwv#%(_O2u_jH;Xu}QKe_OZzGY9{_V)4tF{{k^WwA=sy literal 16958 zcmc(`1yq~Qw=Nt?Tcm;(cL-LbKyhoKNPz&-4{=eT>4|0uY44<6#+-^af9w;e_Zz`FMU>jCzI zhmQ&HAK_u$Rj~p0A3P+&!6hbPcIkSMUh^VI9myC)^3Mv*c z8Cl);j_&aZ)#y=5prDpsAiS(?gk8tUFDNrByZqO%kg2&#z}Fb$(8AqR)ORXiJ@}t$ z{M82Q-rY<%*msRmM0cx*eeeFghY#>^{{5aiMeY+lV0=i-_gce*gw*j%Mi~>oK=cnB zGEFTfzn=^H2hW&+f->(jhi<0;kFoEblL(s#APs2wEkk&ZFaQw12w=p0g{v?C$?qOw z(G?UI;AP_)6Q1>Mown)%m@7neG5Ap20yqSd#ExSu%q);7^ASa*La_uw#bx=|On~t! zG=ysKnz+$HcX=k4&q{sG#vWW0B%~KO<@`fzxbt9A7e(??r+Q^&?)f9ICSUMp zglWE-l;aH30}qM*yq)O1s=^hUmYle({aEE33WTdoNA&B|HBnJDxTyPeJb zC|nRjlp^!KJlRDU%y0xr7aglKv+wnKm7@ZPE5i*AV5Ap>R0zTxoi!$#>Sl(HkRj?#Yt3fa2k2tRL#!S6$sUax15P{C=L0lv~>qd_r2pLZ~L| z$I}0!zC>d@Jm~oSc_Hm))7tx?=M|kmeIM(zU%So{1Bi+-rqiUIwd{)(FC_zb(?oKr zg$q{&7YuDnE=-6lz<13?#b{=YkJ7G{yYJ}RqOY`}w}6-6R>H4U@^PV|m2^36%WY>a z3DvMIC6zvrVJuEBHazt;8Uh8kkd#R!=u|^doW&NkC#>&d&qkOpGukuY;ym&mZ zfy@Y*j7KgTz)$AuryYo+=B1}DjoK9yg?-pUB=rkzS%ucOYv2>GL1k_hbq%K{J8Z`E zHeOIWw)tGMYsMiCXR#%+vNpylfykq=w{mhd5e??$9Zo*6xSiH?$dRgxy~H{}o*Iot zo7hKM!Fvt`4WQ*^CZq4}l&@Cr8MJm9ri)yWNo9{7ORd{Cp#+nQ;-Mz3^PXuJ{#y5G z7FL62JlMt(ut1c{1R{;}yN*_tgEce0gUy5cKI8MXPwd?J0a>zw@p%tPaYxAFvV!8QVRHwL_`SjT#Id!WPqBck}jVIsMK|LRk!W~CV z&F5?8N{r8+nXr3v!6WVMYWrurV?5CYDe>?eqsr%;4a&7<6#81qy&Ba$&Ppdkx2vrJ-0e-w~pTQ^qC>I|C)Fe0<0{3Ii4XPw1{gXW?BGKB#bFd>CCT_4546NvljpX#fcpM?y4eY&rxDeqoskvrBs?W*Onpq`kt z#>e+!5#f4-Sh4Phc%za|(#pidDTHXt+ybK;c|&(G(e=pOXF}^P-QFsd(hOhypY%#> zPKYYy&m@{Ke~Tdrd}kK(!nr9dn=l~b{10WFM~g%Gr?6ICcA2Y?d1>a3@YVx zP^ilM`810p^=#E1m2rC zAfE@?GFg`qf6XGKJJ>N4orV0|^Rx>+ZQ-f$%7j<=B@Tsz*nx0&FdNJATBlB91-dx) zSOOiV^DM@Ia9T~E1*tiksz-1T=aOL`Xw+Gx~ZAX8=YuGe3Fxq(n?Rimf5`18i{Es|B0u6rT38ya9q6V zmpxN)b*V6Rj23q}nbZT)fp=Goc$d+n2XrYi$T){}F3I#NsiY$eK8dwqSk*TfqJf?v zTp552;b+1ChWm`TSpQHV(kGMe7CIeGmiz$H-E@DzM_Qya5<$G7^@P95kyosFUze!L z|K#Noz;m&05o_DqH~}@xd-140$odeP;@#K8UaGmN@3T|Th)$H$%$bq-LP-Jjp}D11)xhR63h$F{*Dg7FQ|R2& ze2AJn4jh22YCY!+1U@i(Mht2N06PO`lh%PGa}fVZRQCsJOzV(?@KkVjYGDe{Q;Vjb#Hh zj}SsV#f6NF;2*8sUnLZ@hfP$WGTO#Wi-%V=1FfA9hv98QCvmxBNvPq@ysOx-94$O< z>6_spkys#Gv{g4kif(|1Z1r5Eb(JaMMDyBRze;nX0RwkaHWJL6s^IT`EXvh$^i&M3 zv@CHflnpd&VoAIOI5arrW$S|1g^TEXdP}Oy=ROn)0mlyTIcCj0xSRbvxslv#%;_T6 zm8Sy*TeSU{r`=ftv(HdQkI%qLpM36B_!&D(2oa0Mpdit|Pb4x2P` z=#x=cB(fq?{Utz6e+u0SNCmZxmTdj(DeN0dh4+M4m#HQy5p%t}moxcD9fuM+QXlyv{fOojWOU*KVbQUr)V@j&e_Rdqpi*NIu&!dxDKr&1t z>vWIV7g8xpm-i_07VwN!jLk$&bknD==8Q4{O7K=qWD<%m8@!(nbr13kU(Pl2{6UvH z2h=u05jZfbYh z+!6M-(i!*P!x^|v&NMjvF5NoqtkJ2;{Icv&vFa9Z%KS7Jox^#m0;}_|#JG0h3TxmZ0? zc|n_&sGAoD_V45+=?ScBN&Eh;T^zQXG+G6{L{39kDUu3xQniS~#r9!5wbam`!jTNx zb@h0yU6c%F9jr$g{TuQ9EBIR|)v5R~xPi7<@wjUu8(;;?5CQuAbDC483C!nEv>`NJ zXb#4)4U|L`>UnX2y@_^qUvI92G%z4xp>!e@Y!3-d4kOkr^X z0*BKK>)y0&vz5=}+UbAPjiOyp=a!m3=uCXPy~HE@$G2(s7I1TsS)IIb@}pRoliiK> zsoQ>$$buQ4n(8Hg55>So-%ZU8%2gC3?JJf-bggRtb?DSYh3pefHwzu4yCKOvl%rZt zmTQ6qm^h%k|CR28Y#_VpnLr@deBrmMMHQLZ_!#thV^cx|apzmfXl-0jPipEWVSw}S z@&D0E{2;h8U3Kl~BuJsk+kZQfj8(IRUnXnO02c9Q4VrtWsn+{GfWsX{P3P84g-J!psB>BhXgT+g|2nbC6_Pfg&q(=CdemH*=zkQa>S0R;U~OjcZQIA8b#q4T=NJ&`ZU z!i0yxR12ov#j2icey*{0I$`8u|B@zZ-d0Q0(y6l!WKP=%pPe(V41({l%t>=4sO|x? zbGt@Xw^gXBs8pL+@?abKut`@!2zm$DMl9;@ha1Qme&-x1SB4edIY%H4SWwKJbJW!e zP(b4jKPtQ1-_{xow@6p}FWEQUzH1?YmYZbUDD7Hv^Bl0hz|(F}!;7Ht`qvoE6u`W{ zpX0M10@F!_F_1F;69VNZ-2T150s7P5sn@7<8(k}h#s1~lZXT%-7MgF4Jp-Y9-nGf!bdd{RLR{FE ztXqzqO32cy)XZhYm2CozkI8!~<+KM|4N(DjQIoJZ!Kh|_QNquT5!oGH0aYRzg~dF^ z)5Sr&VJ=fbHN~@IA`v7V2ItFu)c3uUr_2w2Uxk)ApM=oF|Kh-`Ew5N6&f+ihzD&@F z9$a`8)+REj+Ii|C3*AX++kA8)VAt>dgOxq+opKu0AhB+z@%quxZ_iAt4%u(6_`(U` zBDzE+UmL-ELdOV7QgQX_q1p!N%KXlx(w$3V*mOv9zCk#I@`F-$1t$Gd-jnidbMrP9 zXLSnANP%y`yKW0M23)}Q>8W>783-!dv&&_-r*nCZ0y$L5v4cht=`ra7&kXY2Q#Nwl zE#R7QPAgPKC!=6jKJuE{4a4W(Cyl3^$G^TTKkG5Dn;#M^z_dWSWU+;26C2X~(j}y) zmgw15NUXOTrbUd}oO6p~ZguIvi}~JYep2M_QJGRjiRl5+hRI1tL$b3GR^NjnHT6wbxpij>T`oS z3sz+A={3K(J!8`3#@Bl!ZR`(T=cFt)ufF)`wENEgo4+g1be{8wc~p2zl<=j;1_lyxGvM80nTaC-4VTA2?lTf{{dX zPbh)PQ53MCsHylH2jLN(9-A2LywSywSjWqjZdH=$*0u*bK1N6CxcFq|KL>e?)^2X_ znqN5m(A}}JQw6gno%vZO|0hrMeW@ zPF8Stc?=?9M^)CE*;8<9kLQp&t)nod6%%~$H>}~p2alsfJ0Z|trfib0mhmW=fUc`D3Wn(9R-Khc7{Xy!R{lTRWe!DJMhSJh69KXHw53q^C{6 zUfslF58EBo~Ra2(Ct0`?pUT${I@eB1*_U#W2^oRoL;pQ(;PYun>3!Dx%ElCBnY zDMnF@`Lub==W-q53PkN^0BFO-YVl3@LP@Gw07cns~c3mKFXTXrDY^%)2j|Nw#Eg5XIQ`xojVI z7g(8gd|oFxjkKj~_kmOxd0!kUJ+d2NH|GR@Wx{3f6D53KhcO!dm3OERSRD9k{2-27 zXRAK0ys57xdOg&%spfdizDP)zCtXKZBuR7HRm^M&KQ3Q`4l3*~pt*IFq9YLKEYk|a zhkjb$a$G}|Pg{95_j-R9^MFJl66L7=Q_a-;SGXiEtj6lbUQSs#-KoC6r4IU zp#+4zb$4tm;JAyp{skAsZKpzs@=YdlX*&&bo2pwFcWJx1+1c6C$DYy=WVGkI(@i(o zyG`THr=yg>ZZ@v!@7ExVS8=>yOZDEKgC?7#KV9Tf5XFyv?*8t+G!~XrK_gnU zO*QJp=3G+#j83~0QauG4sa?Osa!3Jq48T#2QQHun{8|CU>KK61Nc*+jxdRfMP58oy2%u6uC=wxzLbQ#Ts=f%gv)H7!&CCAAu((_Q;(5+ z6q1s9Yw7(>)8aX#O}oH*HzJow9I`iPiu%=Qx15Qw2Q<_C zv*7j9LmzTOVYocO8 z0=UeE6`YLHp@EvwC0IDAlxJ*k5LYM*K|JCa-yHGv7AI@e?re0iG@7R-S|JmDy2o?v zLB!JD?J=5g-Y0ym$l%}4`qqxck8THN1eG!~3*N}+o3ZrznSF8jL1Dg4wl_VXqs5gD zeCT)}wi~E5_Oc#ad>%ocym2V`!nUgb$0|Ir^7O*7c-x`CIK@ayB_@L0E6(mP$~iiM z6-Oe>H9Y5_aU{`s(I9K8Hw7j{Wyb}M^V?Vgt@di@yv$%UQpYbrQn0EyZcK=H0<+mKUG%_$B3NB z6}UKj80VZqf+&8jC9eu3PRikFi^ zymDYD$NKsc(7r_t3G6r<IWKFvpEM)dPt}ZB_H1GRj3V&>& zNCI-U+atU)YO2n1Xx&qe_!hvlCRwp>K1y0;M>2F08+ns;H9j+-*)NokqDdB4^yoeZ ziy6^AMTBHQh-QOyiOL~q=`{;`0O>tBs4_8D7q+Bm`T`%?O=XHMr3&8Xrjs?CXox79 z16z1I*=T6Ro&Co6Xq$bBFF!PdDPZ^8c5?67zIB?Qy7_SbvmsJ6p!zkZijFd|_TV7~ z;JWO2QGvcFT!we$@2jSiC+k9pqD68n1*DE&_C>{3qe6sj%V-TmfubN)lm#?3fi zGj9z)w|Hr_$4Cpdz*)+ow66n11o<5F$T6s5Wb@t$1KRM ze5FNRO)Z1dr8z;jF3Zse1wOreX>9teC!KcM&cmJ&SMHzyS7CliLb4LYTkn^hZ8^Xl z2H^K*;unpLjVD$W^Vz>U4#f&;+Iof$1lGXHn+{GS2(v%@drTlU?fa*)$a0=!jD6vf zHmAF@30FMQ8`E)En2i-rYj?(<^0mI>llW$pEysOQ+?MkXSWS?gwz!} zd-iI{En4{RkZp+(&!$4(q|`MCxP|2Wez81qBCBk#53?|!H0bAv=a0)K&}aE99Ykr$ zMmU=K^|-)rk0Uf_qiP&d&}UEn_8F+-UJW4}y(+Y+`67pElu3fCC>Z)}T>`0t8`eIR2Uo7Sl z9-n6GyVC7A=mI%ejg2+ektz~P2sTnpY~@-{dWBJd>QnSURY9fjfu+-@Q2{zv3)ay) zbP*qW#kXEid9-7_^W;i@CS6du6VZ2Yx4qxc-2z(I=VH%I(KmYs#L{Kg`a8OV#U3{o zI?{hPb8b4Vt(T&YLbSOcEJ(IVnVR95UmUKCddv*$LJ2>Z(CD(i_ zHr`Z_b1L4GUGjolqlRw~kO|kzOS;kpIyI>vvd$}`?{`4rE^?W}#vA*?YM6U=XrxXR ziO!~R8q7o5B*10C>Pui6;wXNm!-y=ZSaqem!c7`R=Ejh&Op~BV!A6%ya$EVc82pVgAmYaEDf|udq2bgjb}cIQb)Y} zCF?PnfcKN?)pg8RCUKN#JUdoz=d?zFI3!W4ggp-|8eB2qI=P}b<*T1NHE`$u#tf(2 z`vhUP?{g4Jsm|}xeKHm#e~ifbF5WI>8d*7|)d(*spf$E>2OtvC4ECgDpi{ z4+Eds5$a8U`53KYrQccwM^3}N9OF7$f!rCbad)GQd=Sg+cw|PKXyavVCut3f$1mb_ zXfPsi)*98#%gVoRrbq#UYsf(ip|#FXJVv)jYtvn>$Js~_ zU!t-tJG9EPvF#wv?&KvZ=JVnRNplV*8@99(QD466(_4TDif@CWY%8`azR8Sx@@&I% z$8N;hwnt<+J8KMkc&AT-7)-6z%vnqYDZE!SYVVJrdHoYc)MWlvE4TlOIgYz6St&_cdtlgf|G%QhU8hnj4sw@eGt=xfnS3EyfZqR|V zx`Dy;^vL-N-60w#aT71`HPsjoyNw!~vNfKzlsoX$eXjc_IK>H`9V5_ieH@2FkM)Cj zzn#a;c8BeP#BCp)^5ZO^iOlKawBShsWJ*r#yZSJ^(2P`&KM54*@Dv2sC!F0HzFZZ zGNB&3qG^EHpvt9rDxp~G-u+b7?}4M1EBJi%IXM<1TYb4ismq1LAU2j&@fjcMB(OzP z7mkOO=8uzir2e;nZ}Pu0p4BUmr}n{$^}DK8CvSp$5+OQO9@AZvt!gP@P8|wb0}=zJ zrk4S}3?*UTHPh%GK0V|2ST>~!>?i7n8xwxY{`SSd4VDN^8wc$9Fz<$>;1$^d= zFtenL9BL9s`RIMqO28lt{o!>Wj|nbE>NE4lCBt%UBb*f`pVG_<XSuRxOjuy_;tlayxYt&gyElO>US~#6v3FTg znBYH({WmGI>?E`3Go>wxWYI0e`ws5aePGPN)4f^o$WQTZZ^M7iDv&q_H#Ib-Zkv9z z8wY%JUh94dm0}}t+fJL-x6<^E1MWq(Q zZ0ej;C8|x-q#ntdu*1`k4e*1N@?u6;t%2pIWWw$b-Rr~N4SbW+s78|aQS5#kAKNR? za>*aH=gnuPx2CrY*t4omFc3Np+<9&)ZLjl0w@F%7+lT~Ex&>^eNJ`+4R_;GNIChNi zAdL1=_U;W{oxCQ5@a701*Vdi(xQC-7_iOfANDUf4^;c) z>UO+(1cYnY6c`)G4h`lmHWF#FADZr(4~Pt``(;E>!;F2t@*K@_-cjlv`J5ee&M6$e zFHnZ0Xv@Ckh}ATekVkIgP&gV!yr|M9!;zqWvwTm~lBq*5%chTKvbuhgx90|3WkDNn z*Rf*#j5Q_Mm7x|K)&DVsRx}_jYk{agkGAwuKxa*hr@wUSx8tiQ3z6aVmCG|~utE>1 zCz5_hZeWcJd9mu)M0n^{DXzT5AOAe>(qEg^oJRR4kjIi}0p!X9H05{t0iSc|Q(WkC z9QIhIY1_#jTv?CH6Qz{bkBx~ke=NYwIbj|Y^*JgagX35;D(apBgXp`?U+=6{8uCw< zTvMPea&<5Qc4XZq8%4O5@h zHm7#QkQ*{9!UF55Rbz7UZN3HgC;TGgEAeuNk@afrfab)$*iKjBs3(ZW^-c%`%Y=N$ z;`xmF%&<%xMnm^rDmA^jeb_F?g7v|dT(Z$o36geCDAZN*pwes}{_HF9mx24)Pn*j@ znMewiRU2Sm4$9SroZ6!nH4nkDBpYdvIJMeJU2__DeR$GhFPiLFy&P5)kgP;nec9?{ z6=h9=?-jDd-%|cc(KKU@MGxL1SzXUj)lsMJvO1))wCmSQPkd*-;7J#68Y&*mzJ2z_ zBb=8eLRE^UGtEeEEkA+RSX)2q7GPT&d+kqe=L`1jzXb>k$bIk&SqYh_uC2{8&MJWF z$8JupFE}tF89AYvsHdA)BAg;@*b5@}Z?K=iilkHmX1{L19zt7o@n%OeN7#YKoG^u79-!}s=YxB)vja=>=`Fjz%r8s4g$L4qo3LM)ng zufo4fzNpmrKkQHA^#95J^z|u@q&S1P&hxLwjgST|qO_yZ(i(_2*$svr>(4c?S?00Q z%$9IOB3`3tb1x;W`^H9}1{Uai>eD#GRxZ67irag{hV>+GKA`B$Ar?z)bVMe5coloI zRj2c8bB#AN1*ucu=&dowbkERO!(u?_dj1&k)1hBbRIR(ALH;%M2K03&x-Klc?J`85 zxdER$WcE8`b+qbftP1^pM8%Pe{fbVSj7=S#_6r6P%IvX6>@4KBwZ-(-L;!?~P+pWH*o)fmf*p>se^{ zP;wgZD^Y!zR919T`kO;gs8-WS+5lQ~)!bgGe5z*Ef_kxX6r9tRiII0~jH~^w_?ww| z{?7^I*BkI&eK}pyAsqC`z>Cnw^--GdjjC^20K0IE& z?8WyWmYHP!$UgR)_UuMNL)|@%*x!dMv>kuBS1-n!-e>$J0|@ChOQHNoBZv_{KV+&B zJO3pDoXVjMibfIENY!0iU`%C6L+z|~+-Lr*h=8l;sQ+fPAf$n0V#)+pjs^FQ_bX^K zhY=1Ho^L*x58uo4^w9B^^5)wP&-rJ0aHOV2RJp|4pN0n|-i{G_8S5q@$D*zS)dGAa z237hOz$!jL$GV>eYMuspI)v`8?i`BX(+&j;ek+iUkfe`;O0x>*Bu4&~p#iKg6q zY$GVyP+1%;j9KNWWZbJGJxBVy7$O2hPW`quVw!sD|E@uMd;_&r1>@9Y4QiSF#+`3g zd9T)o$vJ{eWdY$zG;KT)Gp?Z2^Y$*5@CbdW$wW6+A8b2TjjnVEvd;DN2Rdrz^C|}! z_Slx1{|TAF%!w=%M5(HZVt2C?DOAb6ULmjFIjQ&b{bJ2_7g+?%p1xI4l09Ah4m*w? z@Eo@@C~q$r@2%=`hS=;W_GzuHYi@A2NL=>s774Q9fpnSD3?m*^O_xo{8csOKvBR%p zU$B&fUOQxj1TE_1D`zp%=tezNcm{UFea-OYxZPDTvc$4THDim-syTWFK67F10!@pX zgnJJ&!Z<< zlRZ=K@K_vZ^8`{S zWRW#X-kT$q#0@W&b+R(+(K*2nR+xM1`8wOi&p?w?teV$+Z*r?;zTkKpgkofzkh{Pc=q`~17dF`iDrb`yN3 zAeHgWkXXcbtfzBAW;b~37b>LdT*?}6cI zC2O#sBEHVK{wyb_gibgVQNuZmKHjKH!aElxK5p!7$cL?x#omRuK@T`_5*e1|etRf9 zW;DRD3Ps}bWaf5jmP;)At717oCjCza?gw614ii=yN6hFj^rd? z9*JJZe6;#;Vjt;7Q)I%sqF^*xH{upjq*N z+6lH(+*cQi3@*a({BU|7XJo9N+EtmzMRi2L&z3(!{>q5tkg5 zOMBXHQ=5qV%R+b3HV8V3Z>+9Bw*XG@?HqJuleUlBF_xajv`}dI34DDh6kEL{~Io z(9Pq-p+U4&om-^JES}eI=`~nakOQbttd=s-)WS-zjni<4SJ$NMb6Uy7??_R<{+nzv zd6~092zwkHlhb|HIkGPk{ZlJZl@#<-)$_|?ht%(Sn}4IQ`922|BQ=Dy1qh5?J zH%knhJly3og_hDwCBe{t1H<#o`Wdw6O9lNzSgGtl@;g3Y#(gIZjq&* zlp(2))KYHy)tCQ4SSZ+BM8@x)@D~q*W{ZapU#}&JYj5ig*N3L`>z)8;*5Z!SFAHIw zTV*;~#@;z`*K#P0sO#?-w{UeQ_m-aT8Fgl0Rohn`D5dBAO(1qwMMh4$~yF zJd9d$=OC-v6|ZYN4`RpB?EeVi_}tqNypppS5~3OPX{8`jf$L4^w3_;{@T={tPg`8! zh#ZPnF>#)GAPXNi+whefsL=y_M@yiBt3+%(`)*j`64i6D(26Sj;lwD;q=f1_B12T3 zSU?(0!I7YnNrwSv2Yy_VWdznrtuvugcW?{aT6G0_%fvwp=2GxRo6_c+JMnSva*rxI z+jk&;(c_DKDO_ybsio?}>H3`2jby=$dYCoZNgZQdXQ$W?F{E6sd_kyZbxGbq|AWv= z&sF|(+$P*Tbx*IvFdjc86#fhv8~RZ!#}AUDUghy!i1zgY3Ja_45KBgoqB5PmK$hJ= z&?=`_N3e#qEu3j4rntK@=nGammJ*K$XcbZw&;14wllcz6IutQdGFH~}Nn7P6x{S1w zTr}@(ktzI7e#$lTdq9pz-2l*k%b<{+3hm2urA1@77W3nzXpA5n))MUl_)jM1Uyb;; z9|iPA&l8sPOL}-%ZUOH)r{4~zAGP!z4dT2#OqUu6RoJ_ywni1FORBf`FUJ1+BgA2N zbE`MWpV7#agum*nP-@iVqxRR_?Cf0pxYg8vJH^kVEE?G!=od%}R%4|(>= z*6aNhw8dH!kmDSiItTDvurPm@2(x(TeM@|1l#CC>5=m;j0WZV?;bUsCbKiRn0;!=v zUx4GvJ!6!cK@n%T*q?o!+|45oVUxFj^Tur7hF_Pl4P3slssp!xz7^){S@A1|C%g)$ z4(O(|ybjgY(!vHhjaPo{EpOmCLa!O3>${0XqX_1SROlew6@t&Jy@U0ke9Y43f-J+O z9<{y4i(>*|P6RcBYw0gUEe;nY-NM|QrX;hH)qt;RE!o)PJ*j(=GRMrRm5LQbDg%l* z?ew0$Y#MQ3=3uEtaEN@C=y)@-^JPaa!!1^6!@k?V>d{IE&2)1UaVv#hr=0d@Ywe~uH5se) z11&auNU82Cmw$~h@KzN`?HFy2l*EI^)|UwC0~A&ABoe7AR}KUuvl5z~8h;g8a3n3r zP^(@Mq4WBdXkMd~M|02|kPE=l?1#A7g0ejqX3fS{q!La{?Ex|nrU5>Q{ zTiL;F=lA!bq(GI^4uj^}Jku zQ+rgHn?JAz!~;N_5&h^m;ORp$+$4xn&<(Kr&Mr@Vd0%9jWY{yoaC*`6&ljMt(pcOVr zhOsZd>KnFd@d$q|U%*BW$PSCu*pQnxnO1()DN2E-eA2SB$R+hxHXwPq(wnzvY>+aK zgtZ=(g?WA_kUDTq&GjwX9-Ip)qEF6xb^ZJS`m)sEFP+oZh{VhKrnf$A=o&%xG*HPX z=4IWMkY+g7ihdWczIP}(Zg-Qhv{bA4)50A|VGZEX7CL?S?xxkNVeiIyb<_3({cx#~ zbi;#|tAMkUp?8vT(^vzi&bCMT<($GSse{*=i$1kUc`!L8#>zTw&Vk2Bum%gIlXLnc zfgd1NJ%Hhk7kPK0a0eT=!i1X$Wbp@3J;joDGzm%c$BH|gXN-rrNI=EiEjwE3_iy7H z-UaSIyv?=0yatb76kdF)Uz(=4WWEc1h%OnQ%%{%Xg+5dzpLz>yha|}Se{I(PQzrbs zWMco96$+cV_AB7s>B~5UgC||kvvjotLoZW$Gq0QjO9`9VMv{iREr_EtV<5--E=qLu z_NT%ATW`mpv%7H39k_PwtmZpasCOW9?r7TjA>N{Se2DO*xv-pk#uIQy{FEUA{Z%L& zdUmF=*!PFG=_9k(rg55fx>~xj7c=ai+rwMNBnT5Edo{`z`ot*@ZbXt1}pSGJ19B8!WQtgNg&TwGkFSS*sy z=l>!4{^8zUDTPuBDJ4=$n$0HL+uH;|P_%Nn9Ajf+^tf8BqLgBMeEeTs_E<_uyWQsO z?2Jc`9#OB?aU4e&mSs^W6zK8T*cjzmB5aJ39!{|c@(RUk$A&(zFCJaMHM@P|G z3&S)`T-T+?Q&UrvN+s6T)~MBLeRo2LD~_d~MU1OuOC2wrzah$93KQTUc6a zMlxppi;vQLweSHc$3z1t&Bh-QE0t4*hK5*OU8URYk|YU22y(d`Gcz+xOiZx9zfYl1 zAeBlXr9^9urIh044KuiR%fUh;5`_?;mFCuCi0`Wu8U<^n5Ib_#{jsli|2Vb zjzghPKx@tJ?k>~Q(*RgfN{&MH%k#eyGLB^Jd56Fe+#R=R#)ACEpOa3fiQ|}bI*n2a ztu=;W^y_U|7TIi;R;$I<))sHxyuqqgs~mO%@23}m8n8oS?{$|U-(bXt-_LJw9EFJ0 zRb1CaDMgYbBuUb5yE@&X-25%qd~Uwrf3j~7jlXd36o+_~u^k`B)fTR6cW zY1aib-+uk&yV3g(VKka8no*mMlwhSGm0|YICnRPXg&=CRX*65^M-zaz1~tv5y!k_h P00000NkvXXu0mjf;yKpm literal 0 HcmV?d00001 diff --git a/images/mail_alias.png b/images/mail_alias.png new file mode 100644 index 0000000000000000000000000000000000000000..4edbee4527385866b777d4b26bb1e10f196fa090 GIT binary patch literal 938 zcmV;b16BNqP)^c8&?#?e{bg5^^6Td9uW4(bYY|#x23B#i)KSqbycaWO4(GEsOl=IRH+Np z@(I#!fW(qr$p`47K`n}8L2H5pPGX_{F)=ha;1HNGW6XHwb&-w*RCJLmU7hz9@4R!* zyZ4ESi3y6uBDGrWhhnjK)3PiyO+zU~6zA8MLn(D3+wC@6TU)=%LZLvZRAPR9{${CE zqEIMc+xCA*&mWHVVHgsIA-?b9`#vWpC#|En@W z-}gB^J>}@=h_$sfT-PNYj|)voNiLTo!fZCn^71mS>mr1>kea6TQwY&l>o^YU>+3j< zLnf0!DJ3*r*D(x(2=npkv#e}`tXiRXEEo=3ag#&MiJ>Gt+EBO@aihCwo! z#57HGT}KDJ+h5)OPH1rN=X)&uvV?BvTzmf-1EVP(Jo=6DQkl2jd>bJIolXbWb*WaX zv|243$6JY@I9E2#V-r^Cw13I_)V2ta*u>thaD&n}SJ`B4yxy?TS+%Ppp-r;$<; z1OY)1^v65uZ(Y~XG>y&8P0HnRO8{R-WT{l@RxB2i?RMM#=*t_a!@VYt%8h5Q>E;#? zUjCTQ56{0BD9`h7UAKN!^>;t~^c@w8>pubmS9)^mS#w!on$PCbV|FS$#=GvOEa4?2#5M4 zCL|;@8tynZ=lA&o2M+u=d!%E5+KMPPAULMp<;CN4h>54iVEszV>c92klE;8b4*XD4 zWn8YPR4n#KJZfK8BM>}{O_5M$W@bJ-dkRa)dPmVe;xjilM93dxbd#8vEphFD+Hr$9 z8`ZYdh%z6)n*BeO>$F5&&40&zjyymRGku)_5c~;Wxk@=hBCL7e%a;>!fbFVdQ&MBb@0H1D`bpQYW literal 0 HcmV?d00001 diff --git a/images/network.png b/images/network.png new file mode 100644 index 0000000000000000000000000000000000000000..008b03fb2953db89433c0835d7ae7d5eb1a1f67c GIT binary patch literal 1107 zcmV-Z1g!gsP)$S zK~xyios(TmTV))^pZ7g)d-~n-A+R+R!WiJjG>8LDVWVTTqSL6D$%REPoH4u5MH81L z3KiYdF`UsDP4of>8eK9+GLy*`-HNhJ5gE9y(Bb4m3basYOIuD4J;w{fj9wV@xqb3~ z^5psFNAN#%*!6lvXem@dDEa)@+wJoJ!2Op1*CCgFPyL>HyQA*pu3fttG+NE$yh6eK zGBh;J0KoN9ix~i0J0OIBQaba>8_h`ocb!$oS3Y!-pLov;b%YfYLilyR}N4?aI~*NMFcD&$$7Z zGopCE;|nrexA$8M3ek0`d%tgd>@Vc$HM+cLG-@Xxh^|CB`z{049R{wO~` z<3Zn?A1aZesCW~`Z%n^KnNeV~q1n9v5DBStKm2&+E=iUkW9d=~tE>NHEi6X#C%*m} zCvzDvG=qk`LTr&`jz>g$i!VW1Sq9MiZ_w&F9?6sfi710QCl@5k1Th$fQlfu>x*n;L z5^Uy7RHvID2?PeC37&8iVFnvnZ^%*Cn>kFwpZDJMmeLd;5e`&ZMN&**^qOb=jbe#J zrNg$Pw4(AJPzmsidU4L(gW9SZjE#<9-HqODe=q-Z_vxNgDpe%QGLm8v;AC(d2fyEc Z>JN%ZjYwq0u5|za002ovPDHLkV1g3I08{_~ literal 0 HcmV?d00001 diff --git a/images/paypal-donate.png b/images/paypal-donate.png new file mode 100644 index 0000000000000000000000000000000000000000..10d56284259d1fcf356dc542bfeec9dac40dd9dc GIT binary patch literal 730 zcmV<00ww*4P)>6E9vA~sC`008Ru{Qv*|onT$#0006tNkl!SVF!!F;MjhwHHd_2o3tnRhiC*X^48dSKA+Ej z-LJ`ur5*^+SIda4%FWfh9duW`PHJN#BIYWKhOWsOakDtejacHOvSo!6?-IRG&0Wln zTOcbQXpG52HkO6~8fF_cvrNTeDZ<3gq_9~3jEu;jakQu_pIKiWqZPBc$-zTbN!34q0wZuC3R$}cbEU8yfk`QTkPNwI6 zlKmhzj5zNT4Y8AyS)ylrt3v2%2&NV;n~du!SZ=1FRlV+l!LEw~?-RwP2*zbJ7+6ap zHc|s4xnY^CSzH_1ie*v#gy@t+TXas|r;x&EPV!2Ud5dLpi1S{Dv`IZ7dXOWiDvam( zOMR}jPnvKkD|g^)^aarYlw(B4^@Qjm+8)x)Yum<`+v6b7Wo_5~av$H@QKGfo`t^5% zoOgi^5%B``U7`mcebCJF|M=*8QIk*C>yPC$06P8W=bGLC;O$rR4x;M9>Wq;++W-In M07*qoM6N<$f_JoQM*si- literal 0 HcmV?d00001 diff --git a/images/question.png b/images/question.png deleted file mode 100644 index a0281f29c9f30b66f7712c6dec54d618511dcd05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1035 zcmV+m1oZofP)w1DHuf zK~#90T~tA6R96%|fBw%*GGU^|q@x{8NHtOu(M1b}XE-Hcuf(sWe zMkToGRuEeVEzwP+iVRH(VlmKSBm@^qY?DT38j_hzCNuNjyZ3aF`9BjMJl=zM?|J9k z%RLSn*7*1WMA+)O{4yGKPO9oD-1demHG(-# zWG^5WjM3q0ReMAP!B*96B+?|(0KNn8KvnMnm=E)V%j3t3`$^su(K8|vt<|bnSa^$k zejXx<*4AykE(gy$mn5rV3K8>9_6R?(u z#X2xE^Czm+b-1pJmX;VIksux**{8~5p6g;zMBJbestS^bMq9ADYEUW_F+KeUip6C( zj)P<}h0e~;Q7A|qOhM8mIp`T<2SfxL%n&?+B#iMfIXQ-jiC-XM(A(RO;o-|r^Z{surK1Z=38kbD{uk>{#9tE%-8(Qvq5z4{H-8W>Z<;^Hito1IUX zg)(PJK98vCoQT{Pk@Zhp0;$x2ux4Fd`w)-Eu<@xjbW_(!-X}5V0Knb5zwZKYhs0Tc zO@T~neY|`30?A|t`uo4a(vpv2u@X*+sv44`s(LMx8TuGn(8$Qdev&syo*@wpI_kO( znwy(oj77QZhuu?EUzHC@y^+ZbZCX&UZr{%CtvkptiJr~QDo8ZeXpZCqlJ_#1q0k(+ zIIW1z0~jGWPU=aLr&M{EWP)UgF^cdONE`KCSRK6_m1ODkBGErh`4&LLa7 zM|s>@yS#!{tF@qbwOZwD`;F84^&H?nssm66p`db>WokB?ves%m9&0ojX*e8eFc_%c z?<-AH)$4TuGQaisGrn=Y0l?$&W8oJ51hm_204kNrf<}d>?7hc(Usx=c%lX`U&%@CJ z03iebN~O{lpxf<|BnigMHBFL)EXx)$O2Qa}wU$n&13RP%G!BQHE)NWj~ zMXAsRDK6X6MK=|)h?}mYDcXe=L5kIwk{A^&n1PH*W+o=@&%LLM%nUJoNzH-7d+)w; zzwdtceD6L*a72M7U|0G1Prw0|*Qwuh3<1CO?B6Hbw>Jy$Bk%zb+bmFMo$;@K`2M^8 z_O|URo!(8dW=r?fy$5r^7%NI%IP8G2FEW`-|HB89a_g_#)YsM1*49cQ5kJ<^kv^78 zCaZ;7Yi4FFeu5L@>tSx-KIl zBk!F(dp7*&(W7^Qu&jWwpGHSVZ;27Ttue*Ie4g8P#z}X+LVbNbg+hTsp+K=%#Bm%B z9y~}Ym3n(KTl5gP^7)rv(cIj$w^S<8($Y#IkzjCekeZsU?AX!5p+ko_dh{q-Ym`#! z;Rh-JI0>BGxpNmMPJGDe)29iC!@SX(<>QY|U@6V;@HgDQf1kz0MT{|TM_+cr<1J|&;e)7aR^nKNf_T^A9lrssKx2-$3w zR4OIL7y-oheepa`+m|n2UKWvY-~sSEumwmwdGcgmXJ_ZPckkZC^E^tW5?x(gLX<5$8l(CYQk}x zN|T-P!k+8+hBk$j6LV>4iRI;GM1)u@MkEqhnQU2WE&3ljZAef#HH|TZLLq$Luaau5 z@qHhybwxqoffPibSosk}Dg+`@-4@q%tBNY`$`L8gdyXiGAOs|UOy$rEqF$YW~utOSM{ST-PNMiBv%y#~~C7k z2HpiaRw-4h5>}e3fvdo;z%#)AKLW~tq4KKiRds8x!ivRRz$@QB=cIoDmJ8@U{kAEW P00000NkvXXu0mjf?X@7& literal 0 HcmV?d00001 diff --git a/images/server-small.png b/images/server-small.png new file mode 100644 index 0000000000000000000000000000000000000000..3d1e0f6f2d001067cbcea1886ebdbc288166253b GIT binary patch literal 818 zcmV-21I_%2P)4Q_ zK~#90wU#|g96=bzf46TJJzv-h1Y;XWagBwQkeEmy`Vp-C0M<6aGTk*6rm^)igg`3G zkm|rngMx$@WIb1J?{;@)pA^n6yXSerK?a7~nc4gQ{?9Yd3=99c)t*?lflp)BkAUx! z!tH~DgCniAD5WGx5{ctj`u)B{Q6#-yPxkls1^76T`p(YIky1*OQj(@=0T>Jh6-c|? z7U08UI?iJYmSw#;J3GU5-C{1wG5|z`EX&YZv%0zp@RmnX^(X+q^E|GvuM5E}%Mg)b z97Pdxb93V)#sktcErf@~%g~7cBErqh4O;6$c(^;xSbt9gn$0Fjl2qK6dmP84X*wAI zKq*BK1Y`HW_x;Huh@yyIuUE-?`8kRr=I7@p2l&2^@B4*Y+qNqpfUB#k$p8SIPKS$& z3w+iX#5b7uYVc} z))ubok|ar`n#%Pbh9R4qn*d)H78Wjn-@qyGt5&Q1agL9VyTC1Q!u{>(0M7dQ`fi^4 zQQ}%_9LGUK2!fyud=7#@0UAgF1!xDbjIal|z%yVDKx>WGx^kk+XJC4II*-HyW{hxR zGME9GlatJXZC;u!yG@ehL5U_wLcLzk0XEPFZj7E7fH-DQ-aQ9slp|0|Jva+-92c8x zqMk9S&P*@F@>VlWT)-*Ux^3G4m21MbZ9LB-j^iBA1VWR6!t^k}GS5+`(>dMS+k2Hm zM%_gK=jZ1Dzs&zVV^Wnx^JW?MQ$xLO=3VnnIi+G8_klYT!JXMp83o8Is#Y53bC#JO w-m{GRBFT*Nyl5UokdH@wX$;TFm~mz8AC;p_HNj{qe*gdg07*qoM6N<$f&eym5C8xG literal 0 HcmV?d00001 diff --git a/images/smile.png b/images/smile.png new file mode 100644 index 0000000000000000000000000000000000000000..3eb31523d6fe001b34f3df6b40fce5751eb493a6 GIT binary patch literal 852 zcmV-a1FQUrP)7c?qH492PuM4D(zvT2bP+_k!Q=~hKhg1fqL zFM=zLi$W=uQX0`}OPeaibkKsF&zljK982!lRi#<*TI1RKng8H}h+Mga6a#5DeT-D*v`wLvV zQ%0;bD2HF~)ydCl%05^MJ|D7a&8R_OxDm8>PrvPDQXr;IODd#0mu6d^htd_q#0>Oh z=*}hanruWM+YB2&R0=h7U9cq#AqAc`eeOjDH5P@%&?u`!doPbIo6z9Qp1g!y(#?cBhPc@67 zA^$YN#4W>I#jsE_Eck|MVDLl1kA!q4fV zWH>(=vpyTLwpCDS$@HLP6X^uI`vM9@!#_naz>keRnt!z@yS$X@-_otDX3DngUy z(OiPZFCCPdrl&*G+YwL;>s-2Sc=%lI0OLTg0@6VKZoz!nl~rD@RUx8jazi@2kk00a zv{S=K%wk~pVM=p#%2a?O!1SBVeo;3}-^!cOS|r{YPob0$#zHL;DuGZa374-Mu1=Y< z2uFblR?!aNyEaeNc5bp{Y^Nprwp+5bM@c$K2>cA}f7A3|-$)V|1oi)%Q5fn%!4!42+UDGb5N)zE?_QiOr03lY&vkw8=i<2%|2x6G zn2u@4#Xl&1EJFn@VhEE_jzx#qk|Of6p#P|of;D@H z&h=~KS>k0@1w}!AP!>Ga#?EHq_mwOEo=ybGn88y)I(YFuqPP3cNC=F-4w6hHI-8o} zGop>1L9SNn(^$QwjL3=R&) zxihE63?3R?bJKF-@WhG7g3p89!JeQo8Q}E;>|C<@FU!qjh9i?1_VZ6ilDF12 zSW#HmR?Xt-{{Ex$Ie`JRqZ$Q*r-#^EkR_fUB}d1O_v7n|ifAF)^7GFJn}hnGFqje;wzwtx6o^wNPsWb)_COSq z%CI`v8@xRZJ&iPOs9h*EuSV011#XyBs9@$?mrtL7+h$i*{&BhYlJ1@!-+uT}S07tT z=)%#Qgx~5nZI+r}>-hN|Wg{bwA3mrfD~8S>r?j}lOZV5=y6|q_@a{z}pe+X~)<5rH zCQp9B1T&j=srvE*UD=eUL^hwg0UBB!Ut!UVJB(CSnMZlTP%h?_%(`dx>EUboE}V7t z*F)Z9e-XE1>1Zn#jAvRMU#)9ze_+q0O9uEM_%XpVSdJ%P7fWBuw(nL9kA9pYbf7cg c`1SSw7dy%o^hCoiNdN!<07*qoM6N<$f=ecQasU7T literal 0 HcmV?d00001 diff --git a/images/tools.png b/images/tools.png new file mode 100644 index 0000000000000000000000000000000000000000..b391a0e8392aef528db3450a6ad70708d75d5d3b GIT binary patch literal 503 zcmV1`c4jv^a zu)KIs0uh982M-p41cI_d5ez+97Y~(+G@b3&N~ib-oK89ga~VEee(#XE7Dn&!{eIr( zectZ_|GBOJ07{$Zcb85i)w3YEs6X~r2D|T+by^3oD0C2zYQ6za5yYL zvmZa`;e!tAU#vRZ**C1DlU2`9T!0#z0|0W;X+0b0H<5-)PSiU%s-%-ucWhiwM<&(S z9MJKY_w##t()q|lyf%0iP;6v^n>VgAG4-B0? z{vz+5^Bq7*C#&9}xcXmC>u!6OZK*AD>9KU8(WrnPbMX4j+xdIDxg0y67ML81;okY9 tOrQwVTnz;6w9-G^2VNaZpy@PO{{}M@%mpE#!`A=+002ovPDHLkV1kCOcdx@v7EBj?09tKvO8Q=NrfI<^XTq8=H^K)}k^GX;(^7C_&5{q<; zGpkZl6f%?Z^SEr002h}=vZjKOfq}7tS7LT)l7f0xW^Qg`vbsWWNor@#vd1gt5LP^Gzxl){mM<(URAA$D%Z=e61 z=T6uDdeDkbR`SWizv+AC)j7xK+aLVZ=45(OZ=J_k;hWz4`Yl}>CZ79HSJwA!o1T-e zt_4e}p8oO~A?ykf^Va&8%_3Y=2#I(As@WqW? z^Ov>eP3~A*^!OIb=HmR7Yk7ZpK8WqxvB~S6oWdRfHL3p4lDzDz{k?PF|6ncXcfT!=~FWKb(Kd&s%=E+VWGM9x&4|c)I$ztaD0e0sx=`fSUjS literal 0 HcmV?d00001 diff --git a/index.php b/index.php index f724327..860732f 100644 --- a/index.php +++ b/index.php @@ -1,4 +1,6 @@ @@ -9,7 +11,7 @@ PHP is not installed on your web server!!! *******************************************/ -require 'common.php'; +require './common.php'; if( ! file_exists(realpath( 'config.php' )) ) { @@ -26,10 +28,7 @@ if( ! file_exists(realpath( 'config.php' )) ) {

-You need to configure phpLDAPadmin. Edit the file 'config.php' to do so.
-
-An example config file is provided in 'config.php.example' - +
@@ -69,6 +68,7 @@ echo "\n"; */ function check_config() { + global $lang; /* Make sure their PHP version is current enough */ if( strcmp( phpversion(), REQUIRED_PHP_VERSION ) < 0 ) { pla_error( "phpLDAPadmin requires PHP version 4.1.0 or greater. You are using " . phpversion() ); @@ -78,27 +78,25 @@ function check_config() if( ! extension_loaded( 'ldap' ) ) { pla_error( "Your install of PHP appears to be missing LDAP support. Please install " . - "LDAP support before using phpLDAPadmin." ); + "LDAP support before using phpLDAPadmin. (Don't forget to restart your web server afterwards)" ); return false; } - /* Make sure they have all the functions we will need */ - $required_functions = array( 'utf8_encode', 'utf8_decode', 'htmlspecialchars' ); - foreach( $required_functions as $function ) { - if( ! function_exists( $function ) ) { - pla_error( "Your install of PHP appears to be missing the function '$function()' " . - "phpLDAPadmin requires this function to work properly." ); - return false; - } - } - /* Make sure the config file is readable */ //if( ! is_readable( 'config.php' ) ) if( ! is_readable( realpath( 'config.php' ) ) ) { - echo "The config file 'config.php' is not readable. Please check its permissions."; + pla_error( "The config file 'config.php' is not readable. Please check its permissions." ); return false; } + // Make sure their session save path is writable, if they are using a file system session module, that is. + if( 0 == strcasecmp( "Files", session_module_name() && ! is_writable( realpath( session_save_path() ) ) ) ) { + pla_error( "Your PHP session configuration is incorrect. Please check the value of session.save_path + in your php.ini to ensure that the directory specified there exists and is writable. + The current setting of \"". session_save_path() . "\" is un-writable by the web server." ); + return false; + } + /* check for syntax errors in config.php */ // capture the result of including the file with output buffering ob_start(); @@ -153,38 +151,48 @@ function check_config() /* check the existence of the servers array */ require 'config.php'; - if( ! is_array( $servers ) || count( $servers ) == 0 ) { - echo "Your config.php is missing the servers array or the array is empty. "; - echo " Please see the sample file config.php.example "; + if( ! isset( $servers ) || ! is_array( $servers ) || count( $servers ) == 0 ) { + pla_error( "Your config.php is missing the \$servers array or the \$servers array is empty. + Please see the sample file config.php.example ", false ); return false; } /* Make sure there is at least one server in the array */ $count = 0; foreach( $servers as $i => $server ) - if( $server['host'] ) + if( isset( $server['host'] ) ) $count++; if( $count == 0 ) { - echo "None of the " . count($servers) . " servers in your \$servers array is "; - echo "active in config.php. phpLDAPadmin cannot proceed util you correct this."; + pla_error( "None of the " . count($servers) . " servers in your \$servers configuration is + active in config.php. At least one of your servers must set the 'host' directive. + Example:
\$servers['host'] = \"ldap.example.com\";
+ phpLDAPadmin cannot proceed util you correct this.", false ); return false; } + // Check that 'base' is present on all serve entries + foreach( $servers as $id => $server ) { + if( isset( $server['host'] ) && isset( $server['name'] ) ) + isset( $server['base'] ) or pla_error ( "Your configuration has an error. You omitted the 'base' directive + on server number $id. Your server entry must have a 'base' directive + even if it's empty ('')." ); + } + // Check each of the servers in the servers array foreach( $servers as $id => $server ) { if( isset( $server['host'] ) ) { // Make sure they specified an auth_type if( ! isset( $server['auth_type'] ) ) { - echo "Your configuratoin has an error. You omitted the 'auth_type' directive on server number $id"; - echo "'auth_type' must be set, and it must be one of 'config' or 'form'."; + pla_error( "Your configuratoin has an error. You omitted the 'auth_type' directive on server number $id + 'auth_type' must be set, and it must be one of 'config', 'cookie', or 'session'.", false ); return false; } // Make sure they specified a correct auth_type - if( $server['auth_type'] != 'config' && $server['auth_type'] != 'form' ) { - echo "You specified an invalid 'auth_type' (" . htmlspecialchars( $server['auth_type'] ) . ") "; - echo "for server number $id in your configuration."; + if( ! in_array( $server['auth_type'], array( 'config', 'cookie', 'session' ) ) ) { + global $lang; + pla_error( sprintf( $lang['error_auth_type_config'], htmlspecialchars( $server['auth_type'] ) ) ); return false; } } diff --git a/lang/Makefile b/lang/Makefile index cf31591..7d24b7a 100644 --- a/lang/Makefile +++ b/lang/Makefile @@ -1,31 +1,43 @@ # # This Makefile (lang/Makefile) converts the source lang files to UTF8 # coding. You need iconv installed to use it. -# +# $Header: /cvsroot/phpldapadmin/phpldapadmin/lang/Makefile,v 1.24 2004/12/09 14:12:16 uugdave Exp $ # ToDo: detect the encoding in the "source" # # posible detect of the language # echo `cat de.php | grep "logged_in_as" | sed s/".*="//g | file - | sed s/".*: "//g | sed s/" .*"//g` # # or -# +# # maybe like this # cat LANG.php | sed s/"^\/"//g | sed s/".*= "//g | sed s/";.*"//g | grep -v "<"| file - | sed s/".*: "//g | sed s/" .*"//g -# + +# Where to place the recoded language files DESTDIR=./recoded +# Path to the iconv binary ICONV=iconv -# php is not on all systems in /usr/bin/php +# Path to the PHP binary PHP=php TARGETS=${DESTDIR}/auto.php \ ${DESTDIR}/ca.php \ + ${DESTDIR}/cz.php \ ${DESTDIR}/de.php \ ${DESTDIR}/en.php \ ${DESTDIR}/es.php \ ${DESTDIR}/fr.php \ + ${DESTDIR}/hu.php \ ${DESTDIR}/it.php \ + ${DESTDIR}/ja.php \ ${DESTDIR}/nl.php \ - ${DESTDIR}/ru.php + ${DESTDIR}/pl.php \ + ${DESTDIR}/pt-br.php \ + ${DESTDIR}/ru.php \ + ${DESTDIR}/sv.php \ + ${DESTDIR}/zz.php \ + ${DESTDIR}/zzz.php +# OFF zh-tw.php +# ${DESTDIR}/zh-tw.php \ default: @echo "usage:" @@ -38,10 +50,10 @@ iconvlang: prepare ${TARGETS} syntax @echo "Done!" syntax: - @echo "Starting syntax" + @echo "Starting syntax checking..." @which $(PHP) >/dev/null 2>&1 || ( echo "You must have '$(PHP)' installed to use this Makefile, but I could not find it in your path!" && exit 1 ) @for i in ${TARGETS}; do ${PHP} -l $$i >/dev/null 2>&1 || ( echo "Syntax errors found in $$i!" && exit 1 ); done - @echo "Ending syntax" + @echo "Done" prepare: @echo "Starting prepare" @@ -63,6 +75,11 @@ ${DESTDIR}/ca.php: ca.php @echo "Fixing encoding ca.php to UTF8 "${DESTDIR}/ca.php @iconv -f iso8859-1 -t utf8 ca.php > ${DESTDIR}/ca.php +${DESTDIR}/cz.php: cz.php + @echo "Fixing encoding cz.php to UTF8 "${DESTDIR}/cz.php + @iconv -f iso8859-2 -t utf8 cz.php > ${DESTDIR}/cz.php + + ${DESTDIR}/de.php: de.php @echo "Fixing encoding de.php to UTF8 "${DESTDIR}/de.php @iconv -f iso8859-1 -t utf8 de.php > ${DESTDIR}/de.php @@ -79,14 +96,49 @@ ${DESTDIR}/fr.php: fr.php @echo "Fixing encoding fr.php to UTF8 "${DESTDIR}/fr.php @iconv -f iso8859-1 -t utf8 fr.php > ${DESTDIR}/fr.php +${DESTDIR}/hu.php: hu.php + @echo "Fixing encoding hu.php to UTF8 "${DESTDIR}/hu.php + #@iconv -f iso8859-2 -t utf8 hu.php > ${DESTDIR}/hu.php + cp hu.php ${DESTDIR}/. + ${DESTDIR}/it.php: it.php @echo "Fixing encoding it.php to UTF8 "${DESTDIR}/it.php @iconv -f iso8859-1 -t utf8 it.php > ${DESTDIR}/it.php +${DESTDIR}/ja.php: ja.php + @echo "Copying only the ja.php" + @cp ja.php ${DESTDIR}/. + ${DESTDIR}/nl.php: nl.php @echo "Fixing encoding nl.php to UTF8 "${DESTDIR}/nl.php @iconv -f iso8859-1 -t utf8 nl.php > ${DESTDIR}/nl.php +${DESTDIR}/pl.php: pl.php + @echo "Fixing encoding pl.php to UTF8 "${DESTDIR}/pl.php + @iconv -f iso8859-2 -t utf8 pl.php > ${DESTDIR}/pl.php + +${DESTDIR}/pt-br.php: pt-br.php + @echo "Fixing encoding pt-br.php to UTF8 "${DESTDIR}/pt-br.php + @iconv -f iso8859-1 -t utf8 pt-br.php > ${DESTDIR}/pt-br.php + +${DESTDIR}/sv.php: sv.php + @echo "Fixing encoding sv.php to UTF8 "${DESTDIR}/sv.php + @iconv -f iso8859-1 -t utf8 sv.php > ${DESTDIR}/sv.php + ${DESTDIR}/ru.php: ru.php @echo "Fixing encoding ru.php to UTF8 "${DESTDIR}/ru.php - @iconv -f utf8 -t utf8 ru.php > ${DESTDIR}/ru.php \ No newline at end of file + @iconv -f utf8 -t utf8 ru.php > ${DESTDIR}/ru.php + +#${DESTDIR}/zh-tw.php: zh-tw.php +# @echo "Copying only the zh-tw.php" + # @iconv -f utf8 -t utf8 zh-tw.php ${DESTDIR}/zh-tw.php + # INTERNAL BUG COULDN CONVERT IT, SO WE COPY IT + # cp zh-tw.php ${DESTDIR}/zh-tw.php +${DESTDIR}/zz.php: zz.php + @echo "Copying only the zz.php" + @cp zz.php ${DESTDIR}/. + +${DESTDIR}/zzz.php: zzz.php + @echo "Copying only the zzz.php" + @cp zzz.php ${DESTDIR}/. + diff --git a/lang/auto.php b/lang/auto.php index 04d8c95..abc98fc 100644 --- a/lang/auto.php +++ b/lang/auto.php @@ -1,7 +1,8 @@ "ca" // catalan ," fr-"=>"fr" // fr-lu,fr-ca,... ," it "=>"it" // italien ," it-"=>"it" // for it-ch (italien swiss).. + ," ja "=>"ja" // japanese ," nl "=>"nl" // dutch - ," nl-"=>"nl" // for ne-be, only one? + ," nl-"=>"nl" // for ne-be, only one? + ," pl "=>"pl" // polish + ," pl-"=>"pl" // maybe exist + ," pt "=>"pt-br" // brazilian portuguese + ," pt-br"=>"pt-br" // brazilian portuguese ," ru "=>"ru" // russian ," ru-"=>"ru" // ru- exits? + ," sv "=>"sv" //swedish + ," sv-"=>"sv" // swedisch to );// all supported languages in this array // test @@ -39,4 +47,6 @@ foreach ($langSupport as $key=>$value) { } //echo "used:$useLang\n"; include realpath ("$useLang".".php");// this should include from recode/ position +$language=$useLang; +//echo "language:".$langugage; ?> diff --git a/lang/ca.php b/lang/ca.php index 42e4f2f..ee52247 100644 --- a/lang/ca.php +++ b/lang/ca.php @@ -1,7 +1,9 @@ + + * --- INSTRUCTIONS FOR TRANSLATORS --- + * + * If you want to write a new language file for your language, + * please submit the file on SourceForge: + * + * https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498548 + * + * Use the option "Check to Upload and Attach a File" at the bottom + * + * Thank you! + * + */ + +// Search form +$lang['simple_search_form_str'] = 'Rychlé vyhledávání'; +$lang['advanced_search_form_str'] = 'Roz¹íøené vyhledávání'; +$lang['server'] = 'Server'; +$lang['search_for_entries_whose'] = 'Vyhledat objekty kde'; +$lang['base_dn'] = 'Výchozí DN'; +$lang['search_scope'] = 'Oblast prohledávání'; +$lang['show_attributes'] = 'Zobrazovat atributy'; +$lang['Search'] = 'Vyhledat'; +$lang['predefined_search_str'] = 'Zvolte pøeddefinované vyhledávání'; +$lang['predefined_searches'] = 'Pøeddefinovaná vyhledávání'; +$lang['no_predefined_queries'] = 'V config.php nejsou definovány ¾ádné dotazy.'; + +// Tree browser +$lang['request_new_feature'] = 'Napi¹te si o novou funkci'; +$lang['report_bug'] = 'Nahlásit chybu'; +$lang['schema'] = 'schéma'; +$lang['search'] = 'vyhledat'; +$lang['create'] = 'vytvoøit'; +$lang['info'] = 'info'; +$lang['import'] = 'import'; +$lang['refresh'] = 'obnovit'; +$lang['logout'] = 'odhlásit se'; +$lang['create_new'] = 'Vytvoøit nový'; +$lang['view_schema_for'] = 'Zobrazit schéma pro'; +$lang['refresh_expanded_containers'] = 'Obnovit v¹echny otevøené slo¾ky'; +$lang['create_new_entry_on'] = 'Vytvoøit nový objekt v'; +$lang['new'] = 'nový'; +$lang['view_server_info'] = 'Zobrazit serverem poskytované informace'; +$lang['import_from_ldif'] = 'Importovat data ze souboru LDIF'; +$lang['logout_of_this_server'] = 'Odhlásit se od tohoto serveru'; +$lang['logged_in_as'] = 'Pøihlá¹en jako: '; +$lang['read_only'] = 'jen pro ètení'; +$lang['read_only_tooltip'] = 'Tento atribut byl administrátorem phpLDAPadminu oznaèen jako "jen pro ètení".'; +$lang['could_not_determine_root'] = 'Nepodaøilo se zjistit koøen Va¹eho LDAP stromu.'; +$lang['ldap_refuses_to_give_root'] = 'Zdá se, ¾e LDAP server je nastavený tak, ¾e nezobrazuje svùj koøen.'; +$lang['please_specify_in_config'] = 'Nastavte ho prosím v souboru config.php'; +$lang['create_new_entry_in'] = 'Vytvoøit nový objekt v'; +$lang['login_link'] = 'Pøihlásit se...'; +$lang['login'] = 'pøihlásit'; + +// Entry display +$lang['delete_this_entry'] = 'Smazat tento objekt'; +$lang['delete_this_entry_tooltip'] = 'Budete po¾ádáni o potvrzení tohoto rozhodnutí'; +$lang['copy_this_entry'] = 'Kopírovat tento objekt'; +$lang['copy_this_entry_tooltip'] = 'Okopíruje tento objekt do jiného umístìní, nového DN, nebo na jiný server'; +$lang['export'] = 'Export'; +$lang['export_tooltip'] = 'Ulo¾it pøepis objektu'; +$lang['export_subtree_tooltip'] = 'Ulo¾í pøepis tohoto objektu a v¹ech jeho potomkù'; +$lang['export_subtree'] = 'Exportovat podstrom'; +$lang['create_a_child_entry'] = 'Vytvoøit nového potomka'; +$lang['rename_entry'] = 'Pøejmenovat objekt'; +$lang['rename'] = 'Pøejmenovat'; +$lang['add'] = 'Pøidat'; +$lang['view'] = 'Zobrazit'; +$lang['view_one_child'] = 'Zobrazit potomka'; +$lang['view_children'] = 'Zobrazit potomky (%s)'; +$lang['add_new_attribute'] = 'Pøidat nový atribut'; +$lang['add_new_objectclass'] = 'Pøidat objectClass'; +$lang['hide_internal_attrs'] = 'Schovat interní atributy'; +$lang['show_internal_attrs'] = 'Zobrazit interní atributy'; +$lang['attr_name_tooltip'] = 'Klepnutím zobrazíte definièní schéma pro atribut typu \'%s\''; +$lang['none'] = '¾ádný'; +$lang['no_internal_attributes'] = '®ádné interní atributy'; +$lang['no_attributes'] = 'Tento objekt nemá atributy'; +$lang['save_changes'] = 'Ulo¾it zmìny'; +$lang['add_value'] = 'pøidat hodnotu'; +$lang['add_value_tooltip'] = 'Pøidá dal¹í hodnotu k atributu \'%s\''; +$lang['refresh_entry'] = 'Obnovit'; +$lang['refresh_this_entry'] = 'Obnovit tento objekt'; +$lang['delete_hint'] = 'Rada: Pro smazání atributu vyprázdìte textové políèko a klepnìte na Ulo¾it.'; +$lang['attr_schema_hint'] = 'Rada: K zobrazení schémata pro atribut klepnìte na název atributu.'; +$lang['attrs_modified'] = 'Nìkteré atributy (%s) byly modifikováný a jsou zvýraznìny dole.'; +$lang['attr_modified'] = 'Atribut (%s) byl zmìnìn a je zvýraznìn dole.'; +$lang['viewing_read_only'] = 'Prohlí¾ení objekt v módu "pouze pro ètení".'; +$lang['no_new_attrs_available'] = 'nejsou dostupné ¾ádné nové atributy pro tento objekt'; +$lang['no_new_binary_attrs_available'] = 'nejsou dostupné ¾ádné nové binární atributy pro tento objekt'; +$lang['binary_value'] = 'Binarní hodnota'; +$lang['add_new_binary_attr'] = 'Pøidat nový binarní atribut'; +$lang['alias_for'] = 'Poznámka: \'%s\' je aliasem pro \'%s\''; +$lang['download_value'] = 'stáhnout data'; +$lang['delete_attribute'] = 'smazat atribut'; +$lang['true'] = 'true'; +$lang['false'] = 'false'; +$lang['none_remove_value'] = '¾ádný, odebrat hodnotu'; +$lang['really_delete_attribute'] = 'Skuteènì smazat atribut'; +$lang['add_new_value'] = 'Pøidat novou hodnotu'; + +// Schema browser +$lang['the_following_objectclasses'] = 'Následující objectClass jsou podporovány tímto LDAP serverem.'; +$lang['the_following_attributes'] = 'Následující attributeType jsou podporovány tímto LDAP serverem.'; +$lang['the_following_matching'] = 'Následující kritéria výbìru jsou podporovány tímto LDAP serverem.'; +$lang['the_following_syntaxes'] = 'Následující syntaxe jsou podporovány tímto LDAP serverem.'; +$lang['schema_retrieve_error_1']='Server plnì nepodporuje LDAP protocol.'; +$lang['schema_retrieve_error_2']='Va¹e verze PHP korektnì neprovede tento dotaz.'; +$lang['schema_retrieve_error_3']='Nebo mo¾ná phpLDAPadmin neví jak získat schéma pro Vá¹ server.'; +$lang['jump_to_objectclass'] = 'Jdi na objectClass'; +$lang['jump_to_attr'] = 'Jdi na typ atributu'; +$lang['jump_to_matching_rule'] = 'Jdi na Matching Rule'; +$lang['schema_for_server'] = 'Schéma serveru'; +$lang['required_attrs'] = 'Vy¾adované atributy'; +$lang['optional_attrs'] = 'Volitelné atributy'; +$lang['optional_binary_attrs'] = 'Volitelné binární atributy'; +$lang['OID'] = 'OID'; +$lang['aliases']='Aliasy'; +$lang['desc'] = 'Popis'; +$lang['no_description']='¾ádný popis'; +$lang['name'] = 'Název'; +$lang['equality']='Equality'; +$lang['is_obsolete'] = 'Tato objectClass je zastaralá'; +$lang['inherits'] = 'Odvozeno od objectClass'; +$lang['inherited_from'] = 'Odvozeno od objectClass'; +$lang['parent_to'] = 'Rodièovská objectClass'; +$lang['jump_to_this_oclass'] = 'Jdi na definici této objectClass'; +$lang['matching_rule_oid'] = 'Výbìrové kritérium OID'; +$lang['syntax_oid'] = 'Syntaxe OID'; +$lang['not_applicable'] = 'nepou¾itelný'; +$lang['not_specified'] = 'nespecifikovaný'; +$lang['character']='znak'; +$lang['characters']='znakù'; +$lang['used_by_objectclasses']='Pou¾íváno tìmito objectClass'; +$lang['used_by_attributes']='Pou¾ívají atributy'; +$lang['maximum_length']='Maximální délka'; +$lang['attributes']='Typy atributù'; +$lang['syntaxes']='Syntaxe'; +$lang['matchingrules']='Matching Rules'; +$lang['oid']='OID'; +$lang['obsolete']='Zastaralé'; +$lang['ordering']='Øazení'; +$lang['substring_rule']='Substring Rule'; +$lang['single_valued']='Single Valued'; +$lang['collective']='Collective'; +$lang['user_modification']='User Modification'; +$lang['usage']='Pou¾ití'; +$lang['could_not_retrieve_schema_from']='Nelze získat schéma z'; +$lang['type']='Typ'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'Objekt \'%s\' byl úspì¹nì odstranìn.'; +$lang['you_must_specify_a_dn'] = 'Musíte zadat DN'; +$lang['could_not_delete_entry'] = 'Nebylo mo¾né odstranit objekt: %s'; +$lang['no_such_entry'] = 'Objekt neexistuje: %s'; +$lang['delete_dn'] = 'Smazat %s'; +$lang['permanently_delete_children'] = 'Odstranit také v¹echny potomky?'; +$lang['entry_is_root_sub_tree'] = 'Tento objekt je koøenem podstromu, který obsahuje %s objektù.'; +$lang['view_entries'] = 'zobrazit objekty'; +$lang['confirm_recursive_delete'] = 'phpLDAPadmin rekurzivnì odstraní tento objekt a v¹ech jeho %s potomkù. Pozornì si prohlédnìte seznam objektù, které tato operace odstraní. Pøejete si pokraèovat?'; +$lang['confirm_recursive_delete_note'] = 'Poznámka: tato operace mù¾e mít fatální následky a nelze ji vrátit zpìt. Speciální pozornost vìnujte aliasùm, odkazùm a ostatním vìcem, které mù¾ou zpùsobit problémy.'; +$lang['delete_all_x_objects'] = 'Smazat v¹ech %s objektù'; +$lang['recursive_delete_progress'] = 'Prùbìh rekurzivního odstranìní'; +$lang['entry_and_sub_tree_deleted_successfully'] = 'Objekt %s a jeho podstrom byly úspì¹nì odstranìny.'; +$lang['failed_to_delete_entry'] = 'Nepodaøilo se odstranit objekt %s'; +$lang['list_of_entries_to_be_deleted'] = 'Seznam objektù k odstranìní:'; +$lang['sure_permanent_delete_object']='Jste si skuteènì jisti, ¾e chcete odstranit tento objekt?'; +$lang['dn'] = 'DN'; + +// Deleting attributes +$lang['attr_is_read_only'] = 'Atribut "%s" je v konfiguraci phpLDAPadminu oznaèen jako "jen pro ètení".'; +$lang['no_attr_specified'] = 'Nebylo zadáno jméno atributu.'; +$lang['no_dn_specified'] = 'Nebylo zadáno DN'; + +// Adding attributes +$lang['left_attr_blank'] = 'Nevyplnili jste hodnotu atributu. Vra»te se zpìt a akci opakujte.'; +$lang['failed_to_add_attr'] = 'Pøidání atributu selhalo.'; +$lang['file_empty'] = 'Soubor, který jste zvolili je buï prázdný nebo neexistuje. Vra»te se prosím zpìt a akci opakujte.'; +$lang['invalid_file'] = 'Bezpeènostní chyba: Soubor, který uploadujete mù¾e být závadný.'; +$lang['warning_file_uploads_disabled'] = 'V konfiguraci PHP jsou zakázány uploady souborù. Pro pokraèování upravte prosím php.ini.'; +$lang['uploaded_file_too_big'] = 'Soubor, který se pokou¹eli ulo¾it je pøíli¹ veliký. Upravte prosím hodnotu upload_max_size v php.ini.'; +$lang['uploaded_file_partial'] = 'Pøi uploadu souboru do¹lo zøejmì k selhání sítì, nebo» se podaøilo získat jen èást souboru.'; +$lang['max_file_size'] = 'Maximální velikost souboru: %s'; + +// Updating values +$lang['modification_successful'] = 'Úprava probìhla úspì¹nì!'; +$lang['change_password_new_login'] = 'Kvùli zmìnì svého hesla se nyní musíte pøihlásit znova - s novým heslem.'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'Nový vy¾adovaný atribut'; +$lang['requires_to_add'] = 'K provedení této akce musíte pøidat'; +$lang['new_attributes'] = 'nové atributy'; +$lang['new_required_attrs_instructions'] = 'Návod: K pøiøazení této objectClass k vybranému objektu musíte zadat'; +$lang['that_this_oclass_requires'] = 'atributy, které jsou touto objectClass vy¾adovány. Mù¾ete tak uèinit v tomto formuláøi.'; +$lang['add_oclass_and_attrs'] = 'Pøidat objectClass a atributy'; +$lang['objectclasses'] = 'objectClassy'; + +// General +$lang['chooser_link_tooltip'] = 'Otevøe popup okno, ve kterém zvolíte DN'; +$lang['no_updates_in_read_only_mode'] = 'Nelze provádìt úpravy dokud je server v módu "pouze pro ètení"'; +$lang['bad_server_id'] = '©patné ID serveru'; +$lang['not_enough_login_info'] = 'Nedostatek informací pro pøihlá¹ení k serveru. Ovìøte prosím nastavení.'; +$lang['could_not_connect'] = 'Nelze se pøipojit k LDAP serveru.'; +$lang['could_not_connect_to_host_on_port'] = 'Nelze se pøipojit k "%s" na portu "%s"'; +$lang['could_not_perform_ldap_mod_add'] = 'Nelze provést ldap_mod_add operaci.'; +$lang['bad_server_id_underline'] = 'server_id: '; +$lang['success'] = 'Hotovo'; +$lang['server_colon_pare'] = 'Server: '; +$lang['look_in'] = 'Prohlí¾ení: '; +$lang['missing_server_id_in_query_string'] = 'V po¾adavku nebylo uvedeno ¾ádné ID serveru!'; +$lang['missing_dn_in_query_string'] = 'V po¾adavku nebyl uveden ¾ádný DN!'; +$lang['back_up_p'] = 'O úroveò vý¹...'; +$lang['no_entries'] = '¾ádné objekty'; +$lang['not_logged_in'] = 'Nepøihlá¹en'; +$lang['could_not_det_base_dn'] = 'Nelze zjistit výchozí DN'; +$lang['please_report_this_as_a_bug']='Nahla¹te toto prosím jako chybu.'; +$lang['reasons_for_error']='Toto se mù¾e pøihodit z nìkolika pøíèin. Nejpravdìpodobnìj¹í jsou:'; +$lang['yes']='Ano'; +$lang['no']='Ne'; +$lang['go']='Jdi'; +$lang['delete']='Odstranit'; +$lang['back']='Zpìt'; +$lang['object']='objekt'; +$lang['delete_all']='Odstranit v¹e'; +$lang['url_bug_report']='https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; +$lang['hint'] = 'rada'; +$lang['bug'] = 'chyba'; +$lang['warning'] = 'upozornìní'; +$lang['light'] = 'light'; // the word 'light' from 'light bulb' +$lang['proceed_gt'] = 'Proveï >>'; + +// Add value form +$lang['add_new'] = 'Pøidat nový'; +$lang['value_to'] = 'hodnota pro'; +$lang['distinguished_name'] = 'Distinguished Name'; +$lang['current_list_of'] = 'Souèasný výpis'; +$lang['values_for_attribute'] = 'hodnoty pro atribut'; +$lang['inappropriate_matching_note'] = 'Poznámka: Pokud nenastavíte na tomto LDAP serveru pravidlo
EQUALITY pro tento atribut, dojde k chybì pøi výbìru objektù.'; +$lang['enter_value_to_add'] = 'Zadejte hodnotu, kterou chcete pøidat:'; +$lang['new_required_attrs_note'] = 'Poznámka: Není vylouèené, ¾e budete vyzváni k zadání nových atributù vy¾adovaných touto objectClass'; +$lang['syntax'] = 'Syntaxe'; + +//copy.php +$lang['copy_server_read_only'] = 'Nemù¾ete provádìt zmìny dokud je server v módu "jen pro ètení"'; +$lang['copy_dest_dn_blank'] = 'Ponechali jste kolonku cílové DN prázdnou.'; +$lang['copy_dest_already_exists'] = 'Objekt (%s) ji¾ v cílovém DN existuje.'; +$lang['copy_dest_container_does_not_exist'] = 'Cílová slo¾ka (%s) neexistuje.'; +$lang['copy_source_dest_dn_same'] = 'Zdrojové a cílové DN se shodují.'; +$lang['copy_copying'] = 'Kopíruji '; +$lang['copy_recursive_copy_progress'] = 'Prùbìh rekurzivního kopírování'; +$lang['copy_building_snapshot'] = 'Sestavuji obraz stromu ke kopírování... '; +$lang['copy_successful_like_to'] = 'Kopie úspì¹nì dokonèena! Pøejete si '; +$lang['copy_view_new_entry'] = 'zobrazit nový objekt'; +$lang['copy_failed'] = 'Nepodaøilo se okopírovat DN: '; + +//edit.php +$lang['missing_template_file'] = 'Upozornìní: chybí ¹ablona, '; +$lang['using_default'] = 'Pou¾ívám výchozí.'; +$lang['template'] = '©ablona'; +$lang['must_choose_template'] = 'Musíte zvolit ¹ablonu'; +$lang['invalid_template'] = '%s je neplatná ¹ablona'; +$lang['using_template'] = 'pou¾ítím ¹ablony'; +$lang['go_to_dn'] = 'Jdi na %s'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Kopírovat '; +$lang['copyf_to_new_object'] = 'jako nový objekt'; +$lang['copyf_dest_dn'] = 'Cílové DN'; +$lang['copyf_dest_dn_tooltip'] = 'Celé DN nového objektu bude vytvoøeno kopií zdrojového objektu'; +$lang['copyf_dest_server'] = 'Cílový server'; +$lang['copyf_note'] = 'Rada: Kopírování mezi servery funguje jedinì za pøedpokladu, ¾e nedojde k neshodì schémat'; +$lang['copyf_recursive_copy'] = 'Pøi kopírování zahrnout v¹echny potomky tohoto objektu.'; +$lang['recursive_copy'] = 'Rekurzivní kopie'; +$lang['filter'] = 'Filtr'; +$lang['filter_tooltip'] = 'Pøi rekurzivní kopii pracovat pouze s objekty, které splòují zvolený filtr'; + +//create.php +$lang['create_required_attribute'] = 'Nevyplnili jste pole pro vy¾adovaný atribut %s.'; +$lang['redirecting'] = 'Pøesmìrovávám'; +$lang['here'] = 'zde'; +$lang['create_could_not_add'] = 'Nelze objekt do LDAP serveru pøidat.'; + +//create_form.php +$lang['createf_create_object'] = 'Vytvoøit objekt'; +$lang['createf_choose_temp'] = 'Vyberte ¹ablonu'; +$lang['createf_select_temp'] = 'Zvolte ¹ablonu pro vytvoøení objektu'; +$lang['createf_proceed'] = 'Provést'; +$lang['rdn_field_blank'] = 'Ponechali jste pole RDN nevyplnìné.'; +$lang['container_does_not_exist'] = 'Slo¾ka (%s) neexistuje. Opakujte prosím akci.'; +$lang['no_objectclasses_selected'] = 'Nepøiøadili jste ¾ádné objectClass k tomuto objektu. Vra»te se prosím zpìt a akci opakujte.'; +$lang['hint_structural_oclass'] = 'Nápovìda: Musíte zvolit alespoò jednu structural objectClass.'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'Na serveru'; +$lang['ctemplate_no_template'] = 'V POST po¾adavku nebyla zaslána ¾ádná ¹ablona.'; +$lang['ctemplate_config_handler'] = 'Va¹e nastavení uvádí obsluhovaè '; +$lang['ctemplate_handler_does_not_exist'] = 'pro tuto ¹ablonu. Ale tento obsluhovaè nelze v adresáøi templates/creation nalézt.'; +$lang['create_step1'] = 'Krok 1 ze 2: Jméno a objectClass(y)'; +$lang['create_step2'] = 'Krok 2 ze 2: Atributy a hodnoty'; +$lang['relative_distinguished_name'] = 'Relativní Distinguished Name'; +$lang['rdn'] = 'RDN'; +$lang['rdn_example'] = '(pøíklad: cn=MujNovyUzivatel)'; +$lang['container'] = 'Slo¾ka'; +$lang['alias_for'] = 'Alias k %s'; + +// search.php +$lang['you_have_not_logged_into_server'] = 'Nelze provádìt vyhledávání na serveru bez pøedchozího pøihlá¹ení.'; +$lang['click_to_go_to_login_form'] = 'Klepnutím budete pøesmìrováni na formuláø k pøihlá¹ení'; +$lang['unrecognized_criteria_option'] = 'Neznámá vyhledávací kritéria: '; +$lang['if_you_want_to_add_criteria'] = 'Pokud si pøejete pøidat svoje vlastní vyhledávací kritéria, ujistìte se, ¾e jste je pøidali do search.php.'; +$lang['entries_found'] = 'Nalezené objekty: '; +$lang['filter_performed'] = 'Uplatnìný filtr: '; +$lang['search_duration'] = 'Vyhledávání dokonèeno za'; +$lang['seconds'] = 'sekund'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'Oblast vyhledávání'; +$lang['scope_sub'] = 'Celý podstrom'; +$lang['scope_one'] = 'O jednu úroveò ní¾'; +$lang['scope_base'] = 'Pouze výchozí DN'; +$lang['standard_ldap_search_filter'] = 'Standardní LDAP vyhledávací filtr. Pøiklad: (&(sn=Smith)(givenname=David))'; +$lang['search_filter'] = 'Vyhledávací filtr'; +$lang['list_of_attrs_to_display_in_results'] = 'Seznam atributù zobrazených ve výsledku hledání (oddìlené èárkou)'; +$lang['show_attributes'] = 'Zobrazit atributy'; + +// search_form_simple.php +$lang['search_for_entries_whose'] = 'Vyhledat objekty kde'; +$lang['equals'] = 'je'; +$lang['starts with'] = 'zaèíná na'; +$lang['contains'] = 'obsahuje'; +$lang['ends with'] = 'konèí na'; +$lang['sounds like'] = 'zní jako'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'Nelze získat informace ze serveru LDAP'; +$lang['server_info_for'] = 'Server info pro: '; +$lang['server_reports_following'] = 'Server o sobì poskytuje následující informace'; +$lang['nothing_to_report'] = 'Server neposkytuje ¾ádné informace.'; + +//update.php +$lang['update_array_malformed'] = 'update_array je po¹kozené. Mù¾e se jednat o chybu v phpLDAPadmin. Prosíme Vás, abyste chybu nahlásili.'; +$lang['could_not_perform_ldap_modify'] = 'Nelze provést operaci ldap_modify.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Pøejete si provést tyto zmìny?'; +$lang['attribute'] = 'Atribut'; +$lang['old_value'] = 'Pùvodní hodnota'; +$lang['new_value'] = 'Nová hodnota'; +$lang['attr_deleted'] = '[atribut odstranìn]'; +$lang['commit'] = 'Odeslat'; +$lang['cancel'] = 'Storno'; +$lang['you_made_no_changes'] = 'Neprovedli jste ¾ádné zmìny'; +$lang['go_back'] = 'Zpìt'; + +// welcome.php +$lang['welcome_note'] = 'K navigaci pou¾ijte prosím menu v levé èásti obrazovky'; +$lang['credits'] = 'Autoøi'; +$lang['changelog'] = 'ChangeLog'; +$lang['donate'] = 'Podpoøit projekt'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Nebezpeèný název souboru: '; +$lang['no_such_file'] = 'Soubor nelze nalézt: '; + +//function.php +$lang['auto_update_not_setup'] = 'V konfiguraci jste zapnuli podporu auto_uid_numbers pro %s, ale nespecifikovali jste auto_uid_number_mechanism. Napravte prosím nejprve tento problém.'; +$lang['uidpool_not_set'] = 'V konfiguraci serveru %s jste specifikovali auto_uid_number_mechanism jako uidpool, ale neuvedli jste audo_uid_number_uid_pool_dn. Napravte prosím nejprve tento problém.'; +$lang['uidpool_not_exist'] = 'Zdá se, ¾e uidPool uvedený v konfiguraci (%s) neexistuje.'; +$lang['specified_uidpool'] = 'V konfiguraci serveru %s jste specifikovali auto_uid_number_mechanism jako search, ale neuvedli jste auto_uid_number_search_base. Napravte prosím nejprve tento problém.'; +$lang['auto_uid_invalid_credential'] = 'Se zadanými pøístupovými oprávnìními se nelze pøipojit k %s a získat auto_uid. Zkontrolujte prosím konfiguraci.'; +$lang['bad_auto_uid_search_base'] = 'V konfiguraci phpLDAPadminu je uveden neplatný parametr auto_uid_search_base pro server %s'; +$lang['auto_uid_invalid_value'] = 'V konfiguraci je uvedena neplatná hodnota auto_uid_number_mechanism (%s). Platné hodnoty jsou pouze uidpool a search. Napravte prosím nejprve tento problém.'; +$lang['error_auth_type_config'] = 'Chyba: Ve svém konfiguraèním souboru jste u polo¾ky $servers[\'auth_type\'] uvedli chybnou hodnotu \'%s\'. Platné hodnoty jsou pouze \'config\' a \'form\'.'; +$lang['php_install_not_supports_tls'] = 'Tato instalace PHP neobsahuje podporu pro TLS'; +$lang['could_not_start_tls'] = 'Nelze inicializovat TLS.
Zkontolujte prosím konfiguraci svého LDAP serveru.'; +$lang['could_not_bind_anon'] = 'K serveru se nelze pøipojit anonymnì.'; +$lang['could_not_bind'] = 'Nelze se pøipojit k serveru LDAP.'; +$lang['anonymous_bind'] = 'Pøipojit anonymnì'; +$lang['bad_user_name_or_password'] = 'Nesprávné jméno nebo heslo. Opakujte pøihlá¹ení.'; +$lang['redirecting_click_if_nothing_happens'] = 'Pøesmìrovávám... Klepnìte sem, pokud se nic nestane.'; +$lang['successfully_logged_in_to_server'] = 'Úspì¹nì jste se pøihlásili k serveru %s'; +$lang['could_not_set_cookie'] = 'Cookie nemohla být ulo¾ena.'; +$lang['ldap_said'] = 'Odpovìï LDAP serveru: %s

'; +$lang['ferror_error'] = 'Chyba'; +$lang['fbrowse'] = 'procházet'; +$lang['delete_photo'] = 'Odstranit fotografii'; +$lang['install_not_support_blowfish'] = 'Tato instalace PHP neobsahuje podporu pro ¹ifru Blowfish.'; +$lang['install_not_support_md5crypt'] = 'Tato instalace PHP neobsahuje podporu pro ¹ifru md5crypt.'; +$lang['install_no_mash'] = 'Tato instalace PHP nepodporuje funkci mhash(). Nelze aplikovat SHA hash.'; +$lang['jpeg_contains_errors'] = 'jpegPhoto obsahuje chyby
'; +$lang['ferror_number'] = 'Èíslo chyby: %s (%s)

'; +$lang['ferror_discription'] = 'Popis: %s

'; +$lang['ferror_number_short'] = 'Èíslo chyby: %s

'; +$lang['ferror_discription_short'] = 'Popis: (popis není k dispozici)
'; +$lang['ferror_submit_bug'] = 'Pokud je toto chyba v phpLDAPadmin,
napi¹te nám o tom.'; +$lang['ferror_unrecognized_num'] = 'Neznámé èíslo chyby: '; +$lang['ferror_nonfatil_bug'] = '
+
+ Narazili jste na nezáva¾nou, droubnou a¾ zanedbatelnou chybu v phpLDAPadmin!
Chyba:%s (%s)
Soubor:%s øádka %s, voláno z %s
Verze:PLA: %s, PHP: %s, SAPI: %s +
Web server:%s
+ Klepnutím prosím ohlá¹te chybu.

'; +$lang['ferror_congrats_found_bug'] = 'Blahopøejeme! Nalezli jste chybu v phpLDAPadmin. :-)

+ + + + + + + + + + +
Chyba:%s
Vá¾nost:%s
Soubor:%s
Øádka:%s
Voláno z:%s
Verze PLA:%s
Verze PHP:%s
PHP SAPI:%s
Web server:%s
+
+ Klepnutím dole prosím ohla¹te chybu!'; + +//ldif_import_form +$lang['import_ldif_file_title'] = 'Importovat soubor LDIF'; +$lang['select_ldif_file'] = 'Zvolte soubor LDIF:'; +$lang['select_ldif_file_proceed'] = 'Proveï >>'; +$lang['dont_stop_on_errors'] = 'Ignorovat chyby'; + +//ldif_import +$lang['add_action'] = 'Pøidávání...'; +$lang['delete_action'] = 'Odstraòování...'; +$lang['rename_action'] = 'Pøejmenovávání...'; +$lang['modify_action'] = 'Upravování...'; +$lang['warning_no_ldif_version_found'] = 'Nebyla nalezena verze. Pøedpokládám 1.'; +$lang['valid_dn_line_required'] = 'Je vy¾adován platný øádek s DN.'; +$lang['missing_uploaded_file'] = 'Soubor LDIF nebyl nalezen.'; +$lang['no_ldif_file_specified.'] = 'Neuvedli jste LDIF soubor. Opakujte prosím akci.'; +$lang['ldif_file_empty'] = 'Soubor LDIF je prázdný.'; +$lang['empty'] = 'prázdný'; +$lang['file'] = 'Soubor'; +$lang['number_bytes'] = '%s bajtù'; + +$lang['failed'] = 'selhal'; +$lang['ldif_parse_error'] = 'Chyba v souboru LDIF'; +$lang['ldif_could_not_add_object'] = 'Nelze pøidat objekt:'; +$lang['ldif_could_not_rename_object'] = 'Nelze pøejmenovat objekt:'; +$lang['ldif_could_not_delete_object'] = 'Nelze odstranit objekt:'; +$lang['ldif_could_not_modify_object'] = 'Nelze upravit objekt:'; +$lang['ldif_line_number'] = 'Èíslo øádku:'; +$lang['ldif_line'] = 'Øádek:'; + +// Exports +$lang['export_format'] = 'Formát exportu'; +$lang['line_ends'] = 'Konce øádkù'; +$lang['must_choose_export_format'] = 'Musíte zvolit exportní formát.'; +$lang['invalid_export_format'] = 'Neplatný exportní formát'; +$lang['no_exporter_found'] = 'Nebyla nalezena ¾ádná aplikace pro export.'; +$lang['error_performing_search'] = 'Bìhem vyhledávání do¹lo k chybì.'; +$lang['showing_results_x_through_y'] = 'Výsledky od %s do %s.'; +$lang['searching'] = 'Vyhledávám...'; +$lang['size_limit_exceeded'] = 'Byl pøekroèen limitní parametr pro vyhledávání.'; +$lang['entry'] = 'Objekt'; +$lang['ldif_export_for_dn'] = 'LDIF Export objektu: %s'; +$lang['generated_on_date'] = 'Generováno phpLDAPadminem dne %s'; +$lang['total_entries'] = 'Celkem objektù'; +$lang['dsml_export_for_dn'] = 'DSLM Export objektu: %s'; + +// logins +$lang['could_not_find_user'] = 'Nelze nalézt u¾ivatele "%s"'; +$lang['password_blank'] = 'Nezadali jste u¾ivatelské heslo.'; +$lang['login_cancelled'] = 'Pøihla¹ování zru¹eno.'; +$lang['no_one_logged_in'] = 'Nikdo není pøihlá¹en k tomuto serveru.'; +$lang['could_not_logout'] = 'Nelze se odhlásit.'; +$lang['unknown_auth_type'] = 'Neznámý auth_type: %s'; +$lang['logged_out_successfully'] = 'Odhlá¹ení od serveru %s probìhlo úspì¹nì.'; +$lang['authenticate_to_server'] = 'Ovìøení vùèi serveru %s'; +$lang['warning_this_web_connection_is_unencrypted'] = 'Upozornìní: Toto spojení není ¹ifrováné.'; +$lang['not_using_https'] = 'Nepøipojujete se pomocí \'https\'. Prohlí¾eè ode¹le Va¹e pøihlá¹ení v ne¹ifrované podobì.'; +$lang['login_dn'] = 'Pøihla¹ovací DN'; +$lang['user_name'] = 'U¾ivatel'; +$lang['password'] = 'Heslo'; +$lang['authenticate'] = 'Pøihlásit'; + +// Entry browser +$lang['entry_chooser_title'] = 'Zvolit objekt'; + +// Index page +$lang['need_to_configure'] = 'Nejprve je tøeba phpLDAPadmin nakonfigurovat. Toho docílíte upravou souboru \'config.php\'. Ukázková konfigurace je k nalezení v souboru \'config.php.example\''; + +// Mass deletes +$lang['no_deletes_in_read_only'] = 'Mazání je v re¾imu "jen pro ètení" zakázáno.'; +$lang['error_calling_mass_delete'] = 'Chyba pøi volání mass_delete.php. V POSTu chybí promìnná mass_delete.'; +$lang['mass_delete_not_array'] = 'mass_delete v POSTu není pole.'; +$lang['mass_delete_not_enabled'] = 'Hromadý výmaz není umo¾nìn. Mù¾ete ho povolit v souboru config.php.'; +$lang['mass_deleting'] = 'Hromadný výmaz'; +$lang['mass_delete_progress'] = 'Prùbìh odstraòování na serveru "%s"'; +$lang['malformed_mass_delete_array'] = 'Zdeformované pole mass_delete.'; +$lang['no_entries_to_delete'] = 'Nevybrali jste ¾ádné objekty k odstranìní.'; +$lang['deleting_dn'] = 'Odstraòuji %s'; +$lang['total_entries_failed'] = '%s z %s objektù se nepodaøilo odstranit.'; +$lang['all_entries_successful'] = 'V¹echny objekty byly úspì¹nì odstranìny.'; +$lang['confirm_mass_delete'] = 'Potvïte hromadný výmaz v poètu %s objektù na serveru %s'; +$lang['yes_delete'] = 'Ano, odstranit!'; + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'Nelze pøejmenovat objekt, který má potomky. Toto se napøíklad vztahuje na v¹echny objekty, které nejsou typu "list".'; +$lang['no_rdn_change'] = 'Nezmìnili jste RDN'; +$lang['invalid_rdn'] = 'Neplatná hodnota RDN'; +$lang['could_not_rename'] = 'Objekt nelze pøejmenovat'; + +?> diff --git a/lang/de.php b/lang/de.php index be2d388..474794e 100644 --- a/lang/de.php +++ b/lang/de.php @@ -4,173 +4,282 @@ * Übersetzung von Marius Rieder * Uwe Ebel * Modifikationen von Dieter Kluenter + * + * + * $Header: /cvsroot/phpldapadmin/phpldapadmin/lang/de.php,v 1.25 2004/07/20 19:47:32 i18phpldapadmin Exp $ + * Update auf CVS-Version von en.php 1.79 + * Verwendete CVS-Version von en.php 1.65 */ // Search form $lang['simple_search_form_str'] = 'Einfache Suche';//'Simple Search Form'; $lang['advanced_search_form_str'] = 'Experten Suche';//'Advanced Search Form'; $lang['server'] = 'Server';//'Server'; -$lang['search_for_entries_whose'] = 'Suche nach Einträgen die';//'Search for entries whose'; +$lang['search_for_entries_whose'] = 'Suche nach Einträgen die';//'Search for entries whose'; $lang['base_dn'] = 'Base DN';//'Base DN'; $lang['search_scope'] = 'Suchbereich';//'Search Scope'; -$lang['search_ filter'] = 'Suchfilter';//'Search Filter'; +//$lang['search_ filter'] = 'Suchfilter';//'Search Filter'; $lang['show_attributes'] = 'Zeige Attribute';//'Show Attributtes'; $lang['Search'] = 'Suchen';//'Search'; $lang['equals'] = 'gleich';//'equals'; -$lang['starts_with'] = 'beginnt mit';//'starts with'; -$lang['contains'] = 'enthält';//'contains'; -$lang['ends_with'] = 'endet mit';//'ends with'; -$lang['sounds_like'] = 'änlich wie';//'sounds like'; +//$lang['starts_with'] = 'beginnt mit';//'starts with'; +$lang['contains'] = 'enthält';//'contains'; +//$lang['ends_with'] = 'endet mit';//'ends with'; +//$lang['sounds_like'] = 'ähnlich wie';//'sounds like'; +$lang['predefined_search_str'] = 'oder ein von dieser Liste auswählen';//'or select a predefined search'; +$lang['predefined_searches'] = 'Vordefinierte Suche';//'Predefined Searches'; +$lang['no_predefined_queries'] = 'Keine Abfragen sind in der config.php definiert';// 'No queries have been defined in config.php.'; +$lang['export_results'] = 'Ergebnisse exportieren';// 'export results'; +$lang['unrecoginzed_search_result_format'] = 'Das Suchergebnisformat ist nicht erkennbar: %s';//'Unrecognized search result format: %s'; +$lang['format'] = 'Format';// 'Format'; +$lang['list'] = 'Liste';// 'list'; +$lang['table'] = 'Tabelle';// 'table'; +$lang['bad_search_display'] = 'Die config.php gibt einen falsche Wert für $default_search_display: %s vor. Bitte in der Konfiguration korrigieren.';//'Your config.php specifies an invalid value for $default_search_display: %s. Please fix it'; + + // Tree browser -$lang['request_new_feature'] = 'Anfragen von neuen Möglichkeiten';//'Request a new feature'; -$lang['see_open_requests'] = 'Siehe offene Anfragen';//'see open requests'; +$lang['request_new_feature'] = 'Anfragen von neuen Möglichkeiten';//'Request a new feature'; +//$lang['see_open_requests'] = 'Siehe offene Anfragen';//'see open requests'; $lang['report_bug'] = 'Einen Fehler berichten';//'Report a bug'; -$lang['see_open_bugs'] = 'Siehe offene Fehler';//'see open bugs'; +//$lang['see_open_bugs'] = 'Siehe offene Fehler';//'see open bugs'; $lang['schema'] = 'Schema';//'schema'; $lang['search'] = 'suche';//'search'; $lang['refresh'] = 'aktualisieren';//'refresh'; -$lang['create'] = 'neu';//'create'; +$lang['create'] = 'Erstellen';//'create'; $lang['info'] = 'Info';//'info'; $lang['import'] = 'Import';//'import'; $lang['logout'] = 'abmelden';//'logout'; $lang['create_new'] = 'Neuen Eintrag erzeugen';//'Create New'; -$lang['view_schema_for'] = 'Zeige Schema für';//'View schema for'; -$lang['refresh_expanded_containers'] = 'Aktualisiere alle geöffneten Container von';//'Refresh all expanded containers for'; +$lang['new'] = 'Neu';//'new'; +$lang['view_schema_for'] = 'Zeige Schema für';//'View schema for'; +$lang['refresh_expanded_containers'] = 'Aktualisiere alle geöffneten Container von';//'Refresh all expanded containers for'; $lang['create_new_entry_on'] = 'Erzeuge einen neuen Eintrag auf';//'Create a new entry on'; $lang['view_server_info'] = 'Zeige Server Informationen';//'View server-supplied information'; -$lang['import_from_ldif'] = 'Importiere Einträge von einer LDIF-Datei';//'Import entries from an LDIF file'; +$lang['import_from_ldif'] = 'Importiere Einträge von einer LDIF-Datei';//'Import entries from an LDIF file'; $lang['logout_of_this_server'] = 'Von diesem Server abmelden';//'Logout of this server'; $lang['logged_in_as'] = 'Angemeldet als: ';//'Logged in as: '; $lang['read_only'] = 'nur lesen';//'read only'; +$lang['read_only_tooltip'] = 'Diese Attribut wurde vom phpLDAPadmin-Adminstrator als nur lesend markiert.';//This attribute has been flagged as read only by the phpLDAPadmin administrator'; $lang['could_not_determine_root'] = 'Konnte die Basis ihres LDAP Verzeichnises nicht ermitteln';//'Could not determin the root of your LDAP tree.'; $lang['ldap_refuses_to_give_root'] = 'Es scheint das ihr LDAP Server nicht dazu konfiguriert wurde seine Basis bekanntzugeben';//'It appears that the LDAP server has been configured to not reveal its root.'; $lang['please_specify_in_config'] = 'Bitte in config.php angeben';//'Please specify it in config.php'; $lang['create_new_entry_in'] = 'Neuen Eintrag erzeugen auf';//'Create a new entry in'; $lang['login_link'] = 'Anmelden...';//'Login...'; +$lang['login'] = 'Anmelden';//'login'; // Entry display -$lang['delete_this_entry'] = 'Diesen Eintrag löschen';//'Delete this entry'; -$lang['delete_this_entry_tooltip'] = 'F¨r diese Entscheidung wird nochmals nachgefragt.';//'You will be prompted to confirm this decision'; +$lang['delete_this_entry'] = 'Diesen Eintrag löschen';//'Delete this entry'; +$lang['delete_this_entry_tooltip'] = 'Für diese Entscheidung wird nochmals nachgefragt.';//'You will be prompted to confirm this decision'; $lang['copy_this_entry'] = 'Diesen Eintrag kopieren';//'Copy this entry'; $lang['copy_this_entry_tooltip'] = 'Kopiere diese Object an eine anderen Ort: ein neuer DN oder einen anderen Server.';//'Copy this object to another location, a new DN, or another server'; -$lang['export_to_ldif'] = 'Exportieren nach LDIF';//'Export to LDIF'; -$lang['export_to_ldif_tooltip'] = 'Speichere einen LDIF-Abzug diese Objektes';//'Save an LDIF dump of this object'; -$lang['export_subtree_to_ldif_tooltip'] = 'Speicher eine LDIF-Abzug ab diesem Objekt und alle seine Untereinträge';//'Save an LDIF dump of this object and all of its children'; -$lang['export_subtree_to_ldif'] = 'Export Unterbaum nach LDIF';//'Export subtree to LDIF'; -$lang['export_to_ldif_mac'] = 'Zeilenende für Macintosh';//'Macintosh style line ends'; -$lang['export_to_ldif_win'] = 'Zeilenende für Windows';//'Windows style line ends'; -$lang['export_to_ldif_unix'] = 'Zeilenende für Unix';//'Unix style line ends'; +$lang['export'] = 'Exportieren';//'Export to LDIF'; +$lang['export_lcase'] = 'exportieren';//'export'; +$lang['export_tooltip'] = 'Speichere einen Abzug diese Objektes';//'Save an LDIF dump of this object'; +$lang['export_subtree_tooltip'] = 'Speicher eine Abzug ab diesem Objekt und alle seine Untereinträge';//'Save an LDIF dump of this object and all of its children'; +$lang['export_subtree'] = 'Export Unterbaum nach LDIF';//'Export subtree to LDIF'; +//$lang['export_mac'] = 'Zeilenende für Macintosh';//'Macintosh style line ends'; +//$lang['export_win'] = 'Zeilenende für Windows';//'Windows style line ends'; +//$lang['export_unix'] = 'Zeilenende für Unix';//'Unix style line ends'; $lang['create_a_child_entry'] = 'Erzeuge einen Untereintrag';//'Create a child entry'; -$lang['add_a_jpeg_photo'] = 'Ein JPEG-Foto hinzufügen';//'Add a jpegPhoto'; +//$lang['add_a_jpeg_photo'] = 'Ein JPEG-Foto hinzufügen';//'Add a jpegPhoto'; $lang['rename_entry'] = 'Eintrag umbenennen';//'Rename Entry'; $lang['rename'] = 'Umbenennen';//'Rename'; -$lang['add'] = 'Hinzufügen';//'Add'; +$lang['add'] = 'Hinzufügen';//'Add'; $lang['view'] = 'Ansehen';//'View'; -$lang['add_new_attribute'] = 'Neues Attribut hinzufügen';//'Add New Attribute'; -$lang['add_new_attribute_tooltip'] = 'Füge ein neues Attribut/Wert zu diesem Eintrag hinzu';// 'Add a new attribute/value to this entry'; -$lang['internal_attributes'] = 'Interne Attribute';//'Internal Attributes'; +$lang['view_one_child'] = 'Zeige einen Untereintrag';//'View 1 child'; +$lang['view_children'] = 'Zeige %s Untereinträge';//'View %s children'; +$lang['add_new_attribute'] = 'Neues Attribut hinzufügen';//'Add New Attribute'; +// DELETED $lang['add_new_attribute_tooltip'] = 'Füge ein neues Attribut/Wert zu diesem Eintrag hinzu';// 'Add a new attribute/value to this entry'; +$lang['add_new_objectclass'] = 'Neue ObjectClass hinzufügen';//'Add new ObjectClass'; +//$lang['internal_attributes'] = 'Interne Attribute';//'Internal Attributes'; $lang['hide_internal_attrs'] = 'Verdecke interne Attribute';//'Hide internal attributes'; $lang['show_internal_attrs'] = 'Zeige interne Attribute';//'Show internal attributes'; -$lang['internal_attrs_tooltip'] = 'Attribute werden automatisch vom System erzeugt.';//'Attributes set automatically by the system'; -$lang['entry_attributes'] = 'Attribute des Eintrages';//'Entry Attributes'; -$lang['attr_name_tooltip'] = 'Klicken sie um die Schemadefinition für den Attributtyp \'%s\' anzuzeigen.';//'Click to view the schema defintion for attribute type \'%s\''; -$lang['click_to_display'] = 'Klicken zum Ansehen';//'click to display'; -$lang['hidden'] = 'verdeckt';//'hidden'; +//$lang['internal_attrs_tooltip'] = 'Attribute werden automatisch vom System erzeugt.';//'Attributes set automatically by the system'; +//$lang['entry_attributes'] = 'Attribute des Eintrages';//'Entry Attributes'; +$lang['attr_name_tooltip'] = 'Klicken sie um die Schemadefinition für den Attributtyp "%s" anzuzeigen.';//'Click to view the schema defintion for attribute type \'%s\''; +//$lang['click_to_display'] = 'Klicken zum Ansehen';//'click to display'; +//$lang['hidden'] = 'verdeckt';//'hidden'; $lang['none'] = 'Keine';//'none'; -$lang['save_changes'] = 'Änderungen speichern';//'Save Changes'; -$lang['add_value'] = 'Wert hinzufügen';//'add value'; -$lang['add_value_tooltip'] = 'Füge einen weiteren Wert dem Attribut hinzu';//'Add an additional value to this attribute'; +$lang['no_internal_attributes'] = 'Keine internen Attribute.';//'No internal attributes'; +$lang['no_attributes'] = 'Dieser Eintrag hat keine Attribute.';//'This entry has no attributes'; +$lang['save_changes'] = 'Änderungen speichern';//'Save Changes'; +$lang['add_value'] = 'Wert hinzufügen';//'add value'; +$lang['add_value_tooltip'] = 'Füge einen weiteren Wert dem Attribut hinzu';//'Add an additional value to this attribute'; $lang['refresh_entry'] = 'Auffrischen';// 'Refresh'; $lang['refresh_this_entry'] = 'Aktualisiere den Entrag';//'Refresh this entry'; -$lang['delete_hint'] = 'Hinweis: Um ein Attribut zu löschen, leeren Sie den Inhalt des Wertes.';//'Hint: To delete an attribute, empty the text field and click save.'; -$lang['attr_schema_hint'] = 'Tipp:Um das Schema für ein Attribut anzusehen, genügt ein klick auf den Attributnamen';//'Hint: To view the schema for an attribute, click the attribute name.'; -$lang['attrs_modified'] = 'Einige Attribute (%s) wurden verändert und sind hervorgehoben.';//'Some attributes (%s) were modified and are highlighted below.'; -$lang['attr_modified'] = 'Ein Attribut (%s) wurde verändert und ist hervorgehoben.';//'An attribute (%s) was modified and is highlighted below.'; +$lang['delete_hint'] = 'Hinweis: Um ein Attribut zu löschen, leeren Sie den Inhalt des Wertes.';//'Hint: To delete an attribute, empty the text field and click save.'; +$lang['attr_schema_hint'] = 'Tipp:Um das Schema für ein Attribut anzusehen, genügt ein klick auf den Attributnamen';//'Hint: To view the schema for an attribute, click the attribute name.'; +$lang['attrs_modified'] = 'Einige Attribute (%s) wurden verändert und sind hervorgehoben.';//'Some attributes (%s) were modified and are highlighted below.'; +$lang['attr_modified'] = 'Ein Attribut (%s) wurde verändert und ist hervorgehoben.';//'An attribute (%s) was modified and is highlighted below.'; $lang['viewing_read_only'] = 'Zeige Eintrag im Nurlesemodus';//'Viewing entry in read-only mode.'; -$lang['change_entry_rdn'] = 'Ändere den RDN des Eintrages';//'Change this entry\'s RDN'; -$lang['no_new_attrs_available'] = 'Keine weiteren Attribute verfügbar für diesen Eintrag';//'no new attributes available for this entry'; -$lang['binary_value'] = 'Binärwert';//'Binary value'; -$lang['add_new_binary_attr'] = 'Neuen Binärwert hinzufügen';//'Add New Binary Attribute'; -$lang['add_new_binary_attr_tooltip'] = 'Füge einen neuen Binäwert (Attribut/Wert) aus einer Datei hinzu.';//'Add a new binary attribute/value from a file'; -$lang['alias_for'] = 'Alias für';//'Alias for'; +//$lang['change_entry_rdn'] = 'Ändere den RDN des Eintrages';//'Change this entry\'s RDN'; +$lang['no_new_attrs_available'] = 'Keine weiteren Attribute verfügbar für diesen Eintrag';//'no new attributes available for this entry'; +$lang['no_new_binary_attrs_available'] = 'Keine weiteren Binären Attribute verfügbar für diesen Eintrag.';//'no new binary attributes available for this entry'; +$lang['binary_value'] = 'Binärwert';//'Binary value'; +$lang['add_new_binary_attr'] = 'Neuen Binärwert hinzufügen';//'Add New Binary Attribute'; +// DELETE $lang['add_new_binary_attr_tooltip'] = 'Füge einen neuen Binäwert (Attribut/Wert) aus einer Datei hinzu.';//'Add a new binary attribute/value from a file'; +$lang['alias_for'] = 'Alias für';//'Alias for'; +$lang['required_for'] = 'Notwendige Attribute für die Objektklasse(n) %s';//'Required attribute for objectClass(es) %s'; $lang['download_value'] = 'Wert herunterladen';//'download value'; -$lang['delete_attribute'] = 'Lösche Attribut';//'delete attribute'; +$lang['delete_attribute'] = 'Lösche Attribut';//'delete attribute'; $lang['true'] = 'Wahr';//'true'; $lang['false'] = 'Falsch';//'false'; $lang['none_remove_value'] = 'nichts, entferne den Wert';//?? //'none, remove value'; -$lang['really_delete_attribute'] = 'Lösche das Attribut wirklich';//'Really delete attribute'; +$lang['really_delete_attribute'] = 'Lösche das Attribut wirklich';//'Really delete attribute'; +$lang['add_new_value'] = 'Neuen Wert hinzufügen';//'Add New Value'; // Schema browser -$lang['the_following_objectclasses'] = 'Die folgenden Objektklassen werden vom LDAP-Server unterstützt.';//'The following objectClasses are supported by this LDAP server.'; -$lang['the_following_attributes'] = 'Die folgenden Attribute werden vom LDAP-Server unterstützt.';//'The following attributeTypes are supported by this LDAP server.'; -$lang['the_following_matching'] = 'Die folgenden Suchregeln werden vom LDAP-Server unterstützt.';//'The following matching rules are supported by this LDAP server.'; -$lang['the_following_syntaxes'] = 'Die folgenden Syntaxe werden vom LDAP-Server unterstützt.';//'The following syntaxes are supported by this LDAP server.'; +$lang['the_following_objectclasses'] = 'Die folgenden Objektklassen werden vom LDAP-Server unterstützt.';//'The following objectClasses are supported by this LDAP server.'; +$lang['the_following_attributes'] = 'Die folgenden Attribute werden vom LDAP-Server unterstützt.';//'The following attributeTypes are supported by this LDAP server.'; +$lang['the_following_matching'] = 'Die folgenden Suchregeln werden vom LDAP-Server unterstützt.';//'The following matching rules are supported by this LDAP server.'; +$lang['the_following_syntaxes'] = 'Die folgenden Syntaxe werden vom LDAP-Server unterstützt.';//'The following syntaxes are supported by this LDAP server.'; +$lang['schema_retrieve_error_1']='Der Server unterstützt nicht vollständig das LDAP-Protokoll.';//'The server does not fully support the LDAP protocol.'; +$lang['schema_retrieve_error_2']='Die verwendete PHP-Version setzte keine korrekte LDAP-Abfrage ab.';//'Your version of PHP does not correctly perform the query.'; +$lang['schema_retrieve_error_3']='Oder phpLDAPadmin konnte nicht das Schema für den Server abfragen.';//'Or lastly, phpLDAPadmin doesn\'t know how to fetch the schema for your server.'; $lang['jump_to_objectclass'] = 'Gehe zur objectClass';//'Jump to an objectClass'; +$lang['view_schema_for_oclass'] = 'Zeige die Schemabeschreibung für diese Objektklasse';//'View the schema description for this objectClass'; $lang['jump_to_attr'] = 'Gehe zum Attribut';//'Jump to an attribute'; -$lang['schema_for_server'] = 'Schema für Server';//'Schema for server'; +$lang['jump_to_matching_rule'] = 'Gehe zur Treffer Regel'; // 'Jump to a matching rule'; + +$lang['schema_for_server'] = 'Schema für Server';//'Schema for server'; $lang['required_attrs'] = 'Notwendige Attribute';//'Required Attributes'; +$lang['required'] = 'notwendig';//'required'; $lang['optional_attrs'] = 'Optionale Attribute';//'Optional Attributes'; +$lang['optional_binary_attrs'] = 'Optinales Binärattribut';//'Optional Binary Attributes'; $lang['OID'] = 'OID';//'OID'; +$lang['aliases']='Pseudonym(e)';//'Aliases'; $lang['desc'] = 'Beschreibung';//'Description'; +$lang['no_description']='Keine Beschreibung';//'no description'; $lang['name'] = 'Name';//'Name'; +$lang['equality']='Gleichheit';// 'Equality'; $lang['is_obsolete'] = 'Diese objectClass ist veraltet';//'This objectClass is obsolete'; $lang['inherits'] = 'Abgeleitet von';//'Inherits'; +$lang['inherited_from']='abgeleitet von';//inherited from'; +$lang['parent_to'] = 'Knoten von';//'Parent to'; $lang['jump_to_this_oclass'] = 'Gehe zur objectClass Definition';//'Jump to this objectClass definition'; $lang['matching_rule_oid'] = 'Treffer-Regel OID';//'Matching Rule OID'; $lang['syntax_oid'] = 'Syntax OID';//'Syntax OID'; -$lang['not_applicable'] = 'keine Angabe';//'not applicable'; +$lang['not_applicable'] = 'nicht anwendbar';//'not applicable'; $lang['not_specified'] = 'nicht spezifiziert';//not specified'; +$lang['character']='Zeichen';//'character'; +$lang['characters']='Zeichen';//'characters'; +$lang['used_by_objectclasses']='Verwendet von den Objektklassen';//'Used by objectClasses'; +$lang['used_by_attributes']='Verwendet in den Attributen';//'Used by Attributes'; +$lang['oid']='OID'; // 'OID' +$lang['obsolete']='Veraltet';//'Obsolete'; +$lang['ordering']='Ordnung';//'Ordering'; +$lang['substring_rule']='Teilstring Regel';//'Substring Rule'; +$lang['single_valued']='Einzelner Wert';//'Single Valued'; +$lang['collective']='Sammlung';//'Collective'; +$lang['user_modification']='Benutzer Änderung';//'User Modification'; +$lang['usage']='Verwendung';//'Usage'; +$lang['maximum_length']='Maximale Grösse';//'Maximum Length'; +$lang['attribute_types']='Attribut Typen';//'Attribute Types'; +$lang['attributes']='Attribut Typen';//'Attributes Types'; +$lang['syntaxes']='Syntaxe';//'Syntaxes'; +$lang['objectclasses']='Objekt Klassen';//'objectClasses'; +$lang['matchingrules']='Treffer Regeln';//'Matching Rules'; +$lang['could_not_retrieve_schema_from']='Das Schema konnte nicht abgefragt werden. Betrifft die Einstellung des Servers:';//'Could not retrieve schema from'; +$lang['type']='Typ';// 'Type'; +$lang['no_such_schema_item'] = 'Kein Schema Eintrag für Element: %s';//'No such schema item: "%s"'; + // Deleting entries -$lang['entry_deleted_successfully'] = 'Der Eintrag \'%s\' wurde erfolgreich gelöscht.';//'Entry \'%s\' deleted successfully.'; +$lang['entry_deleted_successfully'] = 'Der Eintrag \'%s\' wurde erfolgreich gelöscht.';//'Entry \'%s\' deleted successfully.'; $lang['you_must_specify_a_dn'] = 'Ein DN muss angegeben werden.';//'You must specify a DN'; -$lang['could_not_delete_entry'] = 'Konnte den Eintrag nicht löschen: %s';//'Could not delete the entry: %s'; +$lang['could_not_delete_entry'] = 'Konnte den Eintrag nicht löschen: %s';//'Could not delete the entry: %s'; +$lang['no_such_entry'] = 'Keinen solchen Eintrag: %s';//'No such entry: %s'; +$lang['delete_dn'] = 'Löschen von %s';//'Delete %s'; +//$lang['permanently_delete_children'] = 'Ebenso dauerhaftes Löschen aller Untereinträge?';//'Permanently delete all children also?'; +$lang['entry_is_root_sub_tree'] = 'Dies ist ein Root-Eintrag und beinhaltet einen Unterbaum mit %s Einträgen.';//'This entry is the root of a sub-tree containing %s entries.'; +$lang['view_entries'] = 'Zeige Einträge';//'view entries'; +$lang['confirm_recursive_delete'] = 'phpLDAPadmin kann diesen Eintrag und die %s Untereinträge rekursiv löschen. Unten ist eine Liste der Einträge angegeben die von diesem Löschen betroffen wären. Sollen alle Einträge gelöscht werden?';//'phpLDAPadmin can recursively delete this entry and all %s of its children. See below for a list of all the entries that this action will delete. Do you want to do this?'; +$lang['confirm_recursive_delete_note'] = 'Hinweis: Dies ist sehr gefährlich und erfolgt auf eines Risiko. Die Ausführung kann nicht rückgängig gemacht werden. Dies betrifft ebenso Aliase, Referenzen und andere Dinge die zu Problemen führen können.';//'Note: this is potentially very dangerous and you do this at your own risk. This operation cannot be undone. Take into consideration aliases, referrals, and other things that may cause problems.'; +$lang['delete_all_x_objects'] = 'Löschen aller "%s" Objekte';//'Delete all %s objects'; +$lang['recursive_delete_progress'] = 'Rekursives Löschen in Arbeit';//'Recursive delete progress'; +$lang['entry_and_sub_tree_deleted_successfully'] = 'Erfolgreiches Löschen des Eintrages "%s" und dessen Unterbaums.';// 'Entry %s and sub-tree deleted successfully.'; +$lang['failed_to_delete_entry'] = 'Fehler beim Löschen des Eintrages %s.';//'Failed to delete entry %s'; + +// Deleting attributes +$lang['attr_is_read_only'] = 'Das Attribut "%s" ist in der phpLDAPadmin Konfiguration als nur lesend deklariert.';//'The attribute "%s" is flagged as read-only in the phpLDAPadmin configuration.'; +$lang['no_attr_specified'] = 'Kein Attributname angegeben.';//'No attribute name specified.'; +$lang['no_dn_specified'] = 'Kein DN angegeben.';//'No DN specified'; + +// Adding attributes +$lang['left_attr_blank'] = 'Der Wert des Attributes wurde leergelassen. Bitte zurück gehen und erneut versuchen.';//'You left the attribute value blank. Please go back and try again.'; +$lang['failed_to_add_attr'] = 'Fehler beim Hinzufügen des Attributes';//'Failed to add the attribute.'; +$lang['file_empty'] = 'Die ausgewählte Datei ist entweder nicht vorhanden oder leer. Bitte zurückgehen und nochmals versuchen.';//'The file you chose is either empty or does not exist. Please go back and try again.'; +$lang['invalid_file'] = 'Sicherheitsfehler: Die hochgeladene Datei kann bösartig sein.';//'Security error: The file being uploaded may be malicious.'; +$lang['warning_file_uploads_disabled'] = 'Die PHP-Konfiguration (php.ini) gestattet es nicht Dateien hochzuladen. Bitte die php.ini hierzu überprüfen.';//'Your PHP configuration has disabled file uploads. Please check php.ini before proceeding.'; +$lang['uploaded_file_too_big'] = 'Die hochgeladene Datei ist größer als die maximal erlaubte Datei aus der "php.ini". Bitte in der php.ini den Eintrag "upload_max_size" überprüfen.';//'The file you uploaded is too large. Please check php.ini, upload_max_size setting'; +$lang['uploaded_file_partial'] = 'Die auswählte Datei wurde nur unvollständig hochgeladen.';//'The file you selected was only partially uploaded, likley due to a network error.'; +$lang['max_file_size'] = 'Maximal Dateigröße ist: %s';//'Maximum file size: %s'; + +// Updating values +$lang['modification_successful'] = 'Änderung war erfolgreich!';//'Modification successful!'; +$lang['change_password_new_login'] = 'Da das Passwort geändert wurde müssen Sie sich erneut einloggen.'; //'Since you changed your password, you must now login again with your new password.'; // Adding objectClass form -$lang['new_required_attrs'] = 'Neue benötigte Attribute';//'New Required Attributes'; -$lang['requires_to_add'] = 'Diese Aktion zwingt sie folgendes hinzuzufügen';//'This action requires you to add'; +$lang['new_required_attrs'] = 'Neue benötigte Attribute';//'New Required Attributes'; +$lang['requires_to_add'] = 'Diese Aktion zwingt sie folgendes hinzuzufügen';//'This action requires you to add'; $lang['new_attributes'] = 'neue Attribute';//'new attributes'; -$lang['new_required_attrs_instructions'] = 'Anleitung: Um diese objectClass hinzuzuf¨gen müssen sie ';//'Instructions: In order to add this objectClass to this entry, you must specify'; -$lang['that_this_oclass_requires'] = 'die von dieser objectClass benötigt werden. Sie können dies in diesem Formular machen.';//'that this objectClass requires. You can do so in this form.'; -$lang['add_oclass_and_attrs'] = 'ObjectClass und Attribute hinzufügen';//'Add ObjectClass and Attributes'; +$lang['new_required_attrs_instructions'] = 'Anleitung: Um diese objectClass hinzuzufügen müssen sie ';//'Instructions: In order to add this objectClass to this entry, you must specify'; +$lang['that_this_oclass_requires'] = 'die von dieser objectClass benötigt werden. Sie können dies in diesem Formular machen.';//'that this objectClass requires. You can do so in this form.'; +$lang['add_oclass_and_attrs'] = 'ObjectClass und Attribute hinzufügen';//'Add ObjectClass and Attributes'; // General -$lang['chooser_link_tooltip'] = 'Klicken um einen Eintrag (DN) grafisch auszuwählen.';//"Click to popup a dialog to select an entry (DN) graphically'; -$lang['no_updates_in_read_only_mode'] = 'Sie können keine Aktualisierungen durchführen während der Server sich im \'nur lese\'-modus befindet';//'You cannot perform updates while server is in read-only mode'; -$lang['bad_server_id'] = 'Ungültige Server ID';//'Bad server id'; -$lang['not_enough_login_info'] = 'Nicht genügend Angaben zur Anmeldung am Server. Bitte überprüfen sie ihre Konfiguration';//'Not enough information to login to server. Please check your configuration.'; +$lang['chooser_link_tooltip'] = 'Klicken um einen Eintrag (DN) grafisch auszuwählen.';//"Click to popup a dialog to select an entry (DN) graphically'; +$lang['no_updates_in_read_only_mode'] = 'Sie können keine Aktualisierungen durchführen während der Server sich im \'nur lese\'-modus befindet';//'You cannot perform updates while server is in read-only mode'; +$lang['bad_server_id'] = 'Ungültige Server ID';//'Bad server id'; +$lang['not_enough_login_info'] = 'Nicht genügend Angaben zur Anmeldung am Server. Bitte überprüfen sie ihre Konfiguration';//'Not enough information to login to server. Please check your configuration.'; $lang['could_not_connect'] = 'Konnte keine Verbindung zum LDAP Server herstellen.';//'Could not connect to LDAP server.'; -$lang['could_not_perform_ldap_mod_add'] = 'Kann keine \'ldap_mod_add\' Operationen durchführen.';//'Could not perform ldap_mod_add operation.'; -$lang['bad_server_id_underline'] = 'Ungültige Server ID:';//"Bad server_id: '; +$lang['could_not_connect_to_host_on_port'] = 'Konnte keine Verbindung zum Server "%s" am Port "%s" erstellen.';//'Could not connect to "%s" on port "%s"'; +$lang['could_not_perform_ldap_mod_add'] = 'Kann keine \'ldap_mod_add\' Operationen durchführen.';//'Could not perform ldap_mod_add operation.'; +$lang['bad_server_id_underline'] = 'Ungültige Server ID:';//"Bad server_id: '; $lang['success'] = 'Erfolgreich';//"Success'; $lang['server_colon_pare'] = 'Server';//"Server: '; $lang['look_in'] = 'Sehe nach in:';//"Looking in: '; $lang['missing_server_id_in_query_string'] = 'Keine Server ID in der Anfrage angegeben';//'No server ID specified in query string!'; $lang['missing_dn_in_query_string'] = 'Kein DN in der Anfrage angegeben';//'No DN specified in query string!'; -$lang['back_up_p'] = 'Backup...';//"Back Up...'; -$lang['no_entries'] = 'Keine Einträge';//"no entries'; +$lang['back_up_p'] = 'Eine Ebene höher...';//"Back Up...'; +$lang['no_entries'] = 'Keine Einträge';//"no entries'; $lang['not_logged_in'] = 'Nicht eingeloggt';//"Not logged in'; $lang['could_not_det_base_dn'] = 'Konnten Basis-DN nicht ermitteln.';//"Could not determine base DN'; +$lang['reasons_for_error']='Dies kann mehrere Gründe haben. Die häufigsten sind:';//'This could happen for several reasons, the most probable of which are:'; +$lang['please_report_this_as_a_bug']='Bitte senden Sie dies als einen Fehlerbericht.';//'Please report this as a bug.'; +$lang['yes']='Ja';//'Yes' +$lang['no']='Nein';//'No' +$lang['go']='Weiter';//'go' +$lang['delete']='Löschen';//'Delete'; +$lang['back']='Zurück';//'Back'; +$lang['object']='Objekt';//'object'; +//$lang['objects']='Objekte';//'objects'; +$lang['delete_all']='Lösche alle';//'Delete all'; +$lang['url_bug_report']=''+$lang['url_bug_report'];//'https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; +$lang['hint'] = 'Hinweis';//'hint'; +$lang['bug'] = 'Programmfehler';//'bug'; +$lang['warning'] = 'Warnung';//'warning'; +$lang['light'] = 'light'; // the word 'light' from 'light bulb' +$lang['proceed_gt'] = 'Weiter';//'Proceed >>'; // Add value form -$lang['add_new'] = 'Neu hinzufügen';//'Add new'; +$lang['add_new'] = 'Neu hinzufügen';//'Add new'; $lang['value_to'] = 'Wert auf';//'value to'; -$lang['server'] = 'Server';//'Server'; //also used in copy_form.php $lang['distinguished_name'] = 'Distinguished Name (eindeutiger Name)';// 'Distinguished Name'; $lang['current_list_of'] = 'Aktuelle Liste von';//'Current list of'; $lang['values_for_attribute'] = 'Werte des Attributes';//'values for attribute'; -$lang['inappropriate_matching_note'] = 'Info: Sie werden einen "inappropriate matching" Fehler erhalten, falls sie nicht
'; //'Note: You will get an "inappropriate matching" error if you have not
' . - 'eine EQUALITY Regel für dieses Attribut auf ihren LDAP Server eingerichtet haben.';//'setup an EQUALITY rule on your LDAP server for this attribute.'; -$lang['enter_value_to_add'] = 'Geben sie den Wert ein den sie hinzufügen möchten:';//'Enter the value you would like to add:'; -$lang['new_required_attrs_note'] = 'Info: Sie werden gegebenenfalles gezwungen sein neue Attribute hinzuzufügen.';//'Note: you may be required to enter new attributes
that this objectClass requires.'; +$lang['inappropriate_matching_note'] = 'Info: Sie werden einen "inappropriate matching" Fehler erhalten, falls sie nicht'; //'Note: You will get an "inappropriate matching" error if you have not
' . + ' eine "EQUALITY" Regel für dieses Attribut auf ihren LDAP Server eingerichtet haben.';//'setup an EQUALITY rule on your LDAP server for this attribute.'; +$lang['enter_value_to_add'] = 'Geben sie den Wert ein den sie hinzufügen möchten:';//'Enter the value you would like to add:'; +$lang['new_required_attrs_note'] = 'Info: Sie werden gegebenenfalles gezwungen sein neue Attribute hinzuzufügen.';//'Note: you may be required to enter new attributes
that this objectClass requires.'; $lang['syntax'] = 'Syntax';//'Syntax'; //Copy.php -$lang['copy_server_read_only'] = 'Sie können keine Aktualisierungen durchführen während der Server sich im \'nur lese\'-modus befindet';//"You cannot perform updates while server is in read-only mode'; +$lang['copy_server_read_only'] = 'Sie können keine Aktualisierungen durchführen während der Server sich im \'nur lese\'-modus befindet';//"You cannot perform updates while server is in read-only mode'; $lang['copy_dest_dn_blank'] = 'Sie haben kein Ziel DN angegeben';//"You left the destination DN blank.'; $lang['copy_dest_already_exists'] = 'Der Zieleintrag (%s) existiert bereits.';//"The destination entry (%s) already exists.'; $lang['copy_dest_container_does_not_exist'] = 'Der Zielcontainer (%s) existiert nicht.';//'The destination container (%s) does not exist.'; @@ -186,6 +295,15 @@ $lang['copy_failed'] = 'Kopieren des DN fehlgeschlagen: ';//'Failed to copy DN: //edit.php $lang['missing_template_file'] = 'Warnung: Template Datei nicht gefunden';//'Warning: missing template file, '; $lang['using_default'] = 'Standardeinstellung verwenden';//'Using default.'; +$lang['template'] = 'Vorlage';//'Template'; +$lang['must_choose_template'] = 'Eine Vorlage muss ausgewählt sein';//'You must choose a template'; +$lang['invalid_template'] = 'Die Vorlage "%s" ist ungültig';// '%s is an invalid template'; +$lang['using_template'] = 'Verwende Vorlage';//'using template'; +$lang['go_to_dn'] = 'Gehe zu %s';//'Go to %s'; +$lang['structural_object_class_cannot_remove'] = 'Dies ist eine strukturelle Objektklasse und kann nicht entfernt werden.';//'This is a stuctural ObjectClass and cannot be removed.'; +$lang['structural'] = 'Strukturell';//'stuctural'; + + //copy_form.php $lang['copyf_title_copy'] = 'Kopiere';//"Copy '; @@ -195,111 +313,144 @@ $lang['copyf_dest_dn_tooltip'] = 'Der komplette DN des Eintrages der beim Kopier $lang['copyf_dest_server'] = 'Zielserver';//"Destination Server'; $lang['copyf_note'] = 'Info: Kopieren zwischen unterschiedlichen Servern funktioniert nur wenn keine Unvereinbarkeiten im Schema auftreten';//"Note: Copying between different servers only works if there are no schema violations'; $lang['copyf_recursive_copy'] = 'Rekursiv kopiert auch alle Unterobjekte';//"Recursively copy all children of this object as well.'; +$lang['recursive_copy'] = 'Rekursives kopieren';//'Recursive copy'; +$lang['filter'] = 'Filter';//'Filter'; +$lang['filter_tooltip'] = 'Bei der Ausfürung des rekursiven Kopierens werden nur die Einträge verwendet, die mit dem Filter übereinstimmen';// 'When performing a recursive copy, only copy those entries which match this filter'; + //create.php -$lang['create_required_attribute'] = 'Fehler, sie haben einen Wert für ein benötigtes Attribut frei gelassen.';//"Error, you left the value blank for required attribute '; -$lang['create_redirecting'] = 'Weiterleitung';//"Redirecting'; -$lang['create_here'] = 'hier';//"here'; -$lang['create_could_not_add'] = 'Konnte das Objekt dem LDAP-Server nicht hinzufügen.';//"Could not add the object to the LDAP server.'; +$lang['create_required_attribute'] = 'Fehler, sie haben einen Wert für ein benötigtes Attribut frei gelassen.';//"Error, you left the value blank for required attribute '; +$lang['redirecting'] = 'Weiterleitung';//"Redirecting'; moved from create_redirection -> redirection +$lang['here'] = 'hier';//"here'; renamed vom create_here -> here +$lang['create_could_not_add'] = 'Konnte das Objekt dem LDAP-Server nicht hinzufügen.';//"Could not add the object to the LDAP server.'; //create_form.php $lang['createf_create_object'] = 'Erzeuge einen neuen Eintag';//"Create Object'; -$lang['createf_choose_temp'] = 'Vorlage wählen';//"Choose a template'; -$lang['createf_select_temp'] = 'Wählen sie eine Vorlage für das Objekt';//"Select a template for the creation process'; +$lang['createf_choose_temp'] = 'Vorlage wählen';//"Choose a template'; +$lang['createf_select_temp'] = 'Wählen sie eine Vorlage für das Objekt';//"Select a template for the creation process'; $lang['createf_proceed'] = 'Weiter';//"Proceed >>'; +$lang['rdn_field_blank'] = 'Das RDN Feld wurde leer gelassen.';//'You left the RDN field blank.'; +$lang['container_does_not_exist'] = 'Der angegenben Eintrag (%s) ist nicht vorhanden. Bitte erneut versuchen.';// 'The container you specified (%s) does not exist. Please try again.'; +$lang['no_objectclasses_selected'] = 'Es wurde kein ObjectClasses für diesen Eintrag ausgewählt. Bitte zurückgehen und korrigieren';//'You did not select any ObjectClasses for this object. Please go back and do so.'; +$lang['hint_structural_oclass'] = 'Hinweis: Es muss mindestens ein Strukturelle ObjectClass ausgewählt sein.';//'Hint: You must choose at least one structural objectClass'; //creation_template.php $lang['ctemplate_on_server'] = 'Auf dem Server';//"On server'; $lang['ctemplate_no_template'] = 'Keine Vorlage angegeben in den POST Variabeln';//"No template specified in POST variables.'; -$lang['ctemplate_config_handler'] = 'Ihre Konfiguration spezifiziert für diese Vorlage die Routine';//"Your config specifies a handler of'; +$lang['ctemplate_config_handler'] = 'Ihre Konfiguration spezifiziert für diese Vorlage die Routine';//"Your config specifies a handler of'; $lang['ctemplate_handler_does_not_exist'] = '. Diese Routine existiert nicht im \'templates/creation\' Verzeichnis';//"for this template. But, this handler does not exist in the 'templates/creation' directory.'; +$lang['create_step1'] = 'Schritt 1 von 2: Name und Objektklasse(n)';//'Step 1 of 2: Name and ObjectClass(es)'; +$lang['create_step2'] = 'Schritt 2 von 2: Bestimmen der Attribute und Werte';//'Step 2 of 2: Specify attributes and values'; +$lang['relative_distinguished_name'] = 'Relativer Distingushed Name';//'Relative Distinguished Name'; +$lang['rdn'] = 'RDN';//'RDN'; +$lang['rdn_example'] = '(Beispiel: cn=MeineNeuePerson)';//'(example: cn=MyNewPerson)'; +$lang['container'] = 'Behälter';//'Container'; + // search.php -$lang['you_have_not_logged_into_server'] = 'Sie haben sich am ausgewählten Server nicht angemeldet. Sie k&oouml;nnen keine Suche durchführen.';//'You have not logged into the selected server yet, so you cannot perform searches on it.'; +$lang['you_have_not_logged_into_server'] = 'Sie haben sich am ausgewählten Server nicht angemeldet. Sie können keine Suche durchführen.';//'You have not logged into the selected server yet, so you cannot perform searches on it.'; $lang['click_to_go_to_login_form'] = 'Klicken sie hier um zur Anmeldeseite zu gelangen';//'Click here to go to the login form'; $lang['unrecognized_criteria_option'] = 'Unbekannte Option';// 'Unrecognized criteria option: '; -$lang['if_you_want_to_add_criteria'] = 'Falls eigene Auswahlkriterien hinzugefügt werden sollen, muss \'search.php\' editiert werden';//'If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting.'; -$lang['entries_found'] = 'Gefundene Einträge: ';//'Entries found: '; +$lang['if_you_want_to_add_criteria'] = 'Falls eigene Auswahlkriterien hinzugefügt werden sollen, muss \'search.php\' editiert werden';//'If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting.'; +$lang['entries_found'] = 'Gefundene Einträge: ';//'Entries found: '; $lang['filter_performed'] = 'Angewanter Filter: ';//'Filter performed: '; -$lang['search_duration'] = 'Suche durch phpLDAPadmin ausgeführt in';//'Search performed by phpLDAPadmin in'; +$lang['search_duration'] = 'Suche durch phpLDAPadmin ausgeführt in';//'Search performed by phpLDAPadmin in'; $lang['seconds'] = 'Sekunden';//'seconds'; // search_form_advanced.php $lang['scope_in_which_to_search'] = 'Bereich der durchsucht wird.';//'The scope in which to search'; -$lang['scope_sub'] = 'Sub (Suchbase und alle Unterverzeichnisebenen)';//'Sub (entire subtree)'; +$lang['scope_sub'] = 'Sub (Suchbasis und alle Unterverzeichnisebenen)';//'Sub (entire subtree)'; $lang['scope_one'] = 'One (Suchbasis und eine Unterverzeichnisebene)';//'One (one level beneath base)'; $lang['scope_base'] = 'Base (Nur Suchbasis)';//'Base (base dn only)'; $lang['standard_ldap_search_filter'] = 'Standard LDAP Suchfilter. Bsp.: (&(sn=Smith)(givenname=David))';//'Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))'; $lang['search_filter'] = 'Suchfilter';//'Search Filter'; $lang['list_of_attrs_to_display_in_results'] = 'Kommaseparierte Liste der anzuzeigenden Attribute.';//'A list of attributes to display in the results (comma-separated)'; -$lang['show_attributes'] = 'Zeige Attribute';//'Show Attributes'; // search_form_simple.php -$lang['search_for_entries_whose'] = 'Suche nach Einträgen welche:';//'Search for entries whose:'; -$lang['equals'] = 'entspricht';//'equals'; $lang['starts with'] = 'beginnt mit';//'starts with'; -$lang['contains'] = 'enthält';//'contains'; $lang['ends with'] = 'endet auf';//'ends with'; $lang['sounds like'] = 'klingt wie';//'sounds like'; + // server_info.php $lang['could_not_fetch_server_info'] = 'Konnte keine LDAP Informationen vom Server empfangen';//'Could not retrieve LDAP information from the server'; -$lang['server_info_for'] = 'Serverinformationen für: ';//'Server info for: '; -$lang['server_reports_following'] = 'Der Server meldete die folgenden Informationen über sich';//'Server reports the following information about itself'; +$lang['server_info_for'] = 'Serverinformationen für: ';//'Server info for: '; +$lang['server_reports_following'] = 'Der Server meldete die folgenden Informationen über sich';//'Server reports the following information about itself'; $lang['nothing_to_report'] = 'Der Server hat keine Informationen gemeldet';//'This server has nothing to report.'; //update.php -$lang['update_array_malformed'] = 'Das \'update_array\' wird falsch dargestellt. Dies könnte ein phpLDAPadmin Fehler sein. Bitte Berichten sie uns davon.';//'update_array is malformed. This might be a phpLDAPadmin bug. Please report it.'; -$lang['could_not_perform_ldap_modify'] = 'Konnte die \'ldap_modify\' Operation nicht ausführen.';//'Could not perform ldap_modify operation.'; +$lang['update_array_malformed'] = 'Das "update_array" wird falsch dargestellt. Dies könnte ein phpLDAPadmin Fehler sein. Bitte Berichten sie uns davon.';//'update_array is malformed. This might be a phpLDAPadmin bug. Please report it.'; +$lang['could_not_perform_ldap_modify'] = 'Konnte die \'ldap_modify\' Operation nicht ausführen.';//'Could not perform ldap_modify operation.'; // update_confirm.php -$lang['do_you_want_to_make_these_changes'] = 'Wollen sie diese Änderungen übernehmen?';//'Do you want to make these changes?'; +$lang['do_you_want_to_make_these_changes'] = 'Wollen sie diese Änderungen übernehmen?';//'Do you want to make these changes?'; $lang['attribute'] = 'Attribute';//'Attribute'; $lang['old_value'] = 'Alter Wert';//'Old Value'; $lang['new_value'] = 'Neuer Wert';//'New Value'; -$lang['attr_deleted'] = '[Wert gelöscht]';//'[attribute deleted]'; +$lang['attr_deleted'] = '[Wert gelöscht]';//'[attribute deleted]'; $lang['commit'] = 'Anwenden';//'Commit'; -$lang['cancel'] = 'Verwerfen';//'Cancel'; -$lang['you_made_no_changes'] = 'Sie haben keine Änderungen vorgenommen.';//'You made no changes'; -$lang['go_back'] = 'Zurück';//'Go back'; +$lang['cancel'] = 'Abbruch';//'Cancel'; +$lang['you_made_no_changes'] = 'Sie haben keine Änderungen vorgenommen.';//'You made no changes'; +$lang['go_back'] = 'Zurück';//'Go back'; // welcome.php -$lang['welcome_note'] = 'Benützen sie das Menu auf der linken Seite zur Navigation.';//'Use the menu to the left to navigate'; +$lang['welcome_note'] = 'Benutzen sie das Menu auf der linken Seite zur Navigation.';//'Use the menu to the left to navigate'; $lang['credits'] = 'Vorspann';//'Credits'; -$lang['changelog'] = 'Änderungsdatei';//'ChangeLog'; -$lang['documentation'] = 'Dokumentation';// 'Documentation'; +$lang['changelog'] = 'Änderungsdatei';//'ChangeLog'; +//$lang['documentation'] = 'Dokumentation';// 'Documentation'; +$lang['donate'] = 'Spende';//'Donate'; + +$lang['purge_cache'] = 'Cache bereinigen';//'Purge caches'; +$lang['no_cache_to_purge'] = 'Kein Cache zu bereinigen';//'No cache to purge.'; +$lang['done_purging_caches'] = 'Es wurden %s Bytes aus dem Cache bereinigt.';//'Purged %s bytes of cache.'; + + // view_jpeg_photo.php $lang['unsafe_file_name'] = 'Unsicherer Dateiname:';//'Unsafe file name: '; $lang['no_such_file'] = 'Keine Datei unter diesem Namen';//'No such file: '; //function.php -$lang['auto_update_not_setup'] = 'auto_uid_numbers wurde in der Konfiguration (%s aktiviert, aber der Mechanismus (auto_uid_number_mechanism) nicht. Bitte diese Problem korrigieren.';//"You have enabled auto_uid_numbers for %s in your configuration, but you have not specified the auto_uid_number_mechanism. Please correct this problem.'; -$lang['uidpool_not_set'] = 'Der Mechanismus auto_uid_number_mechanism ist als uidpool für den Server %s festgelegt, jedoch wurde nicht der auto_uid_number_uid_pool_dn festgelegt. Bitte korrigieren und dann weiter verfahren.';//"You specified the auto_uid_number_mechanism as uidpool in your configuration for server %s, but you did not specify the audo_uid_number_uid_pool_dn. Please specify it before proceeding.'; +$lang['auto_update_not_setup'] = '"auto_uid_numbers" wurde in der Konfiguration (%s) aktiviert, aber der Mechanismus (auto_uid_number_mechanism) nicht. Bitte diese Problem korrigieren.';//"You have enabled auto_uid_numbers for %s in your configuration, but you have not specified the auto_uid_number_mechanism. Please correct this problem.'; +$lang['uidpool_not_set'] = 'Der Mechanismus "auto_uid_number_mechanism" ist als "uidpool" für den Server (%s) festgelegt, jedoch wurde nicht der "auto_uid_number_uid_pool_dn" festgelegt. Bitte korrigieren und dann weiter verfahren.';//"You specified the auto_uid_number_mechanism as uidpool in your configuration for server %s, but you did not specify the audo_uid_number_uid_pool_dn. Please specify it before proceeding.'; -$lang['uidpool_not_exist'] = 'Es scheint so, dass der uidPool - der in der Konfiguration festgelegt ist - nicht vorhanden ist.';//"It appears that the uidPool you specified in your configuration (%s) does not exist.'; +$lang['uidpool_not_exist'] = 'Es scheint so, dass der "uidPool" - der in der Konfiguration festgelegt ist - nicht vorhanden ist.';//"It appears that the uidPool you specified in your configuration (%s) does not exist.'; -$lang['specified_uidpool'] = 'Der auto_uid_number_mechanism wurde auf search in der Konfiguration des Servers %s festgelegt, aber es wurde der Wert fü auto_uid_number_search_base nicht gesetzt. Bitte korrigieren und dann weiter verfahren.';//"You specified the auto_uid_number_mechanism as search in your configuration for server %s, but you did not specify the auto_uid_number_search_base. Please specify it before proceeding.'; +$lang['specified_uidpool'] = 'Der "auto_uid_number_mechanism" wurde auf "search" in der Konfiguration des Servers (%s) festgelegt, aber es wurde der Wert fü "auto_uid_number_search_base" nicht gesetzt. Bitte korrigieren und dann weiter verfahren.';//"You specified the auto_uid_number_mechanism as search in your configuration for server %s, but you did not specify the auto_uid_number_search_base. Please specify it before proceeding.'; +$lang['bad_auto_uid_search_base'] = 'Die phpLDAPadmin Konfiguration für den Server "%s" gibt eine ungültige Suchbasis für "auto_uid_search_base" an.';//'Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s'; +$lang['auto_uid_invalid_credential'] = 'Konnte nicht mit "%s" verbinden';// 'Unable to bind to %s with your with auto_uid credentials. Please check your configuration file.'; +$lang['auto_uid_invalid_value'] = 'Es wurde ein ungültiger Wert für "auto_uid_number_mechanism" (%s) festgelegt. Gültig sind nur die Werte "uidpool" und "search". Bitte den Fehler korrigieren. ';//"You specified an invalid value for auto_uid_number_mechanism (%s) in your configration. Only uidpool and search are valid. Please correct this problem.'; -$lang['auto_uid_invalid_value'] = 'Es wurde ein ungültiger Wert für auto_uid_number_mechanism(%s) festgelegt. Gültig sind nur die Werte uidpool und search. Bitte den Fehler korrigieren. ';//"You specified an invalid value for auto_uid_number_mechanism (%s) in your configration. Only uidpool and search are valid. Please correct this problem.'; +$lang['error_auth_type_config'] = 'Fehler: Ein Fehler ist in der Konfiguration (config.php) aufgetreten. Die einzigen beiden erlaubten Werte im Konfigurationsteil "auth_type" zu einem LDAP-Server ist "config" oder "form". Eingetragen ist aber "%s", was nicht erlaubt ist.';//"Error: You have an error in your config file. The only two allowed values for 'auth_type' in the $servers section are 'config' and 'form'. You entered '%s', which is not allowed. '; -$lang['error_auth_type_config'] = 'Fehler: Ein Fehler ist in der Konfiguration (config.php) aufgetreten. Die einzigen beiden erlaubten Werte im Konfigurationsteil \'auth_type\' zu einem LDAP-Server ist \'config\' oder \'form\'. Eingetragen ist aber %s, was nicht erlaubt ist.';//"Error: You have an error in your config file. The only two allowed values for 'auth_type' in the $servers section are 'config' and 'form'. You entered '%s', which is not allowed. '; +$lang['unique_attrs_invalid_credential'] = 'Es konnten nicht an "%s" mit dem Berechtigungsnachweis von "unique_attrs" verbunden werden. Bitte die Konfigurationdatei (config.php) überprüfen.';//'Unable to bind to %s with your with unique_attrs credentials. Please check your configuration file.'; +$lang['unique_attr_failed'] = 'Der Versuch von "%s" (%s) an "%s%" ist nicht erlaubt. Das Attibut/Wert gehört zu einem anderen Eintrag. Vielleicht möchten Sie nach dem Wert suchen?';// ERROR DONT'T USE HTML!!! //'Your attempt to add %s (%s) to
%s
is NOT allowed. That attribute/value belongs to another entry.

You might like to search for that entry.'; -$lang['php_install_not_supports_tls'] = 'Die verwendete PHP-Version unterstützt kein TLS (verschlüsselte Verbindung).';//"Your PHP install does not support TLS'; -$lang['could_not_start_tls'] = 'TLS konnte nicht gestartet werden.
Bitte die LDAP-Server-Konfiguration überprüfen.';//"Could not start TLS.
Please check your LDAP server configuration.'; -$lang['auth_type_not_valid'] = 'Die Konfigurationsdatei enthält einen Fehler. Der Eintrag für \'auth_type\' %s ist nicht gü,ltig';// 'You have an error in your config file. auth_type of %s is not valid.'; -$lang['ldap_said'] = 'LDAP meldet: %s

';//"LDAP said: %s

'; + +$lang['php_install_not_supports_tls'] = 'Die verwendete PHP-Version unterstützt kein TLS (verschlüsselte Verbindung).';//"Your PHP install does not support TLS'; +$lang['could_not_start_tls'] = 'TLS konnte nicht gestartet werden. Bitte die LDAP-Server-Konfiguration überprüfen.';//"Could not start TLS.
Please check your LDAP server configuration.'; +$lang['could_not_bind_anon'] = 'Konnte keine Anonymous Anmeldung zum Server herstellen.';//'Could not bind anonymously to server.'; +$lang['could_not_bind'] = 'Konnte keine Verbindung zum LDAP-Server herstellen';//'Could not bind to the LDAP server.'; +//$lang['anon_required_for_login_attr'] = 'Bei der Verwendung des Anmeldeprozedur "login_attr" muss der Server Anonymous Anmelden zulassen.';//'When using the login_attr feature, the LDAP server must support anonymous binds.'; +$lang['anonymous_bind'] = 'Anonymous anmelden';//'Anonymous Bind'; +//$lang['auth_type_not_valid'] = 'Die Konfigurationsdatei enthält einen Fehler. Der Eintrag für \'auth_type\' mit \'%s\' ist nicht gültig';// 'You have an error in your config file. auth_type of %s is not valid.'; +$lang['bad_user_name_or_password'] = 'Falscher Benutzername oder Passwort. Bitte erneut versuchen.';//'Bad username or password. Please try again.'; +$lang['redirecting_click_if_nothing_happens'] = 'Automatische Umleitung. Falls dies nicht automatisch erfolgt dann hier klicken.';//'Redirecting... Click here if nothing happens.'; +$lang['successfully_logged_in_to_server'] = 'Erfolgreich am Server %s angemeldet';//'Successfully logged into server %s'; +$lang['could_not_set_cookie'] = 'Konnte kein \'Cookie\' setzten.';//'Could not set cookie.'; +$lang['ldap_said'] = 'LDAP meldet: %s';//"LDAP said: %s

'; $lang['ferror_error'] = 'Fehler';//"Error'; -$lang['fbrowse'] = 'Überfliegen';//"browse'; -$lang['delete_photo'] = 'Lösche Foto';//"Delete Photo'; -$lang['install_not_support_blowfish'] = 'Die verwendete PHP-Version unterstützt keine Blowfish Verschlüsselung.';//"Your PHP install does not support blowfish encryption.'; -$lang['install_no_mash'] = 'Die verwendete PHP-Version unterstützt nicht die Funktion mhash(), daher kann kein SHA Hash verwendet werden.';// "Your PHP install does not have the mhash() function. Cannot do SHA hashes.'; -$lang['jpeg_contains_errors'] = 'Die Bilddatei enthält Fehler';//"jpegPhoto contains errors
'; -$lang['ferror_number'] = 'Fehlernummer: %s(%s)

';//"Error number: %s (%s)

'; -$lang['ferror_discription'] ='Beschreibung: %s

';// "Description: %s

'; -$lang['ferror_number_short'] = 'Fehlernummer:%s

';//"Error number: %s

'; -$lang['ferror_discription_short'] = 'Beschreibung: (keine Beschreibung verfügbar)
';//"Description: (no description available)
'; -$lang['ferror_submit_bug'] = 'Ist das ein phpLDAPadmin Fehler? Wenn dies so ist, dann bitte darüber berichten';//"Is this a phpLDAPadmin bug? If so, please report it.'; +$lang['fbrowse'] = 'Überfliegen';//"browse'; +$lang['delete_photo'] = 'Lösche Foto';//"Delete Photo'; +$lang['install_not_support_blowfish'] = 'Die verwendete PHP-Version unterstützt keine Blowfish Verschlüsselung.';//"Your PHP install does not support blowfish encryption.'; +$lang['install_not_support_md5crypt'] = 'Die eingesetzte PHP-Version unterstützt keine MD5-Verschlüsselung.';//'Your PHP install does not support md5crypt encryption.'; +$lang['install_no_mash'] = 'Die verwendete PHP-Version unterstützt nicht die Funktion mhash(), daher kann kein SHA Hash verwendet werden.';// "Your PHP install does not have the mhash() function. Cannot do SHA hashes.'; +$lang['jpeg_contains_errors'] = 'Die Bilddatei enthält Fehler';//"jpegPhoto contains errors
'; +$lang['ferror_number'] = 'Fehlernummer: %s (%s)';//"Error number: %s (%s)

'; +$lang['ferror_discription'] ='Beschreibung: %s';// "Description: %s

'; +$lang['ferror_number_short'] = 'Fehlernummer: %s';//"Error number: %s

'; +$lang['ferror_discription_short'] = 'Beschreibung: (keine Beschreibung verfügbar)';//"Description: (no description available)
'; +$lang['ferror_submit_bug'] = 'Ist das ein phpLDAPadmin Fehler? Wenn dies so ist, dann bitte darüber berichten';//"Is this a phpLDAPadmin bug? If so, please report it.'; $lang['ferror_unrecognized_num'] = 'Unbekannte Fehlernummer:';//"Unrecognized error number: '; $lang['ferror_nonfatil_bug'] = '

Ein nicht fataler Fehler in phpLDAPadmin gefunden!
Fehler:%s (%s)
Datei:%sZeile:%s, aufgerufen von %s
Version:PLA: %s, PHP: %s, SAPI: %s
Web server:%s
Bitte diesen Fehler melden (durch anklicken)..

';//"
You found a non-fatal phpLDAPadmin bug!
Error:%s (%s)
File:%s line %s, caller %s
Versions:PLA: %s, PHP: %s, SAPI: %s
Web server:%s
Please report this bug by clicking here.

'; @@ -308,22 +459,109 @@ $lang['ferror_congrats_found_bug'] = '
+
%s'; +$lang['authenticate_to_server'] = 'Authentifizierung mit Server %s';//'Authenticate to server %s'; +$lang['warning_this_web_connection_is_unencrypted'] = 'Achtung: Diese Webverbindung ist unverschlüsselt.';//'Warning: This web connection is unencrypted.'; +$lang['not_using_https'] = 'Es wird keine verschlüsselte Verbindung (\'https\') verwendet. Der Webbrowser übermittelt die Anmeldeinformationen im Klartext.';// 'You are not use \'https\'. Web browser will transmit login information in clear text.'; +$lang['login_dn'] = 'Anmelde DN';//'Login DN'; +$lang['user_name'] = 'Benutzername';//'User name'; +$lang['password'] = 'Passwort';//'Password'; +$lang['authenticate'] = 'Authentifizierung';//'Authenticate'; + +// Entry browser +$lang['entry_chooser_title'] = 'Einträge auswählen';//'Entry Chooser'; + +// Index page +$lang['need_to_configure'] = 'phpLDAPadmin muss konfiguriert werden. Bitte die Datei "config.php" erstellen. Ein Beispiel einer "config.php" liegt als Datei "config.php.example" bei.';// ';//'You need to configure phpLDAPadmin. Edit the file \'config.php\' to do so. An example config file is provided in \'config.php.example\''; + +// Mass deletes +$lang['no_deletes_in_read_only'] = 'Löschen ist im Nur-Lese-Modus nicht erlaubt.';//'Deletes not allowed in read only mode.'; +$lang['error_calling_mass_delete'] = 'Fehler im Aufruf von "mass_delete.php". "mass_delete" ist in den POST-Variablen nicht vorhanden.';//'Error calling mass_delete.php. Missing mass_delete in POST vars.'; +$lang['search_attrs_wrong_count'] = 'Die config.php beinhaltet einen fehlerhaften Eintrag. Die anzahl der Attribute in $search_attributes und $search_attributes_diplay ist unterschiedlich';//'Your config.php has an error. The number of attributes in $search_attributes and $search_attributes_display is different'; +$lang['mass_delete_not_array'] = 'Die POST-Variable "mass_delete" ist kein Array.';//'mass_delete POST var is not an array.'; +$lang['mass_delete_not_enabled'] = '"Viel-Löschen" ist nicht aktiviert. Bitte in der der "config.php" aktivieren vor dem Weitermachen.';//'Mass deletion is not enabled. Please enable it in config.php before proceeding.'; +$lang['mass_deleting'] = 'Viel-Löschen';//'Mass Deleting'; +$lang['mass_delete_progress'] = 'Löschprozess auf Server "%s"';//'Deletion progress on server "%s"'; +$lang['malformed_mass_delete_array'] = 'Das Array "mass_delete" ist falsch dargestellt.';//'Malformed mass_delete array.'; +$lang['no_entries_to_delete'] = 'Es wurde kein zu löschender Eintrag ausgewählt.';//'You did not select any entries to delete.'; +$lang['deleting_dn'] = 'Lösche "%s"';//'Deleting %s'; +$lang['total_entries_failed'] = '%s von %s Einträgen konnten nicht gelöscht werden.';//'%s of %s entries failed to be deleted.'; +$lang['all_entries_successful'] = 'Alle Einträge wurden erfolgreich gelöscht.';//'All entries deleted successfully.'; +$lang['confirm_mass_delete'] = 'Bitte das Löschen von %s Einträgen auf dem Server %s bestätigen';//'Confirm mass delete of %s entries on server %s'; +$lang['yes_delete'] = 'Ja, Löschen!';//'Yes, delete!'; + + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'Das Umbenennen von einem Eintrag mit Untereinträgen ist nicht Möglich. Es ist nur auf den Untersten Einträgen gestattet.';// 'You cannot rename an entry which has children entries (eg, the rename operation is not allowed on non-leaf entries)'; +$lang['no_rdn_change'] = 'Der RDN wurde nicht verändert';//'You did not change the RDN'; +$lang['invalid_rdn'] = 'Ungültiger RDN Wert';//'Invalid RDN value'; +$lang['could_not_rename'] = 'Der Eintrag konnte nicht umbenannt werden';//'Could not rename the entry'; + + ?> diff --git a/lang/en.php b/lang/en.php index 4fe9a03..d80ede9 100644 --- a/lang/en.php +++ b/lang/en.php @@ -1,14 +1,18 @@ DN'; +$lang['base_dn'] = 'Base DN'; $lang['search_scope'] = 'Search Scope'; -$lang['search_ filter'] = 'Search Filter'; $lang['show_attributes'] = 'Show Attributtes'; +$lang['attributes'] = 'Attributes'; $lang['Search'] = 'Search'; -$lang['equals'] = 'equals'; -$lang['starts_with'] = 'starts with'; -$lang['contains'] = 'contains'; -$lang['ends_with'] = 'ends with'; -$lang['sounds_like'] = 'sounds like'; +$lang['predefined_search_str'] = 'Select a predefined search'; +$lang['predefined_searches'] = 'Predefined Searches'; +$lang['no_predefined_queries'] = 'No queries have been defined in config.php.'; +$lang['export_results'] = 'export results'; +$lang['unrecoginzed_search_result_format'] = 'Unrecognized search result format: %s'; +$lang['format'] = 'Format'; +$lang['list'] = 'list'; +$lang['table'] = 'table'; +$lang['bad_search_display'] = 'Your config.php specifies an invalid value for $default_search_display: %s. Please fix it'; +$lang['page_n'] = 'Page %d'; +$lang['no_results'] = 'The search found no results.'; // Tree browser -$lang['request_new_feature'] = 'Request a new feature'; -$lang['see_open_requests'] = 'see open requests'; +$lang['request_new_feature'] = 'Request feature'; $lang['report_bug'] = 'Report a bug'; -$lang['see_open_bugs'] = 'see open bugs'; $lang['schema'] = 'schema'; $lang['search'] = 'search'; $lang['create'] = 'create'; @@ -47,98 +55,166 @@ $lang['info'] = 'info'; $lang['import'] = 'import'; $lang['refresh'] = 'refresh'; $lang['logout'] = 'logout'; -$lang['create_new'] = 'Create New'; +$lang['create_new'] = 'Create new entry here'; $lang['view_schema_for'] = 'View schema for'; $lang['refresh_expanded_containers'] = 'Refresh all expanded containers for'; $lang['create_new_entry_on'] = 'Create a new entry on'; +$lang['new'] = 'new'; $lang['view_server_info'] = 'View server-supplied information'; $lang['import_from_ldif'] = 'Import entries from an LDIF file'; $lang['logout_of_this_server'] = 'Logout of this server'; $lang['logged_in_as'] = 'Logged in as: '; +$lang['this_base_dn_is_not_valid'] = 'This is not a valid DN.'; +$lang['this_base_dn_does_not_exist'] = 'This entry does not exist.'; $lang['read_only'] = 'read only'; +$lang['read_only_tooltip'] = 'This attribute has been flagged as read only by the phpLDAPadmin administrator'; $lang['could_not_determine_root'] = 'Could not determine the root of your LDAP tree.'; $lang['ldap_refuses_to_give_root'] = 'It appears that the LDAP server has been configured to not reveal its root.'; $lang['please_specify_in_config'] = 'Please specify it in config.php'; $lang['create_new_entry_in'] = 'Create a new entry in'; $lang['login_link'] = 'Login...'; +$lang['login'] = 'login'; +$lang['base_entry_does_not_exist'] = 'The base entry does not exist.'; +$lang['create_it'] = 'Create it?'; // Entry display $lang['delete_this_entry'] = 'Delete this entry'; $lang['delete_this_entry_tooltip'] = 'You will be prompted to confirm this decision'; $lang['copy_this_entry'] = 'Copy this entry'; $lang['copy_this_entry_tooltip'] = 'Copy this object to another location, a new DN, or another server'; -$lang['export_to_ldif'] = 'Export to LDIF'; -$lang['export_to_ldif_tooltip'] = 'Save an LDIF dump of this object'; -$lang['export_subtree_to_ldif_tooltip'] = 'Save an LDIF dump of this object and all of its children'; -$lang['export_subtree_to_ldif'] = 'Export subtree to LDIF'; -$lang['export_to_ldif_mac'] = 'Macintosh style line ends'; -$lang['export_to_ldif_win'] = 'Windows style line ends'; -$lang['export_to_ldif_unix'] = 'Unix style line ends'; +$lang['export'] = 'Export'; +$lang['export_lcase'] = 'export'; +$lang['export_tooltip'] = 'Save a dump of this object'; +$lang['export_subtree_tooltip'] = 'Save a dump of this object and all of its children'; +$lang['export_subtree'] = 'Export subtree'; $lang['create_a_child_entry'] = 'Create a child entry'; -$lang['add_a_jpeg_photo'] = 'Add a jpegPhoto'; $lang['rename_entry'] = 'Rename Entry'; $lang['rename'] = 'Rename'; $lang['add'] = 'Add'; $lang['view'] = 'View'; -$lang['add_new_attribute'] = 'Add New Attribute'; -$lang['add_new_attribute_tooltip'] = 'Add a new attribute/value to this entry'; -$lang['internal_attributes'] = 'Internal Attributes'; +$lang['view_one_child'] = 'View 1 child'; +$lang['view_children'] = 'View %s children'; +$lang['add_new_attribute'] = 'Add new attribute'; +$lang['add_new_objectclass'] = 'Add new ObjectClass'; $lang['hide_internal_attrs'] = 'Hide internal attributes'; $lang['show_internal_attrs'] = 'Show internal attributes'; -$lang['internal_attrs_tooltip'] = 'Attributes set automatically by the system'; -$lang['entry_attributes'] = 'Entry Attributes'; $lang['attr_name_tooltip'] = 'Click to view the schema defintion for attribute type \'%s\''; -$lang['click_to_display'] = 'click \'+\' to display'; -$lang['hidden'] = 'hidden'; $lang['none'] = 'none'; +$lang['no_internal_attributes'] = 'No internal attributes'; +$lang['no_attributes'] = 'This entry has no attributes'; $lang['save_changes'] = 'Save Changes'; $lang['add_value'] = 'add value'; $lang['add_value_tooltip'] = 'Add an additional value to attribute \'%s\''; $lang['refresh_entry'] = 'Refresh'; $lang['refresh_this_entry'] = 'Refresh this entry'; -$lang['delete_hint'] = 'Hint: To delete an attribute, empty the text field and click save.'; -$lang['attr_schema_hint'] = 'Hint: To view the schema for an attribute, click the attribute name.'; +$lang['delete_hint'] = 'Hint: To delete an attribute, empty the text field and click save.'; +$lang['attr_schema_hint'] = 'Hint: To view the schema for an attribute, click the attribute name.'; $lang['attrs_modified'] = 'Some attributes (%s) were modified and are highlighted below.'; $lang['attr_modified'] = 'An attribute (%s) was modified and is highlighted below.'; $lang['viewing_read_only'] = 'Viewing entry in read-only mode.'; -$lang['change_entry_rdn'] = 'Change this entry\'s RDN'; $lang['no_new_attrs_available'] = 'no new attributes available for this entry'; +$lang['no_new_binary_attrs_available'] = 'no new binary attributes available for this entry'; $lang['binary_value'] = 'Binary value'; -$lang['add_new_binary_attr'] = 'Add New Binary Attribute'; -$lang['add_new_binary_attr_tooltip'] = 'Add a new binary attribute/value from a file'; +$lang['add_new_binary_attr'] = 'Add new binary attribute'; $lang['alias_for'] = 'Note: \'%s\' is an alias for \'%s\''; +$lang['required_for'] = 'Required attribute for objectClass(es) %s'; $lang['download_value'] = 'download value'; $lang['delete_attribute'] = 'delete attribute'; $lang['true'] = 'true'; $lang['false'] = 'false'; $lang['none_remove_value'] = 'none, remove value'; $lang['really_delete_attribute'] = 'Really delete attribute'; +$lang['add_new_value'] = 'Add New Value'; // Schema browser -$lang['the_following_objectclasses'] = 'The following objectClasses are supported by this LDAP server.'; -$lang['the_following_attributes'] = 'The following attributeTypes are supported by this LDAP server.'; -$lang['the_following_matching'] = 'The following matching rules are supported by this LDAP server.'; -$lang['the_following_syntaxes'] = 'The following syntaxes are supported by this LDAP server.'; +$lang['the_following_objectclasses'] = 'The following objectClasses are supported by this LDAP server.'; +$lang['the_following_attributes'] = 'The following attributeTypes are supported by this LDAP server.'; +$lang['the_following_matching'] = 'The following matching rules are supported by this LDAP server.'; +$lang['the_following_syntaxes'] = 'The following syntaxes are supported by this LDAP server.'; +$lang['schema_retrieve_error_1']='The server does not fully support the LDAP protocol.'; +$lang['schema_retrieve_error_2']='Your version of PHP does not correctly perform the query.'; +$lang['schema_retrieve_error_3']='Or lastly, phpLDAPadmin doesn\'t know how to fetch the schema for your server.'; $lang['jump_to_objectclass'] = 'Jump to an objectClass'; +$lang['view_schema_for_oclass'] = 'View the schema description for this objectClass'; $lang['jump_to_attr'] = 'Jump to an attribute type'; +$lang['jump_to_matching_rule'] = 'Jump to a matching rule'; $lang['schema_for_server'] = 'Schema for server'; $lang['required_attrs'] = 'Required Attributes'; +$lang['required'] = 'required'; $lang['optional_attrs'] = 'Optional Attributes'; +$lang['optional_binary_attrs'] = 'Optional Binary Attributes'; $lang['OID'] = 'OID'; +$lang['aliases']='Aliases'; $lang['desc'] = 'Description'; +$lang['no_description']='no description'; $lang['name'] = 'Name'; -$lang['is_obsolete'] = 'This objectClass is obsolete'; -$lang['inherits'] = 'Inherits'; +$lang['equality']='Equality'; +$lang['is_obsolete'] = 'This objectClass is obsolete.'; +$lang['inherits'] = 'Inherits from'; +$lang['inherited_from'] = 'Inherited from'; +$lang['parent_to'] = 'Parent to'; $lang['jump_to_this_oclass'] = 'Jump to this objectClass definition'; $lang['matching_rule_oid'] = 'Matching Rule OID'; $lang['syntax_oid'] = 'Syntax OID'; $lang['not_applicable'] = 'not applicable'; $lang['not_specified'] = 'not specified'; +$lang['character']='character'; +$lang['characters']='characters'; +$lang['used_by_objectclasses']='Used by objectClasses'; +$lang['used_by_attributes']='Used by Attributes'; +$lang['maximum_length']='Maximum Length'; +$lang['attribute_types']='Attribute Types'; +$lang['syntaxes']='Syntaxes'; +$lang['matchingrules']='Matching Rules'; +$lang['oid']='OID'; +$lang['obsolete']='Obsolete'; +$lang['ordering']='Ordering'; +$lang['substring_rule']='Substring Rule'; +$lang['single_valued']='Single Valued'; +$lang['collective']='Collective'; +$lang['user_modification']='User Modification'; +$lang['usage']='Usage'; +$lang['could_not_retrieve_schema_from']='Could not retrieve schema from'; +$lang['type']='Type'; +$lang['no_such_schema_item'] = 'No such schema item: "%s"'; // Deleting entries -$lang['entry_deleted_successfully'] = 'Entry \'%s\' deleted successfully.'; +$lang['entry_deleted_successfully'] = 'Entry %s deleted successfully.'; $lang['you_must_specify_a_dn'] = 'You must specify a DN'; $lang['could_not_delete_entry'] = 'Could not delete the entry: %s'; +$lang['no_such_entry'] = 'No such entry: %s'; +$lang['delete_dn'] = 'Delete %s'; +$lang['permanently_delete_children'] = 'Permanently delete all children also?'; +$lang['entry_is_root_sub_tree'] = 'This entry is the root of a sub-tree containing %s entries.'; +$lang['view_entries'] = 'view entries'; +$lang['confirm_recursive_delete'] = 'phpLDAPadmin can recursively delete this entry and all %s of its children. See below for a list of all the entries that this action will delete. Do you want to do this?'; +$lang['confirm_recursive_delete_note'] = 'Note: this is potentially very dangerous and you do this at your own risk. This operation cannot be undone. Take into consideration aliases, referrals, and other things that may cause problems.'; +$lang['delete_all_x_objects'] = 'Delete all %s objects'; +$lang['recursive_delete_progress'] = 'Recursive delete progress'; +$lang['entry_and_sub_tree_deleted_successfully'] = 'Entry %s and sub-tree deleted successfully.'; +$lang['failed_to_delete_entry'] = 'Failed to delete entry %s'; +$lang['list_of_entries_to_be_deleted'] = 'List of entries to be deleted:'; +$lang['sure_permanent_delete_object']='Are you sure you want to permanently delete this object?'; +$lang['dn'] = 'DN'; + +// Deleting attributes +$lang['attr_is_read_only'] = 'The attribute "%s" is flagged as read-only in the phpLDAPadmin configuration.'; +$lang['no_attr_specified'] = 'No attribute name specified.'; +$lang['no_dn_specified'] = 'No DN specified'; + +// Adding attributes +$lang['left_attr_blank'] = 'You left the attribute value blank. Please go back and try again.'; +$lang['failed_to_add_attr'] = 'Failed to add the attribute.'; +$lang['file_empty'] = 'The file you chose is either empty or does not exist. Please go back and try again.'; +$lang['invalid_file'] = 'Security error: The file being uploaded may be malicious.'; +$lang['warning_file_uploads_disabled'] = 'Your PHP configuration has disabled file uploads. Please check php.ini before proceeding.'; +$lang['uploaded_file_too_big'] = 'The file you uploaded is too large. Please check php.ini, upload_max_size setting'; +$lang['uploaded_file_partial'] = 'The file you selected was only partially uploaded, likley due to a network error.'; +$lang['max_file_size'] = 'Maximum file size: %s'; + +// Updating values +$lang['modification_successful'] = 'Modification successful!'; +$lang['change_password_new_login'] = 'Since you changed your password, you must now login again with your new password.'; // Adding objectClass form $lang['new_required_attrs'] = 'New Required Attributes'; @@ -147,6 +223,7 @@ $lang['new_attributes'] = 'new attributes'; $lang['new_required_attrs_instructions'] = 'Instructions: In order to add this objectClass to this entry, you must specify'; $lang['that_this_oclass_requires'] = 'that this objectClass requires. You can do so in this form.'; $lang['add_oclass_and_attrs'] = 'Add ObjectClass and Attributes'; +$lang['objectclasses'] = 'ObjectClasses'; // General $lang['chooser_link_tooltip'] = 'Click to popup a dialog to select an entry (DN) graphically'; @@ -154,8 +231,11 @@ $lang['no_updates_in_read_only_mode'] = 'You cannot perform updates while server $lang['bad_server_id'] = 'Bad server id'; $lang['not_enough_login_info'] = 'Not enough information to login to server. Please check your configuration.'; $lang['could_not_connect'] = 'Could not connect to LDAP server.'; +$lang['could_not_connect_to_host_on_port'] = 'Could not connect to "%s" on port "%s"'; $lang['could_not_perform_ldap_mod_add'] = 'Could not perform ldap_mod_add operation.'; $lang['bad_server_id_underline'] = 'Bad server_id: '; +$lang['home'] = 'Home'; +$lang['help'] = 'Help'; $lang['success'] = 'Success'; $lang['server_colon_pare'] = 'Server: '; $lang['look_in'] = 'Looking in: '; @@ -165,6 +245,22 @@ $lang['back_up_p'] = 'Back Up...'; $lang['no_entries'] = 'no entries'; $lang['not_logged_in'] = 'Not logged in'; $lang['could_not_det_base_dn'] = 'Could not determine base DN'; +$lang['please_report_this_as_a_bug']='Please report this as a bug.'; +$lang['reasons_for_error']='This could happen for several reasons, the most probable of which are:'; +$lang['yes']='Yes'; +$lang['no']='No'; +$lang['go']='Go'; +$lang['delete']='Delete'; +$lang['back']='Back'; +$lang['object']='object'; +$lang['delete_all']='Delete all'; +$lang['url_bug_report']='https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; +$lang['hint'] = 'hint'; +$lang['bug'] = 'bug'; +$lang['warning'] = 'warning'; +$lang['light'] = 'light'; // the word 'light' from 'light bulb' +$lang['proceed_gt'] = 'Proceed >>'; + // Add value form $lang['add_new'] = 'Add new'; @@ -172,8 +268,7 @@ $lang['value_to'] = 'value to'; $lang['distinguished_name'] = 'Distinguished Name'; $lang['current_list_of'] = 'Current list of'; $lang['values_for_attribute'] = 'values for attribute'; -$lang['inappropriate_matching_note'] = 'Note: You will get an "inappropriate matching" error if you have not
' . - 'setup an EQUALITY rule on your LDAP server for this attribute.'; +$lang['inappropriate_matching_note'] = 'Note: You will get an "inappropriate matching" error if you have not setup an EQUALITY rule on your LDAP server for this attribute.'; $lang['enter_value_to_add'] = 'Enter the value you would like to add:'; $lang['new_required_attrs_note'] = 'Note: you may be required to enter new attributes that this objectClass requires'; $lang['syntax'] = 'Syntax'; @@ -194,6 +289,13 @@ $lang['copy_failed'] = 'Failed to copy DN: '; //edit.php $lang['missing_template_file'] = 'Warning: missing template file, '; $lang['using_default'] = 'Using default.'; +$lang['template'] = 'Template'; +$lang['must_choose_template'] = 'You must choose a template'; +$lang['invalid_template'] = '%s is an invalid template'; +$lang['using_template'] = 'using template'; +$lang['go_to_dn'] = 'Go to %s'; ++$lang['structural_object_class_cannot_remove'] = 'This is a structural ObjectClass and cannot be removed.'; ++$lang['structural'] = 'structural'; //copy_form.php $lang['copyf_title_copy'] = 'Copy '; @@ -203,24 +305,38 @@ $lang['copyf_dest_dn_tooltip'] = 'The full DN of the new entry to be created whe $lang['copyf_dest_server'] = 'Destination Server'; $lang['copyf_note'] = 'Hint: Copying between different servers only works if there are no schema violations'; $lang['copyf_recursive_copy'] = 'Recursively copy all children of this object as well.'; +$lang['recursive_copy'] = 'Recursive copy'; +$lang['filter'] = 'Filter'; +$lang['search_filter'] = 'Search Filter'; +$lang['filter_tooltip'] = 'When performing a recursive copy, only copy those entries which match this filter'; //create.php -$lang['create_required_attribute'] = 'You left the value blank for required attribute %s.'; -$lang['create_redirecting'] = 'Redirecting'; -$lang['create_here'] = 'here'; +$lang['create_required_attribute'] = 'You left the value blank for required attribute (%s).'; +$lang['redirecting'] = 'Redirecting...'; +$lang['here'] = 'here'; $lang['create_could_not_add'] = 'Could not add the object to the LDAP server.'; //create_form.php $lang['createf_create_object'] = 'Create Object'; $lang['createf_choose_temp'] = 'Choose a template'; $lang['createf_select_temp'] = 'Select a template for the creation process'; -$lang['createf_proceed'] = 'Proceed'; +$lang['save_as_file'] = 'Save as file'; +$lang['rdn_field_blank'] = 'You left the RDN field blank.'; +$lang['container_does_not_exist'] = 'The container you specified (%s) does not exist. Please try again.'; +$lang['no_objectclasses_selected'] = 'You did not select any ObjectClasses for this object. Please go back and do so.'; +$lang['hint_structural_oclass'] = 'Hint: You must choose exactly one structural objectClass (shown in bold above)'; //creation_template.php $lang['ctemplate_on_server'] = 'On server'; $lang['ctemplate_no_template'] = 'No template specified in POST variables.'; -$lang['ctemplate_config_handler'] = 'Your config specifies a handler of'; -$lang['ctemplate_handler_does_not_exist'] = 'for this template. But, this handler does not exist in the templates/creation directory.'; +$lang['template_not_readable'] = 'Your config specifies a handler of "%s" for this template but this file is not readable because the permissions are too strict.'; +$lang['template_does_not_exist'] = 'Your config specifies a handler of "%s" for this template but this handler does not exist in the templates/creation directory.'; +$lang['create_step1'] = 'Step 1 of 2: Name and ObjectClass(es)'; +$lang['create_step2'] = 'Step 2 of 2: Specify attributes and values'; +$lang['relative_distinguished_name'] = 'Relative Distinguished Name'; +$lang['rdn'] = 'RDN'; +$lang['rdn_example'] = '(example: cn=MyNewPerson)'; +$lang['container'] = 'Container'; // search.php $lang['you_have_not_logged_into_server'] = 'You have not logged into the selected server yet, so you cannot perform searches on it.'; @@ -251,7 +367,7 @@ $lang['ends with'] = 'ends with'; $lang['sounds like'] = 'sounds like'; // server_info.php -$lang['could_not_fetch_server_info'] = 'Could not retrieve LDAP information from the server'; +$lang['could_not_fetch_server_info'] = 'Could not retrieve LDAP information from the server. This may be due to a bug in your version of PHP or perhaps your LDAP server has access control specified that prevents LDAP clients from accessing the RootDSE.'; $lang['server_info_for'] = 'Server info for: '; $lang['server_reports_following'] = 'Server reports the following information about itself'; $lang['nothing_to_report'] = 'This server has nothing to report.'; @@ -275,7 +391,19 @@ $lang['go_back'] = 'Go back'; $lang['welcome_note'] = 'Use the menu to the left to navigate'; $lang['credits'] = 'Credits'; $lang['changelog'] = 'ChangeLog'; -$lang['documentation'] = 'Documentation'; +$lang['donate'] = 'Donate'; +$lang['pla_logo'] = 'phpLDAPadmin logo'; + +// Donate.php +$lang['donation_instructions'] = 'To donate funds to the phpLDAPadmin project, use one of the PayPal buttons below.'; +$lang['donate_amount'] = 'Donate %s'; +$lang['wish_list_option'] = 'Or perhaps you would prefer to purchase an gift for a phpLDAPadmin developer.'; +$lang['wish_list'] = 'View Dave\'s phpLDAPadmin wish list'; + +$lang['purge_cache'] = 'Purge caches'; +$lang['no_cache_to_purge'] = 'No cache to purge.'; +$lang['done_purging_caches'] = 'Purged %s bytes of cache.'; +$lang['purge_cache_tooltip'] = 'Purge all cached data in phpLDAPadmin, including server schemas.'; // view_jpeg_photo.php $lang['unsafe_file_name'] = 'Unsafe file name: '; @@ -285,34 +413,45 @@ $lang['no_such_file'] = 'No such file: '; $lang['auto_update_not_setup'] = 'You have enabled auto_uid_numbers for %s in your configuration, but you have not specified the auto_uid_number_mechanism. Please correct this problem.'; -$lang['uidpool_not_set'] = 'You specified the auto_uid_number_mechanism as uidpool +$lang['uidpool_not_set'] = 'You specified the "auto_uid_number_mechanism" as "uidpool" in your configuration for server %s, but you did not specify the audo_uid_number_uid_pool_dn. Please specify it before proceeding.'; -$lang['uidpool_not_exist'] = 'It appears that the uidPool you specified in your configuration (%s) +$lang['uidpool_not_exist'] = 'It appears that the uidPool you specified in your configuration ("%s") does not exist.'; -$lang['specified_uidpool'] = 'You specified the auto_uid_number_mechanism as search in your +$lang['specified_uidpool'] = 'You specified the "auto_uid_number_mechanism" as "search" in your configuration for server %s, but you did not specify the - auto_uid_number_search_base. Please specify it before proceeding.'; -$lang['auto_uid_invalid_value'] = 'You specified an invalid value for auto_uid_number_mechanism (%s) - in your configration. Only uidpool and search are valid. + "auto_uid_number_search_base". Please specify it before proceeding.'; +$lang['auto_uid_invalid_credential'] = 'Unable to bind to %s with your with auto_uid credentials. Please check your configuration file.'; +$lang['bad_auto_uid_search_base'] = 'Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s'; +$lang['auto_uid_invalid_value'] = 'You specified an invalid value for auto_uid_number_mechanism ("%s") + in your configration. Only "uidpool" and "search" are valid. Please correct this problem.'; -$lang['error_auth_type_config'] = 'Error: You have an error in your config file. The only two allowed values - for auth_type in the $servers section are \'config\' and \'form\'. You entered \'%s\', +$lang['error_auth_type_config'] = 'Error: You have an error in your config file. The only three allowed values + for auth_type in the $servers section are \'session\', \'cookie\', and \'config\'. You entered \'%s\', which is not allowed. '; -$lang['php_install_not_supports_tls'] = 'Your PHP install does not support TLS'; -$lang['could_not_start_tls'] = 'Could not start TLS.
Please check your LDAP server configuration.'; -$lang['auth_type_not_valid'] = 'You have an error in your config file. auth_type of %s is not valid.'; -$lang['ldap_said'] = 'LDAP said: %s

'; +$lang['unique_attrs_invalid_credential'] = 'Unable to bind to %s with your with unique_attrs credentials. Please check your configuration file.'; +$lang['unique_attr_failed'] = 'Your attempt to add %s (%s) to
%s
is NOT allowed. That attribute/value belongs to another entry.

You might like to search for that entry.'; +$lang['php_install_not_supports_tls'] = 'Your PHP install does not support TLS.'; +$lang['could_not_start_tls'] = 'Could not start TLS. Please check your LDAP server configuration.'; +$lang['could_not_bind_anon'] = 'Could not bind anonymously to server.'; +$lang['could_not_bind'] = 'Could not bind to the LDAP server.'; +$lang['anonymous_bind'] = 'Anonymous Bind'; +$lang['bad_user_name_or_password'] = 'Bad username or password. Please try again.'; +$lang['redirecting_click_if_nothing_happens'] = 'Redirecting... Click here if nothing happens.'; +$lang['successfully_logged_in_to_server'] = 'Successfully logged into server %s'; +$lang['could_not_set_cookie'] = 'Could not set cookie.'; +$lang['ldap_said'] = 'LDAP said: %s'; $lang['ferror_error'] = 'Error'; $lang['fbrowse'] = 'browse'; $lang['delete_photo'] = 'Delete Photo'; $lang['install_not_support_blowfish'] = 'Your PHP install does not support blowfish encryption.'; +$lang['install_not_support_md5crypt'] = 'Your PHP install does not support md5crypt encryption.'; $lang['install_no_mash'] = 'Your PHP install does not have the mhash() function. Cannot do SHA hashes.'; $lang['jpeg_contains_errors'] = 'jpegPhoto contains errors
'; -$lang['ferror_number'] = 'Error number: %s (%s)

'; -$lang['ferror_discription'] = 'Description: %s

'; -$lang['ferror_number_short'] = 'Error number: %s

'; -$lang['ferror_discription_short'] = 'Description: (no description available)
'; +$lang['ferror_number'] = 'Error number: %s (%s)'; +$lang['ferror_discription'] = 'Description: %s

'; +$lang['ferror_number_short'] = 'Error number: %s

'; +$lang['ferror_discription_short'] = 'Description: (no description available)
'; $lang['ferror_submit_bug'] = 'Is this a phpLDAPadmin bug? If so, please report it.'; $lang['ferror_unrecognized_num'] = 'Unrecognized error number: '; $lang['ferror_nonfatil_bug'] = '

\n"; flush(); $counter=1; - $schema_syntaxes = get_schema_syntaxes( $server_id ); + $schema_syntaxes = get_schema_syntaxes( $server_id, null, false ); if( ! $schema_syntaxes ) pla_error( $schema_error_str ); foreach( $schema_syntaxes as $syntax ) { $counter++; @@ -95,93 +98,86 @@ if( $view == 'syntaxes' ) { } elseif( $view == 'attributes' ) { //echo "
" . $lang['the_following_attributes'] . "

\n"; flush(); - $schema_attrs = get_schema_attributes( $server_id ); - $schema_object_classes = get_schema_objectclasses( $server_id ); + $schema_attrs = get_schema_attributes( $server_id, null, false ); + $schema_object_classes = get_schema_objectclasses( $server_id, null, false ); if( ! $schema_attrs || ! $schema_object_classes ) pla_error( $schema_error_str ); - // do a reverse-mapping to add in which objectClasses each attributeType is used - foreach( $schema_object_classes as $object_class ) { - $must_attrs = $object_class->getMustAttrNames($schema_object_classes); - $may_attrs = $object_class->getMayAttrNames($schema_object_classes); - $oclass_attrs = array_unique( array_merge( $must_attrs, $may_attrs ) ); - foreach( $oclass_attrs as $attr_name ) { - if( isset( $schema_attrs[ strtolower( $attr_name ) ] ) ) { - $schema_attrs[ strtolower( $attr_name ) ]->addUsedInObjectClass( - $object_class->getName() ); - } else { - //echo "Warning, attr not set: $attr_name
"; - } - } - - } - //echo "
";
 	//print_r( $schema_attrs );
 	//echo "
"; ?> : - - + + + getName() + .'" ' + .( 0 == strcasecmp( $attr->getName(), $viewvalue ) ? ' selected ' : '' ) + .'>' + . $attr->getName() + .'' . "\n" ); + } ?> +
@@ -338,15 +477,23 @@ $lang['ferror_congrats_found_bug'] = 'Congratulations! You found a bug in phpLDA //ldif_import_form $lang['import_ldif_file_title'] = 'Import LDIF File'; $lang['select_ldif_file'] = 'Select an LDIF file:'; -$lang['select_ldif_file_proceed'] = 'Proceed >>'; +$lang['dont_stop_on_errors'] = 'Don\'t stop on errors'; //ldif_import $lang['add_action'] = 'Adding...'; $lang['delete_action'] = 'Deleting...'; $lang['rename_action'] = 'Renaming...'; $lang['modify_action'] = 'Modifying...'; +$lang['warning_no_ldif_version_found'] = 'No version found. Assuming 1.'; +$lang['valid_dn_line_required'] = 'A valid dn line is required.'; +$lang['missing_uploaded_file'] = 'Missing uploaded file.'; +$lang['no_ldif_file_specified'] = 'No LDIF file specified. Please try again.'; +$lang['ldif_file_empty'] = 'Uploaded LDIF file is empty.'; +$lang['empty'] = 'empty'; +$lang['file'] = 'File'; +$lang['number_bytes'] = '%s bytes'; -$lang['failed'] = 'failed'; +$lang['failed'] = 'Failed'; $lang['ldif_parse_error'] = 'LDIF Parse Error'; $lang['ldif_could_not_add_object'] = 'Could not add object:'; $lang['ldif_could_not_rename_object'] = 'Could not rename object:'; @@ -354,4 +501,174 @@ $lang['ldif_could_not_delete_object'] = 'Could not delete object:'; $lang['ldif_could_not_modify_object'] = 'Could not modify object:'; $lang['ldif_line_number'] = 'Line Number:'; $lang['ldif_line'] = 'Line:'; + +// Exports +$lang['export_format'] = 'Export format'; +$lang['line_ends'] = 'Line ends'; +$lang['must_choose_export_format'] = 'You must choose an export format.'; +$lang['invalid_export_format'] = 'Invalid export format'; +$lang['no_exporter_found'] = 'No available exporter found.'; +$lang['error_performing_search'] = 'Encountered an error while performing search.'; +$lang['showing_results_x_through_y'] = 'Showing results %s through %s.'; +$lang['searching'] = 'Searching...'; +$lang['size_limit_exceeded'] = 'Notice, search size limit exceeded.'; +$lang['entry'] = 'Entry'; +$lang['ldif_export_for_dn'] = 'LDIF Export for: %s'; +$lang['generated_on_date'] = 'Generated by phpLDAPadmin ( http://www.phpldapadmin.com/ ) on %s'; +$lang['total_entries'] = 'Total Entries'; +$lang['dsml_export_for_dn'] = 'DSLM Export for: %s'; +$lang['include_system_attrs'] = 'Include system attributes'; +$lang['csv_spreadsheet'] = 'CSV (Spreadsheet)'; + +// logins +$lang['could_not_find_user'] = 'Could not find a user "%s"'; +$lang['password_blank'] = 'You left the password blank.'; +$lang['login_cancelled'] = 'Login cancelled.'; +$lang['no_one_logged_in'] = 'No one is logged in to that server.'; +$lang['could_not_logout'] = 'Could not logout.'; +$lang['unknown_auth_type'] = 'Unknown auth_type: %s'; +$lang['logged_out_successfully'] = 'Logged out successfully from server %s'; +$lang['authenticate_to_server'] = 'Authenticate to server %s'; +$lang['warning_this_web_connection_is_unencrypted'] = 'Warning: This web connection is unencrypted.'; +$lang['not_using_https'] = 'You are not using \'https\'. Web browser will transmit login information in clear text.'; +$lang['login_dn'] = 'Login DN'; +$lang['user_name'] = 'User name'; +$lang['password'] = 'Password'; +$lang['authenticate'] = 'Authenticate'; + +// Entry browser +$lang['entry_chooser_title'] = 'Entry Chooser'; + +// Index page +$lang['need_to_configure'] = 'You need to configure phpLDAPadmin. Edit the file \'config.php\' to do so. An example config file is provided in \'config.php.example\''; + +// Mass deletes +$lang['no_deletes_in_read_only'] = 'Deletes not allowed in read only mode.'; +$lang['error_calling_mass_delete'] = 'Error calling mass_delete.php. Missing mass_delete in POST vars.'; +$lang['mass_delete_not_array'] = 'mass_delete POST var is not an array.'; +$lang['mass_delete_not_enabled'] = 'Mass deletion is not enabled. Please enable it in config.php before proceeding.'; +$lang['search_attrs_wrong_count'] = 'Your config.php has an error. The number of attributes in $search_attributes and $search_attributes_display is different'; +$lang['mass_deleting'] = 'Mass Deleting'; +$lang['mass_delete_progress'] = 'Deletion progress on server "%s"'; +$lang['malformed_mass_delete_array'] = 'Malformed mass_delete array.'; +$lang['no_entries_to_delete'] = 'You did not select any entries to delete.'; +$lang['deleting_dn'] = 'Deleting %s'; +$lang['total_entries_failed'] = '%s of %s entries failed to be deleted.'; +$lang['all_entries_successful'] = 'All entries deleted successfully.'; +$lang['confirm_mass_delete'] = 'Confirm mass delete of %s entries on server %s'; +$lang['yes_delete'] = 'Yes, delete!'; + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'You cannot rename an entry which has children entries (eg, the rename operation is not allowed on non-leaf entries)'; +$lang['no_rdn_change'] = 'You did not change the RDN'; +$lang['invalid_rdn'] = 'Invalid RDN value'; +$lang['could_not_rename'] = 'Could not rename the entry'; + +// General errors +$lang['php5_unsupported'] = 'phpLDAPadmin does not yet support PHP 5. You will likely encounter many weird problems if you continue.'; +$lang['mismatched_search_attr_config'] = 'Your configuration has an error. $search_attributes must have the same number of attributes as $search_attributes_display.'; + +// Password checker +$lang['passwords_match'] = 'Passwords match!'; +$lang['passwords_do_not_match'] = 'Passwords do not match!'; +$lang['password_checker_tool'] = 'Password Checker Tool'; +$lang['compare'] = 'Compare'; +$lang['to'] = 'To'; + +// Templates +$lang['using'] = 'Using the'; +$lang['template'] = 'template'; +$lang['switch_to'] = 'You may switch to the '; +$lang['default_template'] = 'default template'; + +// template_config +$lang['user_account'] = 'User Account (posixAccount)'; +$lang['address_book_inet'] = 'Address Book Entry (inetOrgPerson)'; +$lang['address_book_moz'] = 'Address Book Entry (mozillaOrgPerson)'; +$lang['kolab_user'] = 'Kolab User Entry'; +$lang['organizational_unit'] = 'Organizational Unit'; +$lang['organizational_role'] = 'Organizational Role'; +$lang['posix_group'] = 'Posix Group'; +$lang['samba_machine'] = 'Samba NT Machine'; +$lang['samba3_machine'] = 'Samba 3 NT Machine'; +$lang['samba_user'] = 'Samba User'; +$lang['samba3_user'] = 'Samba 3 User'; +$lang['samba3_group'] = 'Samba 3 Group Mapping'; +$lang['dns_entry'] = 'DNS Entry'; +$lang['simple_sec_object'] = 'Simple Security Object'; +$lang['courier_mail_account'] = 'Courier Mail Account'; +$lang['courier_mail_alias'] = 'Courier Mail Alias'; +$lang['ldap_alias'] = 'LDAP Alias'; +$lang['sendmail_cluster'] = 'Sendmail Cluster'; +$lang['sendmail_domain'] = 'Sendmail Domain'; +$lang['sendmail_alias'] = 'Sendmail Alias'; +$lang['sendmail_virt_dom'] = 'Sendmail Virtual Domain'; +$lang['sendmail_virt_users'] = 'Sendmail Virtual Users'; +$lang['sendmail_relays'] = 'Sendmail Relays'; +$lang['custom'] = 'Custom'; +$lang['samba_domain_name'] = 'My Samba domain Name'; +$lang['administrators'] = 'Administrators'; +$lang['users'] = 'Users'; +$lang['guests'] = 'Guests'; +$lang['power_users'] = 'Power Users'; +$lang['account_ops'] = 'Account Operators'; +$lang['server_ops'] = 'Server Operators'; +$lang['print_ops'] = 'Print Operators'; +$lang['backup_ops'] = 'Backup Operators'; +$lang['replicator'] = 'Replicator'; +$lang['unable_smb_passwords'] = ' Unable to create the Samba passwords. Please, check the configuration in template_config.php'; +$lang['err_smb_conf'] = 'Error: You have an error in your samba confguration.'; +$lang['err_smb_no_name_sid'] = 'Error: A name and a sid for your samba domain need to be provided.'; +$lang['err_smb_no_name'] = 'Error: No name provided for samba domain.'; +$lang['err_smb_no_sid'] = 'Error: No sid provided for samba domain.'; + +// Samba Account Template +$lang['samba_account'] = 'Samba Account'; +$lang['samba_account_lcase'] = 'samba account'; + +// New User (Posix) Account +$lang['t_new_user_account'] = 'New User Account'; +$lang['t_hint_customize'] = 'Hint: To customize this template, edit the file templates/creation/new_user_template.php'; +$lang['t_name'] = 'Name'; +$lang['t_first_name'] = 'First name'; +$lang['t_last_name'] = 'Last name'; +$lang['t_first'] = 'first'; +$lang['t_last'] = 'last'; +$lang['t_common_name'] = 'Common name'; +$lang['t_user_name'] = 'User Name'; +$lang['t_password'] = 'Password'; +$lang['t_encryption'] = 'Encryption'; +$lang['t_login_shell'] = 'Login Shell'; +$lang['t_home_dir'] = 'Home Directory'; +$lang['t_uid_number'] = 'UID Number'; +$lang['t_auto_det'] = '(automatically determined)'; +$lang['t_group'] = 'Group'; +$lang['t_gid_number'] = 'GID Number'; +$lang['t_err_passwords'] = 'Your passwords don\'t match. Please go back and try again.'; +$lang['t_err_field_blank'] = 'You cannot leave the %s blank. Please go back and try again.'; +$lang['t_err_field_num'] = 'You can only enter numeric values for the %s field. Please go back and try again.'; +$lang['t_err_bad_container'] = 'The container you specified (%s) does not exist. Please go back and try again.'; +$lang['t_confirm_account_creation'] = 'Confirm account creation'; +$lang['t_secret'] = '[secret]'; +$lang['t_create_account'] = 'Create Account'; + +// New Address Template +$lang['t_new_address'] = 'New Address Book Entry'; +$lang['t_organization'] = 'Organization'; +$lang['t_address'] = 'Address'; +$lang['t_city'] = 'City'; +$lang['t_postal_code'] = 'Postal code'; +$lang['t_street'] = 'Street'; +$lang['t_work_phone'] = 'Work phone'; +$lang['t_fax'] = 'Fax'; +$lang['t_mobile'] = 'Mobile'; +$lang['t_email'] = 'Email'; +$lang['t_container'] = 'Container'; +$lang['t_err_cn_blank'] = 'You cannot leave the Common Name blank. Please go back and try again.'; +$lang['t_confim_creation'] = 'Confirm entry creation:'; +$lang['t_create_address'] = 'Create Address'; + +// default template +$lang['t_check_pass'] = 'Check password...'; + ?> diff --git a/lang/es.php b/lang/es.php index c7e38d8..bd682e3 100644 --- a/lang/es.php +++ b/lang/es.php @@ -1,4 +1,6 @@ Descripci $lang['ferror_submit_bug'] = 'Es un error del phpLDAPadmin? Si así es, por favor dínoslo.'; $lang['ferror_unrecognized_num'] = 'Número de error desconocido: '; $lang['ferror_nonfatil_bug'] = '
+ Has encontrado un error menor del phpLDAPadmin!
- Has encontrado un error fatal del phpLDAPadmin!
Error:%s (%s)
Archivo:
Error:%s (%s)
Archivo: %s línea %s, caller %s
Versiones:PLA: %s, PHP: %s, SAPI: %s
Servidor Web:%s
Envía este error haciendo click aquí.

'; diff --git a/lang/fr.php b/lang/fr.php index da59de7..24bb5f4 100644 --- a/lang/fr.php +++ b/lang/fr.php @@ -11,6 +11,7 @@ * * Thank you! * + * $Header: /cvsroot/phpldapadmin/phpldapadmin/lang/fr.php,v 1.25 2004/05/29 04:07:02 uugdave Exp $ */ /* @@ -26,20 +27,17 @@ $lang['server'] = 'Serveur'; $lang['search_for_entries_whose'] = 'Chercher les entrées dont'; $lang['base_dn'] = 'Base DN'; $lang['search_scope'] = 'Portée de la recherche'; -$lang['search_ filter'] = 'Filtre de la recherche'; $lang['show_attributes'] = 'Montrer les attributs'; $lang['Search'] = 'Chercher'; $lang['equals'] = 'est égal à'; -$lang['starts_with'] = 'commence par'; $lang['contains'] = 'contient'; -$lang['ends_with'] = 'finit par'; -$lang['sounds_like'] = 'ressemble à;'; +$lang['predefined_search_str'] = 'Selectionner une recherche prédéfinie'; +$lang['predefined_searches'] = 'Recherches prédéfinies'; +$lang['no_predefined_queries'] = 'Aucune requête n\' a été définie dans config.php.'; -// tree.php +// Tree browser $lang['request_new_feature'] = 'Demander une nouvelle fonctionnalité'; -$lang['see_open_requests'] = 'voir les demandes en cours'; $lang['report_bug'] = 'Signaler un bogue'; -$lang['see_open_bugs'] = 'voir les bogues en cours'; $lang['schema'] = 'schema'; $lang['search'] = 'chercher'; $lang['refresh'] = 'rafraîchir'; @@ -51,6 +49,7 @@ $lang['create_new'] = 'Cr $lang['view_schema_for'] = 'Voir les schemas pour'; $lang['refresh_expanded_containers'] = 'Rafraîchir tous les containeurs étendus'; $lang['create_new_entry_on'] = 'Créer une nouvelle entrée sur'; +$lang['new'] = 'nouveau'; $lang['view_server_info'] = 'Voir les informations sur le serveur'; $lang['import_from_ldif'] = 'Importer des entrées à partir d\'un fichier LDIF'; $lang['logout_of_this_server'] = 'Se déconnecter de ce serveur'; @@ -61,52 +60,44 @@ $lang['ldap_refuses_to_give_root'] = 'Il semble que le serveur LDAP a $lang['please_specify_in_config'] = 'Veuillez le spécifier dans le fichier config.php'; $lang['create_new_entry_in'] = 'Créer une nouvelle entrée dans'; $lang['login_link'] = 'Login...'; +$lang['login'] = 'login'; -// entry display +// Entry display $lang['delete_this_entry'] = 'Supprimer cette entrée'; $lang['delete_this_entry_tooltip'] = 'Il vous sera demandé confirmation'; $lang['copy_this_entry'] = 'Copier cette entrée'; $lang['copy_this_entry_tooltip'] = 'Copier cet objet vers un autre endroit, un nouveau DN ou un autre serveur'; -$lang['export_to_ldif'] = 'Exporter au format LDIF'; -$lang['export_to_ldif_tooltip'] = 'Sauvegarder cet objet au format LDIF'; -$lang['export_subtree_to_ldif_tooltip'] = 'Sauvegarder cet objet ainsi que tous les sous-objets au format LDIF'; -$lang['export_subtree_to_ldif'] = 'Exporter l\'arborescence au format LDIF'; -$lang['export_to_ldif_mac'] = 'Fins de ligne Macintosh'; -$lang['export_to_ldif_win'] = 'Fins de lignes Windows'; -$lang['export_to_ldif_unix'] = 'Fins de ligne Unix '; +$lang['export'] = 'Exporter'; +$lang['export_tooltip'] = 'Sauvegarder cet objet'; +$lang['export_subtree_tooltip'] = 'Sauvegarder cet objet ainsi que tous les sous-objets'; +$lang['export_subtree'] = 'Exporter l\'arborescence'; $lang['create_a_child_entry'] = 'Créer une sous-entrée'; -$lang['add_a_jpeg_photo'] = 'Ajouter un attribut jpegPhoto'; $lang['rename_entry'] = 'Renommer l\'entrée'; $lang['rename'] = 'Renommer'; $lang['add'] = 'Ajouter'; $lang['view'] = 'Voir'; +$lang['view_one_child'] = 'Voir 1 sous-entrée'; +$lang['view_children'] = 'Voir les %s sous-entrées'; $lang['add_new_attribute'] = 'Ajouter un nouvel attribut'; -$lang['add_new_attribute_tooltip'] = 'Ajouter un nouvel attribut/une nouvelle valeur à cette entrée'; -$lang['internal_attributes'] = 'Attributs Internes'; +$lang['add_new_objectclass'] = 'Ajouter une nouvelle classe d\'objet'; $lang['hide_internal_attrs'] = 'Cacher les attributs internes'; $lang['show_internal_attrs'] = 'Montrer les attributs internes'; -$lang['internal_attrs_tooltip'] = 'Attributs établis automatiquement par le système'; -$lang['entry_attributes'] = 'Attributs de l\'entrée'; $lang['attr_name_tooltip'] = 'Cliquer pour voir la définition de schéma pour l\'attribut de type \'%s\''; -$lang['click_to_display'] = 'Cliquer pour afficher'; -$lang['hidden'] = 'caché'; $lang['none'] = 'aucun'; $lang['save_changes'] = 'Sauver les modifications'; $lang['add_value'] = 'ajouter une valeur'; $lang['add_value_tooltip'] = 'Ajouter une valeur supplémentaire à cet attribut'; $lang['refresh_entry'] = 'Rafraichir'; -$lang['refresh'] = 'rafraîchir'; $lang['refresh_this_entry'] = 'Rafraîchir cette entrée'; -$lang['delete_hint'] = 'Note: Pour effacer un attribut, laissez le champs vide et cliquez pour sauvegarder.'; -$lang['attr_schema_hint'] = 'Note: Pour voir le schéma pour un attribut, cliquer sur le nom de l\'attribut.'; -$lang['attrs_modified'] = 'Certains attributs (%s) ont été mdoifiés et sont mis en évidence ci-dessous.'; +$lang['delete_hint'] = 'Note: Pour effacer un attribut, laissez le champs vide et cliquez pour sauvegarder.'; +$lang['attr_schema_hint'] = 'Note: Pour voir le schéma pour un attribut, cliquer sur le nom de l\'attribut.'; +$lang['attrs_modified'] = 'Certains attributs (%s) ont été modifiés et sont mis en évidence ci-dessous.'; $lang['attr_modified'] = 'Un attribut (%s) a été modifié et est mis en évidence ci-dessous.'; $lang['viewing_read_only'] = 'Voir une entrée en lecture seule.'; -$lang['change_entry_rdn'] = 'Changer le RDN de cette entrée'; $lang['no_new_attrs_available'] = 'plus d\'attributs disponibles pour cette entrée'; +$lang['no_new_binary_attrs_available'] = 'plus d\' attributs binaires disponibles pour cette entréé'; $lang['binary_value'] = 'Valeur de type binaire'; $lang['add_new_binary_attr'] = 'Ajouter un nouvel attribut de type binaire'; -$lang['add_new_binary_attr_tooltip'] = 'Ajouter un nouvel attribut à partir d\'un fichier'; $lang['alias_for'] = 'Alias pour'; $lang['download_value'] = 'Télécharger le contenu'; $lang['delete_attribute'] = 'Supprimer l\'attribut'; @@ -114,32 +105,89 @@ $lang['true'] = 'vrai'; $lang['false'] = 'faux'; $lang['none_remove_value'] = 'aucun, suppression de la valeur'; $lang['really_delete_attribute'] = 'Voulez-vous vraiment supprimer l\'attribut'; +$lang['add_new_value'] = 'Ajouter une nouvelle valeur'; // Schema browser -$lang['the_following_objectclasses'] = 'Les classes d\'objets (objectClasses) suivantes sont supportés par ce serveur LDAP.'; -$lang['the_following_attributes'] = 'Les types d\'attributs (attributesTypes) suivants sont supportés par ce serveur LDAP.'; -$lang['the_following_matching'] = 'Les opérateurs (matching rules) suivants sont supportés par ce serveur LDAP.'; -$lang['the_following_syntaxes'] = 'Les syntaxes suivantes sont supportés par ce serveur LDAP.'; +$lang['the_following_objectclasses'] = 'Les classes d\'objets (objectClasses) suivantes sont supportés par ce serveur LDAP.'; +$lang['the_following_attributes'] = 'Les types d\'attributs (attributesTypes) suivants sont supportés par ce serveur LDAP.'; +$lang['the_following_matching'] = 'Les opérateurs (matching rules) suivants sont supportés par ce serveur LDAP.'; +$lang['the_following_syntaxes'] = 'Les syntaxes suivantes sont supportés par ce serveur LDAP.'; +$lang['schema_retrieve_error_1']='Le serveur ne supporte pas entièrement le protocol LDAP.'; +$lang['schema_retrieve_error_2']='Votre version de PHP ne permet pas d\'exécute correctement la requête.'; +$lang['schema_retrieve_error_3']='Ou tout du moins, phpLDAPadmin ne sait pas comment récupérer le schéma pour votre serveur.'; $lang['jump_to_objectclass'] = 'Aller à une classe d\'objet'; $lang['jump_to_attr'] = 'Aller à un attribut'; +$lang['jump_to_matching_rule'] = 'Aller à une règle d\'égalité'; $lang['schema_for_server'] = 'Schema pour le serveur'; $lang['required_attrs'] = 'Attributs obligatoires'; -$lang['optional_attrs'] = 'Attributs facultatifs'; +$lang['optional_attrs'] = 'Attributs optionnels'; +$lang['optional_binary_attrs'] = 'Attributs binaires optionnels'; $lang['OID'] = 'OID'; +$lang['aliases']='Alias'; $lang['desc'] = 'Description'; +$lang['no_description']='aucune description'; $lang['name'] = 'Nom'; -$lang['is_obsolete'] = 'Cette classe d\'objet est obsolete'; +$lang['equality']='Egalité'; +$lang['is_obsolete'] = 'Cette classe d\'objet est obsolete'; $lang['inherits'] = 'hérite'; +$lang['inherited_from']='hérite de'; $lang['jump_to_this_oclass'] = 'Aller à la définition de cette classe d\'objet'; $lang['matching_rule_oid'] = 'OID de l\'opérateur'; $lang['syntax_oid'] = 'OID de la syntaxe'; $lang['not_applicable'] = 'not applicable'; $lang['not_specified'] = 'non spécifié'; +$lang['character']='caractère'; +$lang['characters']='caractères'; +$lang['used_by_objectclasses']='Utilisé par les objectClasses'; +$lang['used_by_attributes']='Utilisé par les attributes'; +$lang['maximum_length']='Maximum Length'; +$lang['attributes']='Types d\'attribut'; +$lang['syntaxes']='Syntaxes'; +$lang['objectclasses']='objectClasses'; +$lang['matchingrules']='Règles d\'égalité'; +$lang['oid']='OID'; +$lang['obsolete']='Obsolète'; +$lang['ordering']='Ordonné'; +$lang['substring_rule']='Substring Rule'; +$lang['single_valued']='Valeur Unique'; +$lang['collective']='Collective'; +$lang['user_modification']='Modification Utilisateur'; +$lang['usage']='Usage'; +$lang['maximum_length']='Longueur maximale'; +$lang['could_not_retrieve_schema_from']='Impossible de récupérer le schéma de'; +$lang['type']='Type'; // Deleting entries $lang['entry_deleted_successfully'] = 'Suppression de l\'entrée \'%s\' réussie.'; $lang['you_must_specify_a_dn'] = 'Un DN doit être spécifié'; $lang['could_not_delete_entry'] = 'Impossible de supprimer l\'entrée: %s'; +$lang['no_such_entry'] = 'Aucune entrée de ce type: %s'; +$lang['delete_dn'] = 'Delete %s'; +$lang['permanently_delete_children'] = 'Effacer également les sous-entrées?'; +$lang['entry_is_root_sub_tree'] = 'Cette entrée est la racine d\'une arborescence contenant %s entrées.'; +$lang['view_entries'] = 'voir les entrées'; +$lang['confirm_recursive_delete'] = 'phpLDAPadmin peut supprimer cette entrées ainsi que les %s noeuds enfants de façon récursive. Voir ci-dessous pour une liste des entrées que cette action suprimera. Voulez-vous continuer?'; +$lang['confirm_recursive_delete_note'] = 'Note: ceci est potentiellement très dangereux and vous faîtes cela à vos propres risques. Cette opération ne peut être annulée. Prenez en considération les alias ainsi que d\'autres choses qui pourraient causer des problèmes.'; +$lang['delete_all_x_objects'] = 'Suppressions des %s objets'; +$lang['recursive_delete_progress'] = 'Progression de la suppression récursive'; +$lang['entry_and_sub_tree_deleted_successfully'] = 'L\'entrée %s ainsi que la sous-arborescence de ce noeud ont été supprimés avec succès.'; +$lang['failed_to_delete_entry'] = 'Echec lors de la suppression de l\'entrée %s'; +$lang['list_of_entries_to_be_deleted'] = 'Liste des entrées à supprimer:'; +$lang['sure_permanent_delete_object']='Etes-vous certain de vouloir supprimer définitivement cet objet?'; +$lang['dn'] = 'DN'; + +// Deleting attributes +$lang['attr_is_read_only'] = 'L\'attribut "%s" est marqué comme étant en lecture seule dans la configuration de phpLDAPadmin.'; +$lang['no_attr_specified'] = 'Aucun nom d\'attributs spécifié.'; +$lang['no_dn_specified'] = 'Aucun DN specifié'; + +// Adding attributes +$lang['left_attr_blank'] = 'Vous avez laisser la valeur de l\'attribut vide. Veuillez s\'il vous plaît retourner à la page précédente et recommencer.'; +$lang['failed_to_add_attr'] = 'Echec lors de l\'ajout de l\'attribut.'; + +// Updating values +$lang['modification_successful'] = 'Modification réussie!'; +$lang['change_password_new_login'] = 'Votre mot de passe ayant été changé, vous devez maintenant vous logger avec votre nouveau mot de passe.'; // Adding objectClass form $lang['new_required_attrs'] = 'Nouveaux Attributs Obligatoires'; @@ -155,6 +203,7 @@ $lang['no_updates_in_read_only_mode'] = 'Vous ne pouvez effectuer des mises $lang['bad_server_id'] = 'Id de serveur invalide'; $lang['not_enough_login_info'] = 'Informations insuffisantes pour se logguer au serveur. Veuillez, s\'il vous plaî, vérifier votre configuration.'; $lang['could_not_connect'] = 'Impossible de se connecter au serveur LDAP.'; +$lang['could_not_connect_to_host_on_port'] = 'Impossible de se connecter à "%s" sur le port "%s"'; $lang['could_not_perform_ldap_mod_add'] = 'Echec lors de l\'opération ldap_mod_add.'; $lang['bad_server_id_underline'] = 'serveur_id invalide: '; $lang['success'] = 'Succès'; @@ -166,6 +215,22 @@ $lang['back_up_p'] = 'Retour...'; $lang['no_entries'] = 'aucune entrée'; $lang['not_logged_in'] = 'Vous n\'êtes pas loggué'; $lang['could_not_det_base_dn'] = 'Impossible de déterminer le DN de base'; +$lang['please_report_this_as_a_bug']='Veuillez s\'il-vous-plaît rapporter ceci comme un bogue.'; +$lang['reasons_for_error']='Ceci peut arriver pour plusieurs raisons, les plus probables sont:'; +$lang['yes']='Oui'; +$lang['no']='Non'; +$lang['go']='Go'; +$lang['delete']='Suppression'; +$lang['back']='Back'; +$lang['object']='object'; +$lang['delete_all']='Tous les supprimer'; +$lang['url_bug_report']='https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; +$lang['hint'] = 'Astuce'; +$lang['bug'] = 'bogue'; +$lang['warning'] = 'Avertissement'; +$lang['light'] = 'lumière'; // the word 'light' from 'light bulb' +$lang['proceed_gt'] = 'Continuer >>'; + // Add value form $lang['add_new'] = 'Ajout d\'une nouvelle valeur '; @@ -174,7 +239,7 @@ $lang['distinguished_name'] = 'Distinguished Name'; $lang['current_list_of'] = 'Liste actuelle de'; $lang['values_for_attribute'] = 'valeur(s) pour l\' attribut'; $lang['inappropriate_matching_note'] = 'Note: Vous obtiendrez une erreur de type "inappropriate matching" si vous n\'avez pas
' . - 'défini une règle EQUALITY pour cet attribut auprès du serveur LDAP.'; + 'défini une règle "EQUALITY" pour cet attribut auprès du serveur LDAP.'; $lang['enter_value_to_add'] = 'Entrez la valeur que vous voulez ajouter:'; $lang['new_required_attrs_note'] = 'Note: vous aurez peut-êre besoin d\'introduire de nouveaux attributs requis pour cette classe d\'objet'; $lang['syntax'] = 'Syntaxe'; @@ -195,6 +260,14 @@ $lang['copy_failed'] = 'Echec lors de la copie de: '; //edit.php $lang['missing_template_file'] = 'Avertissement: le fichier modèle est manquant, '; $lang['using_default'] = 'Utilisation du modèle par défaut.'; +$lang['template'] = 'Modèle'; +$lang['must_choose_template'] = 'Vous devez choisir un modèle'; +$lang['invalid_template'] = '%s est un modèle non valide'; +$lang['using_template'] = 'Utilisation du modèle'; +$lang['go_to_dn'] = 'Aller à %s'; + + + //copy_form.php $lang['copyf_title_copy'] = 'Copie de '; @@ -204,31 +277,45 @@ $lang['copyf_dest_dn_tooltip'] = 'Le DN de la nouvelle entr $lang['copyf_dest_server'] = 'Destination Serveur'; $lang['copyf_note'] = 'Note: La copie entre différents serveurs fonctionne seulement si il n\'y a pas de violation de schéma'; $lang['copyf_recursive_copy'] = 'Copier récursivement les sous-entrées de cet object.'; +$lang['recursive_copy'] = 'Copie récursive'; +$lang['filter'] = 'Filtre'; +$lang['filter_tooltip'] = 'Lors d\'une copie récursive, seuls les entrées correspondant à ce filtre seront copiés'; //create.php -$lang['create_required_attribute'] = 'Une valeur n\'a pas été spécifiée pour l\'attribut requis %s.'; -$lang['create_redirecting'] = 'Redirection'; -$lang['create_here'] = 'ici'; +$lang['create_required_attribute'] = 'Une valeur n\'a pas été spécifiée pour l\'attribut requis %s.'; +$lang['redirecting'] = 'Redirection'; +$lang['here'] = 'ici'; $lang['create_could_not_add'] = 'L\'ajout de l\'objet au serveur LDAP n\'a pu être effectuée.'; +$lang['rdn_field_blank'] = 'Vous avez laisser le champ du RDN vide.'; +$lang['container_does_not_exist'] = 'Le containeur que vous avez spécifié (%s) n\'existe pas. Veuillez, s\'il vous plaît recommencer.'; +$lang['no_objectclasses_selected'] = 'Vous n\'avez sélectionner aucun ObjectClasses pour cet objet. Veuillez s\'il vous plaît retourner à la page précédente et le faire.'; +$lang['hint_structural_oclass'] = 'Note: Vous devez choisir au moins une classe d\'objet de type structural'; //create_form.php $lang['createf_create_object'] = 'Creation d\'un objet'; $lang['createf_choose_temp'] = 'Choix d\'un modèle'; $lang['createf_select_temp'] = 'Selectionner un modèle pour la procédure de création'; $lang['createf_proceed'] = 'Continuer'; +$lang['relative_distinguished_name'] = 'Relative Distinguished Name'; +$lang['rdn'] = 'RDN'; +$lang['rdn_example'] = '(exemple: cn=MyNewPerson)'; +$lang['container'] = 'Containeur'; +$lang['alias_for'] = 'Alias pour %s'; + //creation_template.php $lang['ctemplate_on_server'] = 'Sur le serveur'; $lang['ctemplate_no_template'] = 'Aucun modèle spécifié dans les variables POST.'; $lang['ctemplate_config_handler'] = 'Votre configuration scécifie un gestionnaire de'; $lang['ctemplate_handler_does_not_exist'] = 'pour ce modèle. Cependant, ce gestionnaire n\'existe pas dans le répertoire \'templates/creation\'.'; - +$lang['create_step1'] = 'Etape 1 de 2: Nom et classes d\'objet'; +$lang['create_step2'] = 'Etape 2 de 2: Définition des attributs et de leurs valeurs'; //search.php $lang['you_have_not_logged_into_server'] = 'Vous ne vous êtes pas encore loggé auprès du serveur sélectionné. Vous ne pouvez y effectuer des recherches.'; $lang['click_to_go_to_login_form'] = 'Cliquer ici pour vous rendre au formulaire de login'; $lang['unrecognized_criteria_option'] = 'Critère non reconnu: '; $lang['if_you_want_to_add_criteria'] = 'Si vous voulez ajouter vos propres critère à la liste, soyez cetain d\'éditer search.php afin de pouvoir les gérer.'; -$lang['entries_found'] = 'Entrées trouvée: '; +$lang['entries_found'] = 'Entrées trouvées: '; $lang['filter_performed'] = 'Filtre utilisé: '; $lang['search_duration'] = 'Recherche effectuée par phpLDAPadmin en'; $lang['seconds'] = 'secondes'; @@ -274,24 +361,28 @@ $lang['go_back'] = 'Retour'; // welcome.php $lang['welcome_note'] = 'Utilisez le menu de gauche pour la navigation'; +$lang['credits'] = 'Crédits'; +$lang['changelog'] = 'ChangeLog'; +$lang['donate'] = 'Donation'; // view_jpeg_photo.php $lang['unsafe_file_name'] = 'Nom de fichier non sûr: '; $lang['no_such_file'] = 'Aucun fichier trouvé: '; //function.php -$lang['auto_update_not_setup'] = 'auto_uid_numbers a été activé pour %s dans votre configuration, - mais vous n\'avez pas spécifié l\' auto_uid_number_mechanism. Veuiller corriger +$lang['auto_update_not_setup'] = '"auto_uid_numbers" a été activé pour %s dans votre configuration, + mais vous n\'avez pas spécifié le mécanisme "auto_uid_number_mechanism". Veuiller corriger ce problème.'; -$lang['uidpool_not_set'] = 'Vous avez spécifié lauto_uid_number_mechanism comme uidpool +$lang['uidpool_not_set'] = 'Vous avez spécifié lauto_uid_number_mechanism comme uidpool dans la configuration du serveur %s, mais vous n\'avez pas spécifié de valeur pour auto_uid_number_uid_pool_dn. Veuillez le spécifier avant de continuer.'; -$lang['uidpool_not_exist'] = 'Le uidPool que vous avez spécifié dans votre configuration (%s) +$lang['uidpool_not_exist'] = 'Le uidPool que vous avez spécifié dans votre configuration (%s) n\'existe pas.'; -$lang['specified_uidpool'] = 'L\'auto_uid_number_mechanism a été défini à search dans votre - configuration pour le serveur %s, mais vous n\'avez pas défini - auto_uid_number_search_base. Veuillez le spécifier avant de continuer.'; -$lang['auto_uid_invalid_value'] = 'Une valeur non valide a été spécifiée pour auto_uid_number_mechanism (%s) +$lang['specified_uidpool'] = 'Le méchanisme "auto_uid_number_mechanism" a été défini à search dans votre + configuration pour le serveur %s, mais la directive "auto_uid_number_search_base" n\'est pad définie. Veuillez le spécifier avant de continuer.'; +$lang['auto_uid_invalid_credential'] = 'Impossible d\'effectuer un "bind" à %s avec vos droits pour "auto_uid". Veuillez S\'il vous plaît vérifier votre fichier de configuration.'; +$lang['bad_auto_uid_search_base'] = 'Votre fichier de configuration spécifie un invalide auto_uid_search_base pour le serveur %s'; +$lang['auto_uid_invalid_value'] = 'Une valeur non valide a été spécifiée pour le méchaninsme "auto_uid_number_mechanism" (%s) dans votre configuration. Seul uidpool et search sont valides. Veuillez corriger ce problème.'; $lang['error_auth_type_config'] = 'Erreur: Vous avez une erreur dans votre fichier de configuration.Les valeurs @@ -299,7 +390,12 @@ $lang['error_auth_type_config'] = 'Erreur: Vous avez une erreur dans votre fichi Vous avez mis \'%s\', ce qui n\'est pas autorisé.'; $lang['php_install_not_supports_tls'] = 'Votre installation PHP ne supporte pas TLS.'; $lang['could_not_start_tls'] = 'Impossible de démarrer TLS.
Veuillez,s\'il vous plaît, vérifier la configuration de votre serveur LDAP.'; -$lang['auth_type_not_valid'] = 'Vous avez une erreur dans votre fichier de configuration. auth_type %s n\'est pas valide.'; +$lang['could_not_bind_anon'] = 'Impossible d\'effectuer un "bind" anonyme.'; +$lang['anonymous_bind'] = 'Bind Anonyme'; +$lang['bad_user_name_or_password'] = 'Mauvais nom d\'utilisateur ou mot de passe. Veuillez recommencer s\'il vous plaît.'; +$lang['redirecting_click_if_nothing_happens'] = 'Redirection... Cliquez ici si rien ne se passe.'; +$lang['successfully_logged_in_to_server'] = 'Login réussi sur le serveur %s'; +$lang['could_not_set_cookie'] = 'Impossible d\'activer les cookies.'; $lang['ldap_said'] = 'LDAP said: %s

'; $lang['ferror_error'] = 'Erreur'; $lang['fbrowse'] = 'naviguer'; @@ -343,6 +439,15 @@ $lang['add_action'] = 'Ajout de...'; $lang['delete_action'] = 'Supression de...'; $lang['rename_action'] = 'Renommage de...'; $lang['modify_action'] = 'Modification de...'; +$lang['warning_no_ldif_version_found'] = 'Aucun numéro de version trouvé. Version 1 supposé.'; +$lang['valid_dn_line_required'] = 'Une ligne avec un dn valide est requis.'; +$lang['valid_dn_line_required'] = 'A valid dn line is required.'; +$lang['missing_uploaded_file'] = 'Le fichier est manquant.'; +$lang['no_ldif_file_specified.'] = 'Aucun fichier LDIFspécifié. Veuillez réessayer, s\'il vous plaît.'; +$lang['ldif_file_empty'] = 'Le fichier LDIF est vide.'; +$lang['file'] = 'Fichier'; +$lang['number_bytes'] = '%s bytes'; + $lang['failed'] = 'échec'; $lang['ldif_parse_error'] = 'Erreur lors de l\'analyse du fichier LDIF'; $lang['ldif_could_not_add_object'] = 'Impossible d\'ajouter l\'objet:'; @@ -352,4 +457,70 @@ $lang['ldif_could_not_modify_object'] = 'Impossible de modifier l\'objet:'; $lang['ldif_line_number'] = 'Numéro de ligne'; $lang['ldif_line'] = 'Ligne'; +//delete_form +$lang['sure_permanent_delete_object']='Etes-vous certain de vouloir supprimer définitivement cet objet?'; +$lang['list_of_entries_to_be_deleted'] = 'Liste des entrées à supprimer:'; +$lang['dn'] = 'DN'; + +// Exports +$lang['export_format'] = 'Format'; +$lang['line_ends'] = 'Fin de ligne'; +$lang['must_choose_export_format'] = 'Vous devez sélectionner un format pour l\'exportation.'; +$lang['invalid_export_format'] = 'Format d\'exportation invalide'; +$lang['no_exporter_found'] = 'Aucun exporteur trouvé.'; +$lang['error_performing_search'] = 'Une erreur a eu lieu lors de la recherche.'; +$lang['showing_results_x_through_y'] = 'Affichage de %s à %s des résultats.'; +$lang['searching'] = 'Recherche...'; +$lang['size_limit_exceeded'] = 'Notice, la limite de taille pour la recherche est atteinte.'; +$lang['entry'] = 'Entrée'; +$lang['ldif_export_for_dn'] = 'Export LDIF pour: %s'; +$lang['generated_on_date'] = 'Generé par phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) le %s'; +$lang['total_entries'] = 'Nombre d\'entrées'; +$lang['dsml_export_for_dn'] = 'Export DSML pour: %s'; + + +// logins +$lang['could_not_find_user'] = 'Impossible de trouver l\'utilisateur "%s"'; +$lang['password_blank'] = 'Le champ pour le mot de passe est vide.'; +$lang['login_cancelled'] = 'Login interrompu.'; +$lang['no_one_logged_in'] = 'Personne n\'est loggé à ce serveur.'; +$lang['could_not_logout'] = 'Impossible de se déconnecter.'; +$lang['unknown_auth_type'] = 'auth_type inconnu: %s'; +$lang['logged_out_successfully'] = 'Déconnection réussie du serveur %s'; +$lang['authenticate_to_server'] = 'Authentification au serveur %s'; +$lang['warning_this_web_connection_is_unencrypted'] = 'Attention: Cette connection web n\'est pas cryptée.'; +$lang['not_using_https'] = 'Vous n\'utilisez pas \'https\'. Le navigateur web transmettra les informations de login en clair.'; +$lang['login_dn'] = 'Login DN'; +$lang['user_name'] = 'Nom de l\'utilisateur'; +$lang['password'] = 'Mot de passe'; +$lang['authenticate'] = 'Authentification'; + +// Entry browser +$lang['entry_chooser_title'] = 'Sélection de l\'entrée'; + +// Index page +$lang['need_to_configure'] = 'phpLDAPadmin a besoin d\'être configuré.Pour cela, éditer le fichier \'config.php\' . Un exemple de fichier de configuration est fourni dans \'config.php.example\''; + +// Mass deletes +$lang['no_deletes_in_read_only'] = 'Les suppressions ne sont pas permises en mode lecure seule.'; +$lang['error_calling_mass_delete'] = 'Erreur lors de l\'appel à mass_delete.php. mass_delete est manquant dans les variables POST.'; +$lang['mass_delete_not_array'] = 'La variable POST mass_delete \'est pas un tableau.'; +$lang['mass_delete_not_enabled'] = 'La suppression de masse n\'est pas disponible. Veuillez l\'activer dans config.php avant de continuer.'; +$lang['mass_deleting'] = 'Suppression en masse'; +$lang['mass_delete_progress'] = 'Progrès de la suppression sur le serveur "%s"'; +$lang['malformed_mass_delete_array'] = 'Le tableau mass_delete n\'est pas bien formé.'; +$lang['no_entries_to_delete'] = 'Vous n\'avez sélectionné aucune entrées à effacer.'; +$lang['deleting_dn'] = 'Deleting %s'; +$lang['total_entries_failed'] = '%s des %s entrées n\'ont pu être supprimées.'; +$lang['all_entries_successful'] = 'Toutes les entrées ont été supprimées avec succès.'; +$lang['confirm_mass_delete'] = 'Confirmation de la suppression en masse de %s entrées sur le serveur %s'; +$lang['yes_delete'] = 'Oui, supprimer!'; + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'Vous ne pouvez pas renommer une entrée qui a des sous-entrées'; +$lang['no_rdn_change'] = 'Le RDN n\'a pas été modifié'; +$lang['invalid_rdn'] = 'Valeur invalide du RDN'; +$lang['could_not_rename'] = 'Impossible de renommer l\'entrée'; + + ?> diff --git a/lang/hu.php b/lang/hu.php new file mode 100644 index 0000000..68efcc4 --- /dev/null +++ b/lang/hu.php @@ -0,0 +1,556 @@ + + * with help from SIPOS Agnes + * $Header: /cvsroot/phpldapadmin/phpldapadmin/lang/hu.php,v 1.1 2004/05/23 21:12:03 i18phpldapadmin Exp $ + */ + +/* --- INSTRUCTIONS FOR TRANSLATORS --- + * + * If you want to write a new language file for your language, + * please submit the file on SourceForge: + * + * https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498548 + * + * Use the option "Check to Upload and Attach a File" at the bottom + * + * Thank you! + * + */ + +/* + * The $lang array contains all the strings that phpLDAPadmin uses. + * Each language file simply defines this aray with strings in its + * language. + */ + +// Search form +$lang['simple_search_form_str'] = 'Egyszerű keresési űrlap'; // 'Simple Search Form'; +$lang['advanced_search_form_str'] = 'Részletes keresési űrlap'; //'Advanced Search Form'; +$lang['server'] = 'Kiszolgáló'; //'Server'; +$lang['search_for_entries_whose'] = 'Bejegyzések keresése ahol'; //'Search for entries whose'; +$lang['base_dn'] = 'Alap-DN'; //'Base DN'; +$lang['search_scope'] = 'A keresés hatásköre'; //'Search Scope'; +$lang['show_attributes'] = 'MegjelenítendÅ‘ attribútumok'; //'Show Attributtes'; +$lang['Search'] = 'Keresés'; //'Search'; +$lang['predefined_search_str'] = 'ElÅ‘re definiált keresés kiválasztása'; //'Select a predefined search'; +$lang['predefined_searches'] = 'ElÅ‘re definiált keresések'; //'Predefined Searches'; +$lang['no_predefined_queries'] = 'Nincs keresés definiálva a config.php-ben.'; //'No queries have been defined in config.php.'; + +// Tree browser +$lang['request_new_feature'] = 'Új tulajdonság kérése'; //'Request a new feature'; +$lang['report_bug'] = 'Hiba jelentése'; //'Report a bug'; +$lang['schema'] = 'séma'; //'schema'; +$lang['search'] = 'keresés'; //'search'; +$lang['create'] = 'létrehozás'; //'create'; +$lang['info'] = 'infó'; //'info'; +$lang['import'] = 'import'; //'import'; +$lang['refresh'] = 'frissítés'; //'refresh'; +$lang['logout'] = 'kilépés'; //'logout'; +$lang['create_new'] = 'Új bejegyzés'; //'Create New'; +$lang['view_schema_for'] = 'Séma megtekintése:'; //'View schema for'; +$lang['refresh_expanded_containers'] = 'Az összes kiterjesztett tároló frissítése:'; //'Refresh all expanded containers for'; +$lang['create_new_entry_on'] = 'Új bejegyzés létrehozása:'; //'Create a new entry on'; +$lang['new'] = 'új'; //'new'; +$lang['view_server_info'] = 'A kiszolgáló információinak megtekintése'; //'View server-supplied information'; +$lang['import_from_ldif'] = 'LDIF-állományból bejegyzések importálása'; //'Import entries from an LDIF file'; +$lang['logout_of_this_server'] = 'Kilépés ebbÅ‘l a kiszolgálóból'; //'Logout of this server'; +$lang['logged_in_as'] = 'Belépve mint'; //'Logged in as: '; +$lang['read_only'] = 'csak olvasható'; //'read only'; +$lang['read_only_tooltip'] = 'A phpLDAPadmin adminisztrátora ezt az attribútumot csak olvashatóra állította'; //'This attribute has been flagged as read only by the phpLDAPadmin administrator'; +$lang['could_not_determine_root'] = 'Nem tudom megállapítani az LDAP-fa gyökerét.'; //'Could not determine the root of your LDAP tree.'; +$lang['ldap_refuses_to_give_root'] = 'Az LDAP-kiszolgálót úgy konfigurálták, hogy ne fedje föl az LDAP-fa gyökerét.'; //'It appears that the LDAP server has been configured to not reveal its root.'; +$lang['please_specify_in_config'] = 'Kérem adja meg a config.php-ban'; //'Please specify it in config.php'; +$lang['create_new_entry_in'] = 'Új bejegyzés létrehozása:'; //'Create a new entry in'; +$lang['login_link'] = 'Belépés...'; //'Login...'; +$lang['login'] = 'belépés'; //'login'; + +// Entry display +$lang['delete_this_entry'] = 'A bejegyzés törlése'; //'Delete this entry'; +$lang['delete_this_entry_tooltip'] = 'Ezt a döntést majd még meg kell erÅ‘síteni'; //'You will be prompted to confirm this decision'; +$lang['copy_this_entry'] = 'A bejegyzés másolása'; //'Copy this entry'; +$lang['copy_this_entry_tooltip'] = 'Az objektum másolása más helyre új DN-nel és/vagy másik kiszolgálóra'; //'Copy this object to another location, a new DN, or another server'; +$lang['export'] = 'Exportálás'; //'Export'; +$lang['export_tooltip'] = 'Az objektum kiírása'; //'Save a dump of this object'; +$lang['export_subtree_tooltip'] = 'Az objektum és az összes gyermekének kiírása'; //'Save a dump of this object and all of its children'; +$lang['export_subtree'] = 'Részfa exportálása'; //'Export subtree'; +$lang['create_a_child_entry'] = 'Gyermekbejegyzés létrehozása'; //'Create a child entry'; +$lang['rename_entry'] = 'A bejegyzés átnevezése'; 'Rename Entry'; +$lang['rename'] = 'Ãtnevezés'; //'Rename'; +$lang['add'] = 'Hozzáadás'; //'Add'; +$lang['view'] = 'Megtekintés'; //'View'; +$lang['view_one_child'] = 'A gyermek megtekintése (1 darab)'; //'View 1 child'; +$lang['view_children'] = 'A gyermekek megtekintése (%s darab)'; //'View %s children'; +$lang['add_new_attribute'] = 'Új attribútum hozzáadása'; //'Add new attribute'; +$lang['add_new_objectclass'] = 'Új objektumosztály hozzáadása'; //'Add new ObjectClass'; +$lang['hide_internal_attrs'] = 'BelsÅ‘ attribútumok elrejtése'; //'Hide internal attributes'; +$lang['show_internal_attrs'] = 'BelsÅ‘ attribútumok megjelenítése'; //'Show internal attributes'; +$lang['attr_name_tooltip'] = 'Kattintással megjelenik a(z) %s attribútumtípus sémabeli definíciója'; //'Click to view the schema defintion for attribute type \'%s\''; +$lang['none'] = 'nincs'; //'none'; +$lang['no_internal_attributes'] = 'Nincs belsÅ‘ attribútum'; //'No internal attributes'; +$lang['no_attributes'] = 'A bejegyzésnek nincs attribútuma'; //'This entry has no attributes'; +$lang['save_changes'] = 'Változások mentése'; //'Save Changes'; +$lang['add_value'] = 'érték hozzáadása'; //'add value'; +$lang['add_value_tooltip'] = 'Érték hozzáadása a(z) %s attribútumhoz'; //'Add an additional value to attribute \'%s\''; +$lang['refresh_entry'] = 'Frissítés'; //'Refresh'; +$lang['refresh_this_entry'] = 'Bejegyzés frissítése'; //'Refresh this entry'; +$lang['delete_hint'] = 'Tipp: Az attribútum törléséhez elÅ‘bb törölje a mezÅ‘t, majd kattintson a változtatások mentésére.'; //'Hint: To delete an attribute, empty the text field and click save.'; +$lang['attr_schema_hint'] = 'Tipp: Az attribútum sémájának megtekintéséhez kattintson az attribútum nevére.'; //'Hint: To view the schema for an attribute, click the attribute name.'; +$lang['attrs_modified'] = 'Módosult néhány attribútum (%s), s ezek kiemelve szerepelnek az alábbiakban.'; //'Some attributes (%s) were modified and are highlighted below.'; +$lang['attr_modified'] = 'Módosult egy attribútum (%s), s ez kiemelve szerepel az alábbiakban. '; //'An attribute (%s) was modified and is highlighted below.'; +$lang['viewing_read_only'] = 'A bejegyzés megtekintése csak olvasható üzemmódban.'; //'Viewing entry in read-only mode.'; +$lang['no_new_attrs_available'] = 'a bejegyzéshez nem tartozik új attribútum'; //'no new attributes available for this entry'; +$lang['no_new_binary_attrs_available'] = 'a bejegyzéshez nem tartozik új bináris attribútum'; //'no new binary attributes available for this entry'; +$lang['binary_value'] = 'Bináris érték'; //'Binary value'; +$lang['add_new_binary_attr'] = 'Új bináris attribútum hozzáadása'; //'Add new binary attribute'; +$lang['alias_for'] = 'Megj.: A(z) %s egy álneve (aliasa) a(z) %s attribútumnak'; //'Note: \'%s\' is an alias for \'%s\''; +$lang['download_value'] = 'érték letöltése'; //'download value'; +$lang['delete_attribute'] = 'attribútum törlése'; //'delete attribute'; +$lang['true'] = 'igaz'; //'true'; +$lang['false'] = 'hamis'; //'false'; +$lang['none_remove_value'] = 'nincs, érték törése'; //'none, remove value'; +$lang['really_delete_attribute'] = 'Attribútum tényleges törlése'; //'Really delete attribute'; +$lang['add_new_value'] = 'Új érték hozzáadása'; //'Add New Value'; + +// Schema browser +$lang['the_following_objectclasses'] = 'A következÅ‘ objektumosztályokat (objectClass) támogatja ez a kiszolgáló.'; //'The following objectClasses are supported by this LDAP server.'; +$lang['the_following_attributes'] = 'A következÅ‘ attribútumtípusokat (attributeType) támogatja ez a kiszolgáló.'; //'The following attributeTypes are supported by this LDAP server.'; +$lang['the_following_matching'] = 'A következÅ‘ illesztÅ‘szabályokat (matching rule) támogatja ez a kiszolgáló.'; //'The following matching rules are supported by this LDAP server.'; +$lang['the_following_syntaxes'] = 'A következÅ‘ szintaxisokat (syntax) támogatja ez a kiszolgáló.'; //'The following syntaxes are supported by this LDAP server.'; +$lang['schema_retrieve_error_1']= 'A kiszolgáló nem beszéli elég jól az LDAP-protokollt'; //'The server does not fully support the LDAP protocol.'; +$lang['schema_retrieve_error_2']= 'Ez a PHP-verzió nem tudja szabályosan végrehajtani a keresést.'; //'Your version of PHP does not correctly perform the query.'; +$lang['schema_retrieve_error_3']= 'Vagy végül is a phpLDAPadmin nem tudja hogyan kell a sémát letölteni errÅ‘l a kiszolgálóról.'; //'Or lastly, phpLDAPadmin doesn\'t know how to fetch the schema for your server.'; +$lang['jump_to_objectclass'] = 'Ugrás az objektumosztályhoz'; //'Jump to an objectClass'; +$lang['jump_to_attr'] = 'Ugrás az attribútumtípushoz'; //'Jump to an attribute type'; +$lang['jump_to_matching_rule'] = 'Ugrás az illesztÅ‘szabályhoz'; //'Jump to a matching rule'; +$lang['schema_for_server'] = 'Séma:'; //'Schema for server'; +$lang['required_attrs'] = 'KötelezÅ‘ attribútumok'; //'Required Attributes'; +$lang['optional_attrs'] = 'Opcionális attribútumok'; //'Optional Attributes'; +$lang['optional_binary_attrs'] = 'Opcionális bináris attribútumok'; //'Optional Binary Attributes'; +$lang['OID'] = 'OID'; //'OID'; +$lang['aliases']='Ãlnevek (alias)'; //'Aliases'; +$lang['desc'] = 'Leírás'; //'Description'; +$lang['no_description'] = 'nincs leírás'; //'no description'; +$lang['name'] = 'Név'; //'Name'; +$lang['equality']='EgyenlÅ‘ség'; //'Equality'; +$lang['is_obsolete'] = 'Ez az objektumosztály maradi'; //'This objectClass is obsolete.'; +$lang['inherits'] = 'KitÅ‘l öröklÅ‘dik'; //'Inherits from'; +$lang['inherited_from'] = 'KitÅ‘l örökölte:'; //'Inherited from'; +$lang['parent_to'] = 'Kinek a szülÅ‘je'; //'Parent to'; +$lang['jump_to_this_oclass'] = 'Ugrás ehhez az objektumosztály-definícióhoz'; //'Jump to this objectClass definition'; +$lang['matching_rule_oid'] = 'IllesztÅ‘szabály-OID'; //'Matching Rule OID'; +$lang['syntax_oid'] = 'Szintaxis-OID'; //'Syntax OID'; +$lang['not_applicable'] = 'nem alkalmazható'; //'not applicable'; +$lang['not_specified'] = 'nincs megadva'; //'not specified'; +$lang['character'] = 'karakter'; //'character'; +$lang['characters'] = 'karakter'; //'characters'; +$lang['used_by_objectclasses'] = 'Mely osztályok használják'; //'Used by objectClasses'; +$lang['used_by_attributes'] = 'Mely attribútumok használják'; //'Used by Attributes'; +$lang['maximum_length'] = 'Maximális hossz'; //'Maximum Length'; +$lang['attributes'] = 'Attribútumtípusok';//'Attribute Types'; +$lang['syntaxes'] = 'Szintaxisok'; //'Syntaxes'; +$lang['matchingrules'] = 'IllesztÅ‘szabályok'; //'Matching Rules'; +$lang['oid'] = 'OID'; //'OID'; +$lang['obsolete'] = 'Maradi'; //'Obsolete'; +$lang['ordering'] = 'Sorbarendezés'; //'Ordering'; +$lang['substring_rule'] = 'Alfüzér-szabály'; //'Substring Rule'; +$lang['single_valued'] = 'Egyértékű'; //'Single Valued'; +$lang['collective'] = 'Kollektív'; //'Collective'; +$lang['user_modification'] = 'Felhasználó-módosítás'; //'User Modification'; +$lang['usage'] = 'Használat'; //'Usage'; +$lang['could_not_retrieve_schema_from'] = 'Nem tudom a sémát elérni,'; //'Could not retrieve schema from'; +$lang['type']='Típus'; //'Type'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'A(z) %s bejegyzés sikeresen törölve.'; //'Entry %s deleted successfully.'; +$lang['you_must_specify_a_dn'] = 'A DN-t meg kell adni'; //'You must specify a DN'; +$lang['could_not_delete_entry'] = 'Nem tudom a(z) %s bejegyzést törölni'; //'Could not delete the entry: %s'; +$lang['no_such_entry'] = 'Nincs ilyen bejegyzés: %s'; //'No such entry: %s'; +$lang['delete_dn'] = 'A(z) %s törlése'; //'Delete %s'; +$lang['permanently_delete_children'] = 'Az összes gyermeket is töröljem?'; //'Permanently delete all children also?'; +$lang['entry_is_root_sub_tree'] = 'Ez a bejegyzés egy %s bejegyzést tartalmazó részfa gyökere.'; //'This entry is the root of a sub-tree containing %s entries.'; +$lang['view_entries'] = 'bejegyzések megtekintése'; //'view entries'; +$lang['confirm_recursive_delete'] = 'Rekurzív módon törölhetem ezt a bejegyzést, és mind a(z) %s gyermekét. Lásd alul a bejegyzéseket, amelyeket törölnék. Óhajtja törölni?'; //'phpLDAPadmin can recursively delete this entry and all %s of its children. See below for a list of all the entries that this action will delete. Do you want to do this?'; +$lang['confirm_recursive_delete_note'] = 'Megj.: Ez a törlés veszélyes lehet. A műveletet nem lehet visszavonni!'; //'Note: this is potentially very dangerous and you do this at your own risk. This operation cannot be undone. Take into consideration aliases, referrals, and other things that may cause problems.'; +$lang['delete_all_x_objects'] = 'Mind a(z) %s objektum törlése'; //'Delete all %s objects'; +$lang['recursive_delete_progress'] = 'A rekurzív törlés folyamatban'; //'Recursive delete progress'; +$lang['entry_and_sub_tree_deleted_successfully'] = 'A(z) %s bejegyzés és a részfa sikeresen törölve.'; //'Entry %s and sub-tree deleted successfully.'; +$lang['failed_to_delete_entry'] = 'A(z) %s bejegyzés törlése sikertelen'; //'Failed to delete entry %s'; +$lang['list_of_entries_to_be_deleted'] = 'A törlendÅ‘ bejegyzések listája:'; //'List of entries to be deleted:'; +$lang['sure_permanent_delete_object']='Biztos törölni óhajtja ezt az objektumot?'; //'Are you sure you want to permanently delete this object?'; +$lang['dn'] = 'DN'; //'DN'; + +// Deleting attributes +$lang['attr_is_read_only'] = 'A(z) %s attribútum csak olvasható a phpLDAPadmin konfigurációja szerint.'; //'The attribute "%s" is flagged as read-only in the phpLDAPadmin configuration.'; +$lang['no_attr_specified'] = 'Nincs megadva az attribútumnév.'; //'No attribute name specified.'; +$lang['no_dn_specified'] = 'Nincs megadva a DN'; //'No DN specified'; + +// Adding attributes +$lang['left_attr_blank'] = 'Az attribútumértéket üresen hagyta. Kérem lépjen vissza és próbálja újra.'; //'You left the attribute value blank. Please go back and try again.'; +$lang['failed_to_add_attr'] = 'Nem tudtam az attribútumot hozzáadni.'; //'Failed to add the attribute.'; +$lang['file_empty'] = 'A kiválasztott állomány vagy üres, vagy nem létezik. Kérem lépjen vissza és próbálja újra.'; //'The file you chose is either empty or does not exist. Please go back and try again.'; +$lang['invalid_file'] = 'Biztonsági hiba: a feltöltendÅ‘ állomány veszélyes elemeket tartalmazhat.'; //'Security error: The file being uploaded may be malicious.'; +$lang['warning_file_uploads_disabled'] = 'A PHP-konfiguráció tiltja az állományok feltöltését. Kérem ellenÅ‘rizze a php.ini állományt.'; //'Your PHP configuration has disabled file uploads. Please check php.ini before proceeding.'; +$lang['uploaded_file_too_big'] = 'A feltöltött állomány túl nagy. Kérem ellenÅ‘rizze a php.ini állományban a upload_max_size beállítást.'; //'The file you uploaded is too large. Please check php.ini, upload_max_size setting'; +$lang['uploaded_file_partial'] = 'A kiválasztott állomány csak részben töltÅ‘dött föl valószínűleg hálózati hiba miatt.'; //'The file you selected was only partially uploaded, likley due to a network error.'; +$lang['max_file_size'] = 'Maximális állományméret: %s'; //'Maximum file size: %s'; + +// Updating values +$lang['modification_successful'] = 'A módosítás sikerült!'; //'Modification successful!'; +$lang['change_password_new_login'] = 'Mivel megváltoztatta a jelszót most újra be kell jelentkeznie az új jelszóval.'; //'Since you changed your password, you must now login again with your new password.'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'Új kötelezÅ‘ attribútumok'; //'New Required Attributes'; +$lang['requires_to_add'] = 'Ez a művelet megközeveteli hogy hozzáadjon'; //'This action requires you to add'; +$lang['new_attributes'] = 'új attribútumo(ka)t'; //'new attributes'; +$lang['new_required_attrs_instructions'] = 'Az új objektumosztály hozzáadásához'; //'Instructions: In order to add this objectClass to this entry, you must specify'; +$lang['that_this_oclass_requires'] = 'kell megadni ezen az űrlapon.'; //'that this objectClass requires. You can do so in this form.'; +$lang['add_oclass_and_attrs'] = 'Objektumosztály és attribútumok hozzáadása'; //'Add ObjectClass and Attributes'; +$lang['objectclasses'] = 'Objektumosztályok'; //'ObjectClasses'; + +// General +$lang['chooser_link_tooltip'] = 'Kattintásra egy új ablak jön föl, amelyben egy bejegyzést választhat a DN alapján.'; //'Click to popup a dialog to select an entry (DN) graphically'; +$lang['no_updates_in_read_only_mode'] = 'Nem lehet módosítani mikor a kiszolgáló csak olvasható üzemmódban van'; //'You cannot perform updates while server is in read-only mode'; +$lang['bad_server_id'] = 'Hibás kiszolgáló-azonosító'; //'Bad server id'; +$lang['not_enough_login_info'] = 'Kevés az adat a belépéshez. Kérem ellenÅ‘rizze a konfigurációt.'; //'Not enough information to login to server. Please check your configuration.'; +$lang['could_not_connect'] = 'Nem tudok csatlakozni az LDAP-kiszolgálóhoz.'; //'Could not connect to LDAP server.'; +$lang['could_not_connect_to_host_on_port'] = 'Nem tudok csatlakozni a(z) %s géphez a(z) %s porton.'; //'Could not connect to "%s" on port "%s"'; +$lang['could_not_perform_ldap_mod_add'] = 'Nem tudom végrehajtani az ldap_mod_add műveletet.'; //'Could not perform ldap_mod_add operation.'; +$lang['bad_server_id_underline'] = 'Hibás kiszolgáló-azonosító: '; //'Bad server_id: '; +$lang['success'] = 'Siker'; //'Success'; +$lang['server_colon_pare'] = 'Kiszolgáló: '; //'Server: '; +$lang['look_in'] = 'Keresés itt: '; //'Looking in: '; +$lang['missing_server_id_in_query_string'] = 'Nincs megadva a kiszolgáló-azonosító a keresési füzérben!'; //'No server ID specified in query string!'; +$lang['missing_dn_in_query_string'] = 'Nincs megadva a DN a keresési füzérben!'; //'No DN specified in query string!'; +$lang['back_up_p'] = 'Vissza...'; //'Back Up...'; +$lang['no_entries'] = 'nics bejegyzés'; //'no entries'; +$lang['not_logged_in'] = 'Nincs belépve'; //'Not logged in'; +$lang['could_not_det_base_dn'] = 'Nem tudom az alap-DN-t meghatározni'; //'Could not determine base DN'; +$lang['please_report_this_as_a_bug'] = 'Kérjük jelentse ezt a hibát.'; //'Please report this as a bug.'; +$lang['reasons_for_error'] = 'Ez több dolog miatt történhet, például:'; //'This could happen for several reasons, the most probable of which are:'; +$lang['yes'] = 'Igen'; //'Yes'; +$lang['no'] = 'Nem'; //'No'; +$lang['go'] = 'Mehet'; //'Go'; +$lang['delete'] = 'Törlés'; //'Delete'; +$lang['back'] = 'Vissza'; //'Back'; +$lang['object'] = 'objektum'; //'object'; +$lang['delete_all'] = 'Minden törlése'; //'Delete all'; +$lang['url_bug_report'] = 'https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; //'https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; +$lang['hint'] = 'tipp'; //'hint'; +$lang['bug'] = 'hiba'; //'bug'; +$lang['warning'] = 'figyelmeztetés'; //'warning'; +$lang['light'] = 'lámpa'; // the word 'light' from 'light bulb' +$lang['proceed_gt'] = 'Tovább >>'; //'Proceed >>'; + + +// Add value form +$lang['add_new'] = 'Új'; //'Add new'; +$lang['value_to'] = 'érték, RDN:'; //'value to'; +$lang['distinguished_name'] = 'MegkülönböztetÅ‘ név (DN)'; //'Distinguished Name'; +$lang['current_list_of'] = 'Az aktuális lista'; //'Current list of'; +$lang['values_for_attribute'] = 'értéket tartalmaz. Attribútum:'; //'values for attribute'; +$lang['inappropriate_matching_note'] = 'Megj.: Ha nincs beállítva EGYENLÅSÉG-szabály ehhez az attribútumhoz a kiszolgáló az ún. inappropriate matching hibát adja vissza.'; //'Note: You will get an "inappropriate matching" error if you have not setup an EQUALITY rule on your LDAP server for this attribute.'; +$lang['enter_value_to_add'] = 'Adja meg a kívánt értéket:'; //'Enter the value you would like to add:'; +$lang['new_required_attrs_note'] = 'Megj.: Lehet hogy új kötelezÅ‘ attribútumokat kell bevinnie ehhez az objektumosztályhoz'; //'Note: you may be required to enter new attributes that this objectClass requires'; +$lang['syntax'] = 'Szintaxis'; //'Syntax'; + +//copy.php +$lang['copy_server_read_only'] = 'Nem lehet módosítást eszközölni amíg a kiszolgáló csak olvasható üzemmódban van'; //'You cannot perform updates while server is in read-only mode'; +$lang['copy_dest_dn_blank'] = 'Ãœresen hagyta a cél-DN mezejét'; //'You left the destination DN blank.'; +$lang['copy_dest_already_exists'] = 'A célbejegyzés (%s) már létezik.'; //'The destination entry (%s) already exists.'; +$lang['copy_dest_container_does_not_exist'] = 'A cél-tároló (%s) nem létezik.'; //'The destination container (%s) does not exist.'; +$lang['copy_source_dest_dn_same'] = 'A forrás- és cél-DN ugyanaz.'; //'The source and destination DN are the same.'; +$lang['copy_copying'] = 'Másolás: '; //'Copying '; +$lang['copy_recursive_copy_progress'] = 'Rekurzív másolás folyamatban'; //'Recursive copy progress'; +$lang['copy_building_snapshot'] = 'A fáról készítek egy pillanatfelvételt a másoláshoz... '; //'Building snapshot of tree to copy... '; +$lang['copy_successful_like_to'] = 'A másolás sikerült! Szeretné-e '; //'Copy successful! Would you like to '; +$lang['copy_view_new_entry'] = 'megtekinteni az új bejegyzést'; //'view the new entry'; +$lang['copy_failed'] = 'A DN másolása nem sikerült: '; //'Failed to copy DN: '; + +//edit.php +$lang['missing_template_file'] = 'Figyelem: hiányzik a mintaállomány.'; //'Warning: missing template file, '; +$lang['using_default'] = 'Az alapértelmezés használata.'; //'Using default.'; +$lang['template'] = 'Minta'; //'Template'; +$lang['must_choose_template'] = 'Választania kell egy mintát.'; //'You must choose a template'; +$lang['invalid_template'] = 'A(z) %s hibás minta.'; //'%s is an invalid template'; +$lang['using_template'] = 'használt minta:'; //'using template'; +$lang['go_to_dn'] = 'Menj a(z) %s DN-hez'; //'Go to %s'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Másolás: '; //'Copy '; +$lang['copyf_to_new_object'] = '; az új objektum'; //'to a new object'; +$lang['copyf_dest_dn'] = 'Cél-DN'; //'Destination DN'; +$lang['copyf_dest_dn_tooltip'] = 'A másolással létrejövÅ‘ új bejegyzés teljes DN-je'; //'The full DN of the new entry to be created when copying the source entry'; +$lang['copyf_dest_server'] = 'Célkiszolgáló'; //'Destination Server'; +$lang['copyf_note'] = 'Tipp: A kiszolgálók közötti másolás csak akkor működik, ha nincs séma-sértés'; //'Hint: Copying between different servers only works if there are no schema violations'; +$lang['copyf_recursive_copy'] = 'Az objektum összes gyermekeinek rekurzív másolása.'; //'Recursively copy all children of this object as well.'; +$lang['recursive_copy'] = 'Rekurzív másolás'; //'Recursive copy'; +$lang['filter'] = 'SzűrÅ‘'; //'Filter'; +$lang['filter_tooltip'] = 'Rekurzív másolásnál csak azokat másolja le, amelyekre illik ez a szűrÅ‘'; //'When performing a recursive copy, only copy those entries which match this filter'; + +//create.php +$lang['create_required_attribute'] = 'A(z) %s kötelezÅ‘ attribútum értékét üresen hagyta.'; //'You left the value blank for required attribute (%s).'; +$lang['redirecting'] = 'Ãtirányítás...'; //'Redirecting...'; +$lang['here'] = 'ide'; //'here'; +$lang['create_could_not_add'] = 'Nem tudom az objektumot létrehozni a kiszolgálón.'; //'Could not add the object to the LDAP server.'; + +//create_form.php +$lang['createf_create_object'] = 'Objektum létrehozása'; //'Create Object'; +$lang['createf_choose_temp'] = 'Válasszon mintát'; //'Choose a template'; +$lang['createf_select_temp'] = 'Válasszon mintát a létrehozási folyamathoz'; //'Select a template for the creation process'; +$lang['createf_proceed'] = 'Tovább'; //'Proceed'; +$lang['rdn_field_blank'] = 'Az RDN-mezÅ‘t üresen hagyta'; //'You left the RDN field blank.'; +$lang['container_does_not_exist'] = 'A(z) %s tároló nem létezik. Kérem próbálja újra.'; //'The container you specified (%s) does not exist. Please try again.'; +$lang['no_objectclasses_selected'] = 'Nem választott objektumosztályt ehhez az objektumhoz. Kérem lépjen vissza és válasszon egyet.'; //'You did not select any ObjectClasses for this object. Please go back and do so.'; +$lang['hint_structural_oclass'] = 'Tipp: Legalább egy strukturális objektumosztályt kell választania'; //'Hint: You must choose at least one structural objectClass'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'Kiszolgáló:'; //'On server'; +$lang['ctemplate_no_template'] = 'Nincs megadva a minta a POST-változóban.'; //'No template specified in POST variables.'; +$lang['ctemplate_config_handler'] = 'A konfiguráció egy kezelÅ‘t ad meg:'; //'Your config specifies a handler of'; +$lang['ctemplate_handler_does_not_exist'] = 'ehhez a mintához. De ez a kezelÅ‘ nincs a mintakönyvtárban.'; //'for this template. But, this handler does not exist in the templates/creation directory.'; +$lang['create_step1'] = 'ElsÅ‘ lépés: Név és objektumosztály(ok)'; //'Step 1 of 2: Name and ObjectClass(es)'; +$lang['create_step2'] = 'Második lépés: Adja meg az attribútumokat és értékeiket'; //'Step 2 of 2: Specify attributes and values'; +$lang['relative_distinguished_name'] = 'Viszonylagos megkülönböztetÅ‘ név (RDN)'; //'Relative Distinguished Name'; +$lang['rdn'] = 'RDN'; //'RDN'; +$lang['rdn_example'] = '(példa: cn=ÚjEmber)'; //'(example: cn=MyNewPerson)'; +$lang['container'] = 'Tároló'; //'Container'; +$lang['alias_for'] = 'A(z) %s álneve a(z) %s attribútumnévnek'; //'Alias for %s'; + +// search.php +$lang['you_have_not_logged_into_server'] = 'Nem lépett be a kiválasztott kiszolgálóba, s így nem tudok keresni.'; //'You have not logged into the selected server yet, so you cannot perform searches on it.'; +$lang['click_to_go_to_login_form'] = 'Kattintson ide a belépési űrlap eléréséhez'; //'Click here to go to the login form'; +$lang['unrecognized_criteria_option'] = 'Ismeretlen kritérium-opció: '; //'Unrecognized criteria option: '; +$lang['if_you_want_to_add_criteria'] = 'Ha kritériumot kíván adni a listához szerkessze meg a search.php-t, hogy kezelje le azokat. Most kilépek.'; //'If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting.'; +$lang['entries_found'] = 'A megtalált bejegyzések: '; //'Entries found: '; +$lang['filter_performed'] = 'Használt szűrÅ‘: '; //'Filter performed: '; +$lang['search_duration'] = 'A phpLDAPadmin'; //'Search performed by phpLDAPadmin in'; +$lang['seconds'] = 's alatt hajtotta végre a keresést'; //'seconds'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'A keresés hatásköre'; //'The scope in which to search'; +$lang['scope_sub'] = 'Az egész részfa'; //'Sub (entire subtree)'; +$lang['scope_one'] = 'Egy szint az alap-DN alatt'; //'One (one level beneath base)'; +$lang['scope_base'] = 'Csak az alap-DN'; //'Base (base dn only)'; +$lang['standard_ldap_search_filter'] = 'Szabványos LDAP-szűrÅ‘, pl. (&(sn=Kovács)(givenname=István))'; //'Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))'; +$lang['search_filter'] = 'KeresÅ‘szűrÅ‘'; //'Search Filter'; +$lang['list_of_attrs_to_display_in_results'] = 'A megjelenítendÅ‘ találatok attribútumainak vesszÅ‘vel elválasztott listája'; //'A list of attributes to display in the results (comma-separated)'; +$lang['show_attributes'] = 'Attribútumok megjelenítése'; //'Show Attributes'; + +// search_form_simple.php +$lang['search_for_entries_whose'] = 'Bejegyzések keresése, ahol:'; //'Search for entries whose:'; +$lang['equals'] = 'egyenlÅ‘'; //'equals'; +$lang['starts with'] = 'kezdet'; //'starts with'; +$lang['contains'] = 'tartalmaz'; //'contains'; +$lang['ends with'] = 'végzÅ‘dés'; //'ends with'; +$lang['sounds like'] = 'hangzás'; //'sounds like'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'Nem tudom az információt letölteni a kiszolgálóról'; //'Could not retrieve LDAP information from the server'; +$lang['server_info_for'] = 'Kiszolgáló-infó: '; //'Server info for: '; +$lang['server_reports_following'] = 'A kiszolgáló ezeket az információkat közölte önmagáról'; //'Server reports the following information about itself'; +$lang['nothing_to_report'] = 'A kiszolgálónak nincs mit elküldenie'; //'This server has nothing to report.'; + +//update.php +$lang['update_array_malformed'] = 'Az update_array hibés. Ez a phpLDAPadmin hibája lehet, kérem jelentse.'; //'update_array is malformed. This might be a phpLDAPadmin bug. Please report it.'; +$lang['could_not_perform_ldap_modify'] = 'Nem tudom elvégezni az ldap_modify műveletet.'; //'Could not perform ldap_modify operation.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Érvényesíteni kívánja a változásokat?'; //'Do you want to make these changes?'; +$lang['attribute'] = 'Attribútumok'; //'Attribute'; +$lang['old_value'] = 'Régi érték'; //'Old Value'; +$lang['new_value'] = 'Új érték'; //'New Value'; +$lang['attr_deleted'] = '[attribútum törölve]'; //'[attribute deleted]'; +$lang['commit'] = 'Érvényesítés'; //'Commit'; +$lang['cancel'] = 'Mégsem'; //'Cancel'; +$lang['you_made_no_changes'] = 'Nem történt változtatás'; //'You made no changes'; +$lang['go_back'] = 'Vissza'; //'Go back'; + +// welcome.php +$lang['welcome_note'] = 'A bal oldali menüvel tájékozódhat a programban'; //'Use the menu to the left to navigate'; +$lang['credits'] = 'Köszönetnyilvánítás'; //'Credits'; +$lang['changelog'] = 'Változtatások naplója'; //'ChangeLog'; +$lang['donate'] = 'Adományozzon'; //'Donate'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Nem biztonságos állománynév: '; //'Unsafe file name: '; +$lang['no_such_file'] = 'Nincs ilyen állomány: '; //'No such file: '; + +//function.php +$lang['auto_update_not_setup'] = 'Az auto_uid_numbers engedélyezett a konfigurációban a(z) %s kiszolgálóhoz, de az auto_uid_number_mechanism nincs megadva. Kérem írja be ezt az értéket.'; +//'You have enabled auto_uid_numbers for %s in your configuration, +// but you have not specified the auto_uid_number_mechanism. Please correct +// this problem.'; +$lang['uidpool_not_set'] = 'A konfigurációban az auto_uid_number_mechanism értéke uidpool a(z) %s kiszolgálóhoz, de nem adta meg az auto_uid_number_uid_pool_dn értékét. Kérem írja be ezt az értéket.'; +//'You specified the "auto_uid_number_mechanism" as "uidpool" +// in your configuration for server %s, but you did not specify the +// audo_uid_number_uid_pool_dn. Please specify it before proceeding.'; +$lang['uidpool_not_exist'] = 'A konfigurációban megadott uidPool nem létezik (%s).'; +//'It appears that the uidPool you specified in your configuration ("%s") +// does not exist.'; +$lang['specified_uidpool'] = 'A konfigurációban az auto_uid_number_mechanism értéke search a(z) %s kiszolgálóhoz, de nem adta meg az auto_uid_number_search_base értékét. Kérem írja be ezt az értéket.'; +//'You specified the "auto_uid_number_mechanism" as "search" in your +// configuration for server %s, but you did not specify the +// "auto_uid_number_search_base". Please specify it before proceeding.'; +$lang['auto_uid_invalid_credential'] = 'A bind művelet sikertelen a(z) %s kiszolgálóhoz az auto_uid használatával. Kérem ellenÅ‘rizze a konfigurációt. '; //'Unable to bind to %s with your with auto_uid credentials. Please check your configuration file.'; +$lang['bad_auto_uid_search_base'] = 'A konfigurációban érvénytelen auto_uid_search_base van megadva a(z) %s kiszolgálóhoz.'; //'Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s'; +$lang['auto_uid_invalid_value'] = 'Érvénytelen értéket adott meg a auto_uid_number_mechanism-nak (%s). Csak uidpool és search a megengedett érték.'; +//'You specified an invalid value for auto_uid_number_mechanism ("%s") +// in your configration. Only "uidpool" and "search" are valid. +// Please correct this problem.'; +$lang['error_auth_type_config'] = 'Csak a session, cookie és config a megengedett értékek az auth_type-nak a konfigurációban. A megadott helytelen érték: %s.'; +//'Error: You have an error in your config file. The only three allowed values +// for auth_type in the $servers section are \'session\', \'cookie\', and \'config\'. You entered \'%s\', +// which is not allowed. '; +$lang['php_install_not_supports_tls'] = 'Ez a PHP nem támogatja a TLS-t.'; //'Your PHP install does not support TLS.'; +$lang['could_not_start_tls'] = 'Nem tudom a TLS-t elindítani. Kérem ellenÅ‘rizze az LDAP-kiszolgálót és a konfigurációt.'; //'Could not start TLS. Please check your LDAP server configuration.'; +$lang['could_not_bind_anon'] = 'Az anonymous bind művelet nem sikerült.'; //'Could not bind anonymously to server.'; +$lang['could_not_bind'] = 'A bind művelet sikertelen az LDAP-kiszolgálóhoz.'; //'Could not bind to the LDAP server.'; +$lang['anonymous_bind'] = 'Anonymous bind'; //'Anonymous Bind'; +$lang['bad_user_name_or_password'] = 'Helytelen felhasználónév vagy jelszó. Kérem próbálja újra.'; //'Bad username or password. Please try again.'; +$lang['redirecting_click_if_nothing_happens'] = 'Ãtirányítás... kérem kattintson ide, ha semmi sem történik.'; //'Redirecting... Click here if nothing happens.'; +$lang['successfully_logged_in_to_server'] = 'A(z) %s kiszolgálóhoz sikeresen bejelentkezett.'; //'Successfully logged into server %s'; +$lang['could_not_set_cookie'] = 'Nem tudok sütit beállítani.'; //'Could not set cookie.'; +$lang['ldap_said'] = 'Az LDAP ezt mondta: %s'; //'LDAP said: %s'; +$lang['ferror_error'] = 'Hiba'; //'Error'; +$lang['fbrowse'] = 'böngészés'; //'browse'; +$lang['delete_photo'] = 'Fotó törlése'; //'Delete Photo'; +$lang['install_not_support_blowfish'] = 'Ez a PHP nem támogatja a blowfish titkosítást.'; //'Your PHP install does not support blowfish encryption.'; +$lang['install_not_support_md5crypt'] = 'Ez a PHP nem támogatja az md5crypt titkosítást.'; //'Your PHP install does not support md5crypt encryption.'; +$lang['install_no_mash'] = 'Ez a PHP nem tartalmazza az mhash() függvényt. Nem tudok SHA hash-eket kezelni.'; //'Your PHP install does not have the mhash() function. Cannot do SHA hashes.'; +$lang['jpeg_contains_errors'] = 'A jpegPhoto hibás
'; //'jpegPhoto contains errors
'; +$lang['ferror_number'] = 'Hibaszám: %s (%s)'; //'Error number: %s (%s)'; +$lang['ferror_discription'] = 'Leírás: %s

'; //'Description: %s

'; +$lang['ferror_number_short'] = 'Hibaszám: %s

'; //'Error number: %s

'; +$lang['ferror_discription_short'] = 'Leírás: (nincs leírás)
'; //'Description: (no description available)
'; +$lang['ferror_submit_bug'] = 'Ez a phpLDAPadmin hibája? Ha igen, kérem jelentse.'; //'Is this a phpLDAPadmin bug? If so, please report it.'; +$lang['ferror_unrecognized_num'] = 'Ismeretlen hibaszám: '; //'Unrecognized error number: '; +$lang['ferror_nonfatil_bug'] = '
+
+ Egy kisebb hibát talált a phpLDAPadmin-ban!
Hiba:%s (%s)
Ãllomány:%s. sor %s, hívó %s
Verziók:PLA: %s, PHP: %s, SAPI: %s +
Web-kiszolgáló:%s
+ Kérem jelentse a hibát, kattintson ide!.

'; +//'
+//
+// You found a non-fatal phpLDAPadmin bug!
Error:%s (%s)
File:%s line %s, caller %s
Versions:PLA: %s, PHP: %s, SAPI: %s +//
Web server:%s
+// Please report this bug by clicking here.

'; +$lang['ferror_congrats_found_bug'] = 'Gratulálunk! Hibát talált a phpLDAPadmin-ban.

+ + + + + + + + + + +
Hiba:%s
Szint:%s
Ãllomány:%s
Sor:%s
Hívó:%s
PLA Verzió:%s
PHP Verzió:%s
PHP SAPI:%s
Web-kiszolgáló:%s
+
+ Kérjük jelentse a hibát, kattintson alulra!'; +//'Congratulations! You found a bug in phpLDAPadmin.

+// +// +// +// +// +// +// +// +// +// +//
Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA Version:%s
PHP Version:%s
PHP SAPI:%s
Web server:%s
+//
+// Please report this bug by clicking below!'; + +//ldif_import_form +$lang['import_ldif_file_title'] = 'LDIF-állomány importálása'; //'Import LDIF File'; +$lang['select_ldif_file'] = 'LDIF-állomány kiválasztása'; //'Select an LDIF file:'; +$lang['select_ldif_file_proceed'] = 'Tovább >>'; //'Proceed >>'; +$lang['dont_stop_on_errors'] = 'Ne állj meg hiba esetén'; //'Don\'t stop on errors'; + +//ldif_import +$lang['add_action'] = 'Hozzáadás...'; //'Adding...'; +$lang['delete_action'] = 'Törlés...'; //'Deleting...'; +$lang['rename_action'] = 'Ãtnevezés'; //'Renaming...'; +$lang['modify_action'] = 'Módosítás...'; //'Modifying...'; +$lang['warning_no_ldif_version_found'] = 'Nem találtam verziószámot, feltételeztem, hogy 1-es.'; //'No version found. Assuming 1.'; +$lang['valid_dn_line_required'] = 'Érvényes DN-sor kell.'; //'A valid dn line is required.'; +$lang['missing_uploaded_file'] = 'A feltöltött állomány hiányzik.'; //'Missing uploaded file.'; +$lang['no_ldif_file_specified.'] = 'Nem adott meg LDIF-állományt. Kérem próbálja újra.'; //'No LDIF file specified. Please try again.'; +$lang['ldif_file_empty'] = 'A feltöltött LDIF-állomány üres.'; //'Uploaded LDIF file is empty.'; +$lang['empty'] = 'üres'; //'empty'; +$lang['file'] = 'Ãllomány'; //'File'; +$lang['number_bytes'] = '%s byte'; //'%s bytes'; + +$lang['failed'] = 'Sikertelen'; //'Failed'; +$lang['ldif_parse_error'] = 'LDIF-pásztázási hiba'; //'LDIF Parse Error'; +$lang['ldif_could_not_add_object'] = 'Nem tudom ezt az objektumot hozzáadni:'; //'Could not add object:'; +$lang['ldif_could_not_rename_object'] = 'Nem tudom ezt az objektumot átnevezni:'; //'Could not rename object:'; +$lang['ldif_could_not_delete_object'] = 'Nem tudom ezt az objektumot törölni:'; //'Could not delete object:'; +$lang['ldif_could_not_modify_object'] = 'Nem tudom ezt az objektumot módosítani:'; //'Could not modify object:'; +$lang['ldif_line_number'] = 'Sorszám:'; //'Line Number:'; +$lang['ldif_line'] = 'Sor:'; //'Line:'; + +// Exports +$lang['export_format'] = 'Export-formátum'; //'Export format'; +$lang['line_ends'] = 'Sorvégek'; //'Line ends'; +$lang['must_choose_export_format'] = 'Az export formátumát ki kell választani.'; //'You must choose an export format.'; +$lang['invalid_export_format'] = 'Az export formátuma érvénytelen'; //'Invalid export format'; +$lang['no_exporter_found'] = 'Nincs használható exportáló.'; //'No available exporter found.'; +$lang['error_performing_search'] = 'Keresés közben hibába akadtam.'; //'Encountered an error while performing search.'; +$lang['showing_results_x_through_y'] = 'A(z) %s és %s közé esÅ‘ találatok megjelenítése.'; //'Showing results %s through %s.'; +$lang['searching'] = 'Folyik a keresés...'; //'Searching...'; +$lang['size_limit_exceeded'] = 'Figyelem: a keresési méret korlátja túllépve.'; //'Notice, search size limit exceeded.'; +$lang['entry'] = 'Bejegyzés'; //'Entry'; +$lang['ldif_export_for_dn'] = 'A(z) %s LDIF exportja'; //'LDIF Export for: %s'; +$lang['generated_on_date'] = 'A phpLDAPadmin generálta, dátum: %s'; //'Generated by phpLDAPadmin on %s'; +$lang['total_entries'] = 'Bejegyzések száma összesen'; //'Total Entries'; +$lang['dsml_export_for_dn'] = 'A(z) %s DSLM exportja'; //'DSLM Export for: %s'; + +// logins +$lang['could_not_find_user'] = 'Nem találtam meg a(z) %s felhasználót'; //'Could not find a user "%s"'; +$lang['password_blank'] = 'A jelszó üresen maradt.'; //'You left the password blank.'; +$lang['login_cancelled'] = 'A bejelentkezést megszakították.'; //'Login cancelled.'; +$lang['no_one_logged_in'] = 'Arra a kiszolgálóra nincs bejelentkezve senki.'; //'No one is logged in to that server.'; +$lang['could_not_logout'] = 'Nem sikerült kilépni.'; //'Could not logout.'; +$lang['unknown_auth_type'] = 'Ismeretlen auth_type: %s'; //'Unknown auth_type: %s'; +$lang['logged_out_successfully'] = 'A kilépés sikerült a(z) %s kiszolgálóból'; //'Logged out successfully from server %s'; +$lang['authenticate_to_server'] = 'Azonosítsa magát a(z) %s kiszolgálón'; //'Authenticate to server %s'; +$lang['warning_this_web_connection_is_unencrypted'] = 'Figyelem: A kapcsolat a bögészÅ‘vel titkosítatlan.'; //'Warning: This web connection is unencrypted.'; +$lang['not_using_https'] = 'Nem https kapcsolatot használ. A böngészÅ‘ a bejelentkezés adatait sima szöveg formátumban fogja továbbítani'; //'You are not using \'https\'. Web browser will transmit login information in clear text.'; +$lang['login_dn'] = 'Bejelentkezési DN'; //'Login DN'; +$lang['user_name'] = 'A felhasználó neve'; //'User name'; +$lang['password'] = 'Jelszó'; //'Password'; +$lang['authenticate'] = 'Azonosítás'; //'Authenticate'; + +// Entry browser +$lang['entry_chooser_title'] = 'Bejegyzés kiválasztása'; //'Entry Chooser'; + +// Index page +$lang['need_to_configure'] = 'Konfigurálnia kell a phpLDAPadmint a config.php állomány szerkesztésével, amihez mintául a config.php.example szolgálhat.'; //'You need to configure phpLDAPadmin. Edit the file \'config.php\' to do so. An example config file is provided in \'config.php.example\''; + +// Mass deletes +$lang['no_deletes_in_read_only'] = 'Csak olvasható üzemmódban a törlés nem működik.'; //'Deletes not allowed in read only mode.'; +$lang['error_calling_mass_delete'] = 'Hiba a mass_delete.php hívásakor. A POST változók közül hiányzik a mass_delete.'; //'Error calling mass_delete.php. Missing mass_delete in POST vars.'; +$lang['mass_delete_not_array'] = 'A mass_delete POST változó nem tömb.'; //'mass_delete POST var is not an array.'; +$lang['mass_delete_not_enabled'] = 'A tömeges törlés nincs engedélyezve. MielÅ‘tt folytatná, állítsa át az enable_mass_delete értékét config.php állományban.'; //'Mass deletion is not enabled. Please enable it in config.php before proceeding.'; +$lang['mass_deleting'] = 'Tömeges törlés'; //'Mass Deleting'; +$lang['mass_delete_progress'] = 'A törlési művelet a(z) %s kiszolgálón'; //'Deletion progress on server "%s"'; +$lang['malformed_mass_delete_array'] = 'A tömeges törléshez megadott tömb formátuma helytelen'; //'Malformed mass_delete array.'; +$lang['no_entries_to_delete'] = 'Nem választotta ki a törlendÅ‘ bejegyzés(eke)t. '; //'You did not select any entries to delete.'; +$lang['deleting_dn'] = '%s törölve'; //'Deleting %s'; +$lang['total_entries_failed'] = '%s darab bejegyzés törlése nem sikerült a(z) %s darabból.'; //'%s of %s entries failed to be deleted.'; +$lang['all_entries_successful'] = 'Az összes bejegyzés törlése sikerült.'; //'All entries deleted successfully.'; +$lang['confirm_mass_delete'] = 'Hagyja jóvá a(z) %s bejegyzés tömeges törlését a(z) %s kiszolgálóról'; //'Confirm mass delete of %s entries on server %s'; +$lang['yes_delete'] = 'Igen, törlÅ‘djön'; //'Yes, delete!'; + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'Nem nevezhet át olyan bejegyzést aminek gyermekei vannak (azaz az átnevezés művelete csak levél-bejegyzéseken megengedett)'; //'You cannot rename an entry which has children entries (eg, the rename operation is not allowed on non-leaf entries)'; +$lang['no_rdn_change'] = 'Nem változtatta meg az RDN-t'; //'You did not change the RDN'; +$lang['invalid_rdn'] = 'Érvénytelen RDN érték'; //'Invalid RDN value'; +$lang['could_not_rename'] = 'A bejegyzést nem sikerült átnevezni'; //'Could not rename the entry'; + +?> diff --git a/lang/it.php b/lang/it.php index f49d6f7..814eedf 100644 --- a/lang/it.php +++ b/lang/it.php @@ -1,4 +1,6 @@ ä¸éƒ½åˆã«ã‚ˆã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。ã‚ã‚‹ã„ã¯ã€ã‚ãªãŸã® LDAP サーãƒãƒ¼ã¯ã€LDAP クライアント㌠RootDSE ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã®ã‚’防ãアクセス制御指定をã—ã¦ã„ã¾ã™ã€‚'; +$lang['server_info_for'] = 'Server info for: '; +$lang['server_reports_following'] = 'Server reports the following information about itself'; +$lang['nothing_to_report'] = 'ã“ã®ã‚µãƒ¼ãƒãƒ¼ã¯ãªã«ã‚‚報告ã™ã‚‹ã‚‚ã®ã¯ã‚ã‚Šã¾ã›ã‚“。'; + +//update.php +$lang['update_array_malformed'] = 'update_array ãŒã‚ªã‚«ã‚·ã‚¤ã§ã™ã€‚This might be a phpLDAPadmin bug. Please report it.'; +$lang['could_not_perform_ldap_modify'] = 'ldap_modify æ“作ãŒå®Ÿè¡Œã§ãã¾ã›ã‚“ã§ã—ãŸã€‚'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Do you want to make these changes?'; +$lang['attribute'] = '属性'; +$lang['old_value'] = 'å¤ã„値'; +$lang['new_value'] = 'æ–°ã—ã„値'; +$lang['attr_deleted'] = '[属性を削除ã—ã¾ã—ãŸ]'; +$lang['commit'] = 'コミット'; +$lang['cancel'] = 'å–り消ã—'; +$lang['you_made_no_changes'] = '変更ã¯ã‚ã‚Šã¾ã›ã‚“'; +$lang['go_back'] = 'Go back'; + +// welcome.php +$lang['welcome_note'] = 'å·¦ã¸ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’使用ã—ã¦æœæŸ»ã—ã¾ã™'; +$lang['credits'] = 'クレジット'; +$lang['changelog'] = '変更履歴'; +$lang['donate'] = '寄贈'; +$lang['pla_logo'] = 'phpLDAPadmin ロゴ'; + +// Donate.php +$lang['donation_instructions'] = 'phpLDAPadmin プロジェクトã«è³‡é‡‘を寄贈ã™ã‚‹ãŸã‚ã«ã¯ã€PayPal ボタンã®ã†ã¡ã® 1 ã¤ã‚’下ã«ä½¿ç”¨ã—ã¦ãã ã•ã„。'; +$lang['donate_amount'] = '%s を寄贈'; +$lang['wish_list_option'] = 'Or perhaps you would prefer to purchase an gift for a phpLDAPadmin developer.'; +$lang['wish_list'] = 'Dave\'s phpLDAPadmin ã®ã‚ã£ä¸»ãƒªã‚¹ãƒˆã‚’閲覧'; + +$lang['purge_cache'] = 'キャッシュ破棄'; +$lang['no_cache_to_purge'] = '破棄ã™ã‚‹ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã¯ã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚'; +$lang['done_purging_caches'] = '%s ãƒã‚¤ãƒˆã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’破棄ã—ã¾ã—ãŸã€‚'; +$lang['purge_cache_tooltip'] = 'サーãƒãƒ¼ã‚¹ã‚­ãƒ¼ãƒžã‚’å«ã‚€ã€phpLDAPadmin ã®ã™ã¹ã¦ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’破棄ã—ã¾ã—ãŸã€‚'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = '安全ã§ãªã„ファイルå: '; +$lang['no_such_file'] = 'ファイルãŒã‚ã‚Šã¾ã›ã‚“: '; + +//function.php +$lang['auto_update_not_setup'] = 'You have enabled auto_uid_numbers for %s in your configuration, + but you have not specified the auto_uid_number_mechanism. Please correct + this problem.'; +$lang['uidpool_not_set'] = 'You specified the "auto_uid_number_mechanism" as "uidpool" + in your configuration for server %s, but you did not specify the + audo_uid_number_uid_pool_dn. Please specify it before proceeding.'; +$lang['uidpool_not_exist'] = 'It appears that the uidPool you specified in your configuration ("%s") + does not exist.'; +$lang['specified_uidpool'] = 'You specified the "auto_uid_number_mechanism" as "search" in your + configuration for server %s, but you did not specify the + "auto_uid_number_search_base". Please specify it before proceeding.'; +$lang['auto_uid_invalid_credential'] = 'Unable to bind to %s with your with auto_uid credentials. Please check your configuration file.'; +$lang['bad_auto_uid_search_base'] = 'Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s'; +$lang['auto_uid_invalid_value'] = 'You specified an invalid value for auto_uid_number_mechanism ("%s") + in your configration. Only "uidpool" and "search" are valid. + Please correct this problem.'; +$lang['error_auth_type_config'] = 'Error: You have an error in your config file. The only three allowed values + for auth_type in the $servers section are \'session\', \'cookie\', and \'config\'. You entered \'%s\', + which is not allowed. '; +$lang['unique_attrs_invalid_credential'] = 'Unable to bind to %s with your with unique_attrs credentials. Please check your configuration file.'; +$lang['unique_attr_failed'] = 'Your attempt to add %s (%s) to
%s
is NOT allowed. That attribute/value belongs to another entry.

You might like to search for that entry.'; +$lang['php_install_not_supports_tls'] = 'インストールã•ã‚Œã¦ã„ã‚‹ PHP 㯠TLS をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。'; +$lang['could_not_start_tls'] = 'TLS を開始ã§ãã¾ã›ã‚“。LDAP サーãƒãƒ¼ã®è¨­å®šã‚’確èªã—ã¦ãã ã•ã„。'; +$lang['could_not_bind_anon'] = 'サーãƒãƒ¼ã«åŒ¿å接続ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚'; +$lang['could_not_bind'] = 'LDAP サーãƒãƒ¼ã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸã€‚'; +$lang['anonymous_bind'] = '匿å接続'; +$lang['bad_user_name_or_password'] = 'ユーザーåã‹ãƒ‘スワードãŒãŠã‹ã—ã„ã§ã™ã€‚ã‚‚ã†ä¸€åº¦è¡Œã£ã¦ãã ã•ã„。'; +$lang['redirecting_click_if_nothing_happens'] = 'Redirecting... Click here if nothing happens.'; +$lang['successfully_logged_in_to_server'] = 'サーãƒãƒ¼ %sã¸ã®ãƒ­ã‚°ã‚¤ãƒ³ã«æˆåŠŸã—ã¾ã—ãŸ'; +$lang['could_not_set_cookie'] = 'cookie を設定ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚'; +$lang['ldap_said'] = 'LDAP 回答: %s'; +$lang['ferror_error'] = 'エラー'; +$lang['fbrowse'] = '閲覧'; +$lang['delete_photo'] = '写真削除'; +$lang['install_not_support_blowfish'] = 'インストールã•ã‚ŒãŸ PHP 㯠blowfish æš—å·åŒ–をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。'; +$lang['install_not_support_md5crypt'] = 'インストールã•ã‚ŒãŸ PHP 㯠md5crypt æš—å·åŒ–をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。'; +$lang['install_no_mash'] = 'インストールã•ã‚ŒãŸ PHP 㯠mhash() をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。SHA ãƒãƒƒã‚·ãƒ¥ã‚’ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。'; +$lang['jpeg_contains_errors'] = 'jpegPhoto contains errors
'; +$lang['ferror_number'] = 'エラー番å·: %s (%s)'; +$lang['ferror_discription'] = '説明: %s

'; +$lang['ferror_number_short'] = 'エラー番å·: %s

'; +$lang['ferror_discription_short'] = '説明: (利用å¯èƒ½ãªèª¬æ˜ŽãŒã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸ)
'; +$lang['ferror_submit_bug'] = 'ã“れ㯠phpLDAPadmin ã®ä¸éƒ½åˆã§ã™ã‹? ã‚‚ã—ãã†ãªã‚‰ 報告 ã—ã¦ãã ã•ã„。'; +$lang['ferror_unrecognized_num'] = '未承èªã®ã‚¨ãƒ©ãƒ¼ç•ªå·: '; +$lang['ferror_nonfatil_bug'] = '

+
+ 致命的ã§ãªã„ phpLDAPadmin ã®ä¸éƒ½åˆã‚’発見ã—ã¾ã—ãŸ!
エラー:%s (%s)
ファイル:%s 行 %s, caller %s
ãƒãƒ¼ã‚¸ãƒ§ãƒ³:PLA: %s, PHP: %s, SAPI: %s +
ウェブサーãƒãƒ¼:%s
+ ã“ã“をクリックã—ã¦å€‹ã®ä¸éƒ½åˆã‚’報告ã—ã¦ãã ã•ã„。.

'; +$lang['ferror_congrats_found_bug'] = 'ãŠã‚ã§ã¨ã†ã”ã–ã„ã¾ã™! phpLDAPadmin ã§ä¸éƒ½åˆã‚’発見ã—ã¾ã—ãŸã€‚

+ + + + + + + + + + +
エラー:%s
レベル:%s
ファイル:%s
行:%s
Caller:%s
PLA ãƒãƒ¼ã‚¸ãƒ§ãƒ³:%s
PHP ãƒãƒ¼ã‚¸ãƒ§ãƒ³:%s
PHP SAPI:%s
Web サーãƒãƒ¼:%s
+
+ 下記をクリックã—ã¦ã“ã®ä¸éƒ½åˆã‚’報告ã—ã¦ãã ã•ã„!'; + +//ldif_import_form +$lang['import_ldif_file_title'] = 'LDIF ファイルインãƒãƒ¼ãƒˆ'; +$lang['select_ldif_file'] = 'LDIF ファイルをé¸æŠž:'; +$lang['dont_stop_on_errors'] = 'Don\'t stop on errors'; + +//ldif_import +$lang['add_action'] = '追加中...'; +$lang['delete_action'] = '削除中...'; +$lang['rename_action'] = 'å称変更中...'; +$lang['modify_action'] = '修正中...'; +$lang['warning_no_ldif_version_found'] = 'ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。1 ã¨ä»®å®šã—ã¾ã™ã€‚'; +$lang['valid_dn_line_required'] = '有効㪠dn è¡ŒãŒå¿…è¦ã§ã™ã€‚'; +$lang['missing_uploaded_file'] = 'アップロードファイルãŒè¦‹å½“ãŸã‚Šã¾ã›ã‚“。'; +$lang['no_ldif_file_specified'] = 'LDIF ファイルãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。もã†ä¸€åº¦è¡Œã£ã¦ãã ã•ã„。'; +$lang['ldif_file_empty'] = 'アップロードã•ã‚ŒãŸ LDIF ファイルãŒç©ºã§ã™ã€‚'; +$lang['empty'] = '空'; +$lang['file'] = 'ファイル'; +$lang['number_bytes'] = '%s ãƒã‚¤ãƒˆ'; + +$lang['failed'] = '失敗ã—ã¾ã—ãŸ'; +$lang['ldif_parse_error'] = 'LDIF 解æžã‚¨ãƒ©ãƒ¼'; +$lang['ldif_could_not_add_object'] = 'オブジェクトを追加ã§ãã¾ã›ã‚“ã§ã—ãŸ:'; +$lang['ldif_could_not_rename_object'] = 'オブジェクトをå称変更ã§ãã¾ã›ã‚“ã§ã—ãŸ:'; +$lang['ldif_could_not_delete_object'] = 'オブジェクトを削除ã§ãã¾ã›ã‚“ã§ã—ãŸ:'; +$lang['ldif_could_not_modify_object'] = 'オブジェクトを修正ã§ãã¾ã›ã‚“ã§ã—ãŸ:'; +$lang['ldif_line_number'] = '行番å·:'; +$lang['ldif_line'] = 'è¡Œ:'; + +// Exports +$lang['export_format'] = 'エクスãƒãƒ¼ãƒˆæ›¸å¼'; +$lang['line_ends'] = 'Line ends'; +$lang['must_choose_export_format'] = 'エクスãƒãƒ¼ãƒˆæ›¸å¼ã‚’é¸ã°ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。'; +$lang['invalid_export_format'] = '無効ãªã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆæ›¸å¼'; +$lang['no_exporter_found'] = 'No available exporter found.'; +$lang['error_performing_search'] = '検索実行中ã«ã‚¨ãƒ©ãƒ¼ã«é­é‡ã—ã¾ã—ãŸã€‚'; +$lang['showing_results_x_through_y'] = 'Showing results %s through %s.'; +$lang['searching'] = '検索中...'; +$lang['size_limit_exceeded'] = '通知ã§ã™ã€‚検索サイズãŒåˆ¶é™ã‚’越ãˆã¾ã—ãŸã€‚'; +$lang['entry'] = 'エントリ'; +$lang['ldif_export_for_dn'] = 'LDIF エクスãƒãƒ¼ãƒˆ: %s'; +$lang['generated_on_date'] = 'Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s'; +$lang['total_entries'] = 'ç·ã‚¨ãƒ³ãƒˆãƒª'; +$lang['dsml_export_for_dn'] = 'DSLM エクスãƒãƒ¼ãƒˆ: %s'; +$lang['include_system_attrs'] = 'システム属性をå«ã‚€'; +$lang['csv_spreadsheet'] = 'CSV (スプレッドシート)'; + +// logins +$lang['could_not_find_user'] = 'ユーザー "%s" ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“'; +$lang['password_blank'] = 'You left the password blank.'; +$lang['login_cancelled'] = 'ログインãŒå–り消ã•ã‚Œã¾ã—ãŸã€‚'; +$lang['no_one_logged_in'] = 'No one is logged in to that server.'; +$lang['could_not_logout'] = 'ログアウトã§ãã¾ã›ã‚“ã§ã—ãŸã€‚'; +$lang['unknown_auth_type'] = '未知㮠auth_type: %s'; +$lang['logged_out_successfully'] = 'サーãƒãƒ¼ %s ã‹ã‚‰ãƒ­ã‚°ã‚¢ã‚¦ãƒˆã«æˆåŠŸã—ã¾ã—ãŸ'; +$lang['authenticate_to_server'] = 'Authenticate to server %s'; +$lang['warning_this_web_connection_is_unencrypted'] = '警告: ã“ã®ã‚¦ã‚§ãƒ–接続ã¯æš—å·åŒ–ã•ã‚Œã¦ã„ã¾ã›ã‚“。'; +$lang['not_using_https'] = 'You are not using \'https\'. Web browser will transmit login information in clear text.'; +$lang['login_dn'] = 'ログイン DN'; +$lang['user_name'] = 'ユーザーå'; +$lang['password'] = 'パスワード'; +$lang['authenticate'] = 'Authenticate'; + +// Entry browser +$lang['entry_chooser_title'] = 'エントリé¸æŠž'; + +// Index page +$lang['need_to_configure'] = 'phpLDAPadmin ã®è¨­å®šã‚’å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ファイル \'config.php\' ã®å¤‰æ›´ã‚’ã—ã¦ãã ã•ã„。サンプル設定ファイルã¨ã—㦠\'config.php.example\' ã‚’æä¾›ã—ã¦ã„ã¾ã™ã€‚'; + +// Mass deletes +$lang['no_deletes_in_read_only'] = '読ã¿è¾¼ã¿å°‚用モードã§ã¯å‰Šé™¤ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“。'; +$lang['error_calling_mass_delete'] = 'mass_delete.php 呼ã³å‡ºã—中ã®ã‚¨ãƒ©ãƒ¼ã§ã™ã€‚POST 値ã‹ã‚‰ mass_delete ãŒè¦‹ã‹ã‚Šã¾ã›ã‚“。'; +$lang['mass_delete_not_array'] = 'mass_delete POST 辺りãŒé…列ã§ã¯ã‚ã‚Šã¾ã›ã‚“。'; +$lang['mass_delete_not_enabled'] = '一括削除ãŒæœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。次ã«é€²ã‚€å‰ã« config.php ã§ãれを有効ã«ã—ã¦ãã ã•ã„。'; +$lang['search_attrs_wrong_count'] = 'config.php ã«ã‚¨ãƒ©ãƒ¼ãŒã‚ã‚Šã¾ã™ã€‚The number of attributes in $search_attributes and $search_attributes_display is different'; +$lang['mass_deleting'] = '一括削除中'; +$lang['mass_delete_progress'] = 'サーãƒãƒ¼ "%s" ã‹ã‚‰å‰Šé™¤ä¸­'; +$lang['malformed_mass_delete_array'] = 'ãŠã‹ã—ã„ mass_delete é…列ã§ã™ã€‚'; +$lang['no_entries_to_delete'] = '削除ã™ã‚‹ã‚¨ãƒ³ãƒˆãƒªãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“。'; +$lang['deleting_dn'] = '%s 削除中'; +$lang['total_entries_failed'] = '%s 個ã®ã‚¨ãƒ³ãƒˆãƒªãŒ %s 個ã®ã‚¨ãƒ³ãƒˆãƒªä¸­ã§å‰Šé™¤ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚'; +$lang['all_entries_successful'] = 'ã™ã¹ã¦ã®ã‚¨ãƒ³ãƒˆãƒªã®å‰Šé™¤ã«æˆåŠŸã—ã¾ã—ãŸã€‚'; +$lang['confirm_mass_delete'] = '%s エントリをサーãƒãƒ¼ %s ã‹ã‚‰ä¸€æ‹¬å‰Šé™¤ã®ç¢ºèª'; +$lang['yes_delete'] = 'ã¯ã„, 削除ã—ã¾ã™!'; + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'å­ã‚¨ãƒ³ãƒˆãƒªã‚’æŒã¤ã‚¨ãƒ³ãƒˆãƒªã¯å称変更ã§ãã¾ã›ã‚“ (eg, the rename operation is not allowed on non-leaf entries)'; +$lang['no_rdn_change'] = 'RDN を変更ã—ã¾ã›ã‚“ã§ã—ãŸ'; +$lang['invalid_rdn'] = '無効㪠RDN 値'; +$lang['could_not_rename'] = 'エントリã®å称変更ãŒå‡ºæ¥ã¾ã›ã‚“ã§ã—ãŸ'; + +// General errors +$lang['php5_unsupported'] = 'phpLDAPadmin 㯠PHP 5 をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。You will likely encounter many weird problems if you continue.'; +$lang['mismatched_search_attr_config'] = '設定ã«ã‚¨ãƒ©ãƒ¼ãŒã‚ã‚Šã¾ã™ã€‚$search_attributes must have the same number of attributes as $search_attributes_display.'; + +// Password checker +$lang['passwords_match'] = 'パスワードãŒä¸€è‡´ã—ã¾ã—ãŸ!'; +$lang['passwords_do_not_match'] = 'パスワードãŒä¸€è‡´ã—ã¾ã›ã‚“!'; +$lang['password_checker_tool'] = 'パスワードãƒã‚§ãƒƒã‚¯ãƒ„ール'; +$lang['compare'] = '比較'; +$lang['to'] = 'To'; + +?> diff --git a/lang/nl.php b/lang/nl.php index c040532..89d8a09 100644 --- a/lang/nl.php +++ b/lang/nl.php @@ -1,8 +1,10 @@ - * Uwe Ebel + * Vertaling door Richard Lucassen + * Commentaar gaarne naar bovenstaand adres sturen a.u.b. */ // Search form @@ -56,9 +58,9 @@ $lang['export_to_ldif'] = 'exporteren naar LDIF';//'Export to LDIF'; $lang['export_to_ldif_tooltip'] = 'maak LDIF dump van dit object';//'Save an LDIF dump of this object'; $lang['export_subtree_to_ldif_tooltip'] = 'maak LDIF dump van dit object plus alle onderliggende objecten';//'Save an LDIF dump of this object and all of its children'; $lang['export_subtree_to_ldif'] = 'exporteer deze subvelden naar LDIF';//'Export subtree to LDIF'; -$lang['export_to_ldif_mac'] = 'Macintosh regeleinden';//'Macintosh style line ends'; -$lang['export_to_ldif_win'] = 'Windows regeleinden';//'Windows style line ends'; -$lang['export_to_ldif_unix'] = 'Unix regeleinden';//'Unix style line ends'; +$lang['export_mac'] = 'Macintosh regeleinden';//'Macintosh style line ends'; +$lang['export_win'] = 'Windows regeleinden';//'Windows style line ends'; +$lang['export_unix'] = 'Unix regeleinden';//'Unix style line ends'; $lang['create_a_child_entry'] = 'subveld aanmaken';//'Create a child entry'; $lang['add_a_jpeg_photo'] = 'jpeg foto toevoegen';//'Add a jpegPhoto'; $lang['rename_entry'] = 'veld hernoemen';//'Rename Entry'; @@ -239,6 +241,7 @@ $lang['starts with'] = 'begint met';//'starts with'; $lang['contains'] = 'bevat';//'contains'; $lang['ends with'] = 'eindigt met';//'ends with'; $lang['sounds like'] = 'klinkt als';//'sounds like'; +$lang['predefined_search_str'] = 'of een van deze lijst uitlezen';//'or select a predefined search'; // server_info.php $lang['could_not_fetch_server_info'] = 'kan geen LDAP van de server krijgen';//'Could not retrieve LDAP information from the server'; @@ -326,4 +329,9 @@ $lang['ldif_could_not_modify_object'] = 'Kan object niet wijzigen'; $lang['ldif_line_number'] = 'regelnummer: '; $lang['ldif_line'] = 'regel: '; +$lang['credits'] = 'Credits';//'Credits'; +$lang['changelog'] = 'Changelog';//'ChangeLog'; +$lang['documentation'] = 'Documentatie';// 'Documentation'; + + ?> diff --git a/lang/pl.php b/lang/pl.php new file mode 100644 index 0000000..b40ef9e --- /dev/null +++ b/lang/pl.php @@ -0,0 +1,617 @@ + Czy na pewno chcesz to zrobiæ ?'; +$lang['confirm_recursive_delete_note'] = 'Uwaga: ta operacja jest potencjalnie bardzo niebezpieczna i wykonujesz j± na w³asne ryzyko. Ta akcja nie mo¿e zostaæ cofniêta. We¼ pod uwagê aliasy, owo³ania i inne rzeczy, które mog± spowodowaæ problemy.'; +$lang['delete_all_x_objects'] = 'Usuñ wszystkie %s obiekty/ów'; +$lang['recursive_delete_progress'] = 'Postêp rekursywnego usuwania'; +$lang['entry_and_sub_tree_deleted_successfully'] = 'Wpis %s oraz poddrzewo zosta³y pomy¶lnie usuniête.'; +$lang['failed_to_delete_entry'] = 'B³±d podczas usuwania wpisu %s'; + +// Deleting attributes +$lang['attr_is_read_only'] = 'Atrybut "%s" jest oznaczony jako tylko-do-odczytu w konfiguracji phpLDAPadmin.'; +$lang['no_attr_specified'] = 'Nie okre¶lono nazwy atrybutu.'; +$lang['no_dn_specified'] = 'Nie okre¶lono DN'; + +// Adding attributes +$lang['left_attr_blank'] = 'Pozostawi³e¶/a¶ pust± warto¶æ atrybutu. Proszê wróciæ i spróbowaæ ponownie.'; +$lang['failed_to_add_attr'] = 'B³±d podczas dodawania atrybutu.'; +$lang['file_empty'] = 'Wybrany plik jest pusty lub nie istnieje. Wróæ i spróbuj ponownie.'; +$lang['invalid_file'] = 'B³±d bezpieczeñstwa: Za³adowany plik mo¿e stanowiæ zagro¿enie.'; +$lang['warning_file_uploads_disabled'] = 'Twoja konfiguracja PHP uniemo¿liwia za³adowanie plików. Proszê sprawdziæ php.ini przed kontynuacj±.'; +$lang['uploaded_file_too_big'] = 'Za³adowany plik jest zbyt du¿y. Proszê sprawdziæ ustawienie upload_max_size w php.ini'; +$lang['uploaded_file_partial'] = 'Wybrany plik zosta³ tylko czê¶ciowo za³adowany, prawdopodobnie wyst±pi³ b³±d w sieci.'; +$lang['max_file_size'] = 'Maksymalny rozmiar pliku: %s'; + +// Updating values +$lang['modification_successful'] = 'Modyfikacja zakoñczona pomy¶lnie.'; +$lang['change_password_new_login'] = 'Je¶li zmieni³e¶/a¶ has³o, musisz siê zalogowaæ ponownie z nowym has³em.'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'Nowe atrybuty wymagane'; +$lang['requires_to_add'] = 'Ta akcja wymaga, aby¶ doda³/a'; +$lang['new_attributes'] = 'nowe atrybuty'; +$lang['new_required_attrs_instructions'] = 'Instrukcja: Aby dodaæ tê klasê obiektu do tego wpisu, musisz okre¶liæ'; +$lang['that_this_oclass_requires'] = 'co ta klasa obiektu wymaga. Mo¿esz zrobiæ to w tym formularzu.'; +$lang['add_oclass_and_attrs'] = 'Dodaj klasê obiektu i atrybuty'; + +// General +$lang['chooser_link_tooltip'] = 'Kliknij aby wywo³aæ okno i wybraæ wpis (DN) graficznie'; +$lang['no_updates_in_read_only_mode'] = 'Nie mo¿esz wykonaæ modyfikacji dopóki serwer jest w trybie tylko-do-odczytu'; +$lang['bad_server_id'] = 'Z³y identyfikator (id) serwera'; +$lang['not_enough_login_info'] = 'Brak wystarczaj±cych informacji aby zalogowaæ siê do serwera. Proszê sprawdziæ konfiguracjê.'; +$lang['could_not_connect'] = 'Nie mo¿na pod³±czyæ siê do serwera LDAP.'; +$lang['could_not_connect_to_host_on_port'] = 'Nie mo¿na pod³±czyæ siê do "%s" na port "%s"'; +$lang['could_not_perform_ldap_mod_add'] = 'Nie mo¿na dokonaæ operacji ldap_mod_add.'; +$lang['bad_server_id_underline'] = 'Z³y server_id: '; +$lang['success'] = 'Sukces'; +$lang['server_colon_pare'] = 'Serwer: '; +$lang['look_in'] = 'Szukam w: '; +$lang['missing_server_id_in_query_string'] = 'Nie okre¶lono ID serwera w zapytaniu !'; +$lang['missing_dn_in_query_string'] = 'Nie okre¶lono DN w zapytaniu !'; +$lang['back_up_p'] = 'Do góry...'; +$lang['no_entries'] = 'brak wpisów'; +$lang['not_logged_in'] = 'Nie zalogowany/a'; +$lang['could_not_det_base_dn'] = 'Nie mo¿na okre¶liæ bazowego DN'; +$lang['please_report_this_as_a_bug']='Proszê zg³osiæ to jako b³±d.'; +$lang['reasons_for_error']='To mog³o zdarzyæ siê z kilku powodów, z których najbardziej prawdopodobne to:'; +$lang['yes']='Tak'; +$lang['no']='Nie'; +$lang['go']='Id¼'; +$lang['delete']='Usuñ'; +$lang['back']='Powrót'; +$lang['object']='obiekt'; +$lang['delete_all']='Usuñ wszystko'; +$lang['url_bug_report']='https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; +$lang['hint'] = 'wskazówka'; +$lang['bug'] = 'b³±d (bug)'; +$lang['warning'] = 'ostrze¿enie'; +$lang['light'] = '¿arówka'; // the word 'light' from 'light bulb' +$lang['proceed_gt'] = 'Dalej >>'; + +// Add value form +$lang['add_new'] = 'Dodaj'; +$lang['value_to'] = 'warto¶æ do'; +$lang['distinguished_name'] = 'Wyró¿niona Nazwa (DN)'; +$lang['current_list_of'] = 'Aktualna lista'; +$lang['values_for_attribute'] = 'warto¶ci dla atrybutu'; +$lang['inappropriate_matching_note'] = 'Uwaga: Je¶li nie ustawisz regu³y EQUALITY dla tego atrybutu na Twoim serwerze LDAP otrzymasz b³±d "niew³a¶ciwe dopasowanie (inappropriate matching)"'; +$lang['enter_value_to_add'] = 'Wprowad¼ warto¶æ, któr± chcesz dodaæ:'; +$lang['new_required_attrs_note'] = 'Uwaga: mo¿e byæ wymagane wprowadzenie nowych atrybutów wymaganych przez tê klasê obiektu'; +$lang['syntax'] = 'Sk³adnia'; + +//copy.php +$lang['copy_server_read_only'] = 'Nie mo¿esz dokonaæ modyfikacji dopóki serwer jest w trybie tylko-do-odczytu'; +$lang['copy_dest_dn_blank'] = 'Nie wype³niono docelowej DN.'; +$lang['copy_dest_already_exists'] = 'Docelowy wpis (%s) ju¿ istnieje.'; +$lang['copy_dest_container_does_not_exist'] = 'Docelowy kontener (%s) nie istnieje.'; +$lang['copy_source_dest_dn_same'] = '¬ród³owa i docelowa DN s± takie same.'; +$lang['copy_copying'] = 'Kopiowanie '; +$lang['copy_recursive_copy_progress'] = 'Postêp kopiowania rekursywnego'; +$lang['copy_building_snapshot'] = 'Budowanie migawki (snapshot) drzewa do skopiowania... '; +$lang['copy_successful_like_to'] = 'Kopiowanie zakoñczone pomy¶lnie. Czy chcesz '; +$lang['copy_view_new_entry'] = 'zobaczyæ nowy wpis '; +$lang['copy_failed'] = 'B³±d podczas kopiowania DN: '; + +//edit.php +$lang['missing_template_file'] = 'Uwaga: brak pliku szablonu, '; +$lang['using_default'] = 'U¿ywam domy¶lnego.'; +$lang['template'] = 'Szablon'; +$lang['must_choose_template'] = 'Musisz wybraæ szablon'; +$lang['invalid_template'] = '%s nie jest prawid³owym szablonem'; +$lang['using_template'] = 'wykorzystuj±c szablon'; +$lang['go_to_dn'] = 'Id¼ do %s'; +$lang['structural_object_class_cannot_remove'] = 'To jest strukturalna klasa obiektu i nie mo¿e zostaæ usuniêta.'; +$lang['structural'] = 'strukturalna'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Kopiuj '; +$lang['copyf_to_new_object'] = 'do nowego obiektu'; +$lang['copyf_dest_dn'] = 'Docelowa DN'; +$lang['copyf_dest_dn_tooltip'] = 'Pe³na DN nowego wpisu do utworzenia poprzez skopiowanie wpisu ¼ród³owego'; +$lang['copyf_dest_server'] = 'Docelowy serwer'; +$lang['copyf_note'] = 'Wskazówka: Kopiowanie pomiêdzy ró¿nymi serwerami dzia³a wtedy, gdy nie wystêpuje naruszenie schematów'; +$lang['copyf_recursive_copy'] = 'Rekursywne kopiowanie wszystkich potomnych obiektów'; +$lang['recursive_copy'] = 'Kopia rekursywna'; +$lang['filter'] = 'Filtr'; +$lang['filter_tooltip'] = 'Podczas rekursywnego kopiowania, kopiowane s± tylko wpisy pasuj±ce do filtra'; + +//create.php +$lang['create_required_attribute'] = 'Brak warto¶ci dla wymaganego atrybutu (%s).'; +$lang['redirecting'] = 'Przekierowujê'; +$lang['here'] = 'tutaj'; +$lang['create_could_not_add'] = 'Nie mo¿na dodaæ obiektu do serwera LDAP.'; + +//create_form.php +$lang['createf_create_object'] = 'Utwórz obiekt'; +$lang['createf_choose_temp'] = 'Wybierz szablon'; +$lang['createf_select_temp'] = 'Wybierz szablon dla procesu tworzenia'; +$lang['createf_proceed'] = 'Dalej'; +$lang['rdn_field_blank'] = 'Pozostawi³e¶/a¶ puste pole RDN.'; +$lang['container_does_not_exist'] = 'Kontener który okre¶li³e¶/a¶ (%s) nie istnieje. Spróbuj ponownie.'; +$lang['no_objectclasses_selected'] = 'Nie wybra³e¶/a¶ ¿adnych Klas Obiektu dla tego obiektu. Wróæ proszê i zrób to.'; +$lang['hint_structural_oclass'] = 'Wskazówka: Musisz wybraæ co najmniej jedn± strukturaln± klasê obiektu (wyró¿nion± pogrubieniem)'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'Na serwerze'; +$lang['ctemplate_no_template'] = 'Brak okre¶lenia szablonu w zmiennych POST.'; +$lang['ctemplate_config_handler'] = 'Twoja konfiguracja okre¶la handler'; +$lang['ctemplate_handler_does_not_exist'] = 'dla tego szablonu. Ale, ten handler nie istnieje w szablonach/tworzonym katalogu'; +$lang['create_step1'] = 'Krok 1 z 2: Nazwa i klasa/y obiektu'; +$lang['create_step2'] = 'Krok 2 z 2: Okre¶lenie atrybutów i warto¶ci'; +$lang['relative_distinguished_name'] = 'Relatywna Wyró¿niona Nazwa (RDN)'; +$lang['rdn'] = 'RDN'; +$lang['rdn_example'] = '(przyk³ad: cn=MyNewPerson)'; +$lang['container'] = 'Kontener'; + +// search.php +$lang['you_have_not_logged_into_server'] = 'Nie zalogowa³e¶/a¶ siê jeszcze do wybranego serwera, wiêc nie mo¿esz go przeszukiwaæ.'; +$lang['click_to_go_to_login_form'] = 'Kliknij tutaj aby przej¶æ do formularza logowania'; +$lang['unrecognized_criteria_option'] = 'Nierozpoznane kryterium opcji: '; +$lang['if_you_want_to_add_criteria'] = 'Je¶li chcesz dodaæ w³asne kryteria do listy, zmodyfikuj plik search.php aby to obs³u¿yæ.'; +$lang['entries_found'] = 'Znaleziono wpisów: '; +$lang['filter_performed'] = 'Zastosowano filtr: '; +$lang['search_duration'] = 'Wyszukiwanie wykonane przez phpLDAPadmin w'; +$lang['seconds'] = 'sekund(y)'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'Przeszukiwany zakres'; +$lang['scope_sub'] = 'Sub (ca³e poddrzewo)'; +$lang['scope_one'] = 'One (jeden poziom poni¿ej bazowej)'; +$lang['scope_base'] = 'Base (tylko bazowa dn)'; +$lang['standard_ldap_search_filter'] = 'Standardowy filtr dla LDAP. Na przyk³ad: (&(sn=Kowalski)(givenname=Jan))'; +$lang['search_filter'] = 'Filtr wyszukiwania'; +$lang['list_of_attrs_to_display_in_results'] = 'Lista atrybutów do wy¶wietlenia rezultatów (rozdzielona przecinkami)'; + +// search_form_simple.php +$lang['starts with'] = 'zaczyna siê od'; +$lang['ends with'] = 'koñczy siê na'; +$lang['sounds like'] = 'brzmi jak'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'Nie mo¿na uzyskaæ informacji od serwera LDAP'; +$lang['server_info_for'] = 'Informacja o serwerze: '; +$lang['server_reports_following'] = 'Serwer zwróci³ nastêpuj±ce informacje o sobie'; +$lang['nothing_to_report'] = 'Ten serwer nie chce nic powiedzieæ o sobie :).'; + +//update.php +$lang['update_array_malformed'] = 'tablica modyfikacji (update_array) jest zniekszta³cona. To mo¿e byæ b³±d (bug) w phpLDAPadmin. Proszê to zg³osiæ.'; +$lang['could_not_perform_ldap_modify'] = 'Nie mo¿na wykonaæ operacji modyfikacji (ldap_modify).'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Czy chcesz dokonaæ tych zmian ?'; +$lang['attribute'] = 'Atrybuty'; +$lang['old_value'] = 'Stara warto¶æ'; +$lang['new_value'] = 'Nowa warto¶æ'; +$lang['attr_deleted'] = '[atrybut usuniêty]'; +$lang['commit'] = 'Zatwierd¼'; +$lang['cancel'] = 'Anuluj'; +$lang['you_made_no_changes'] = 'Nie dokonano ¿adnych zmian'; +$lang['go_back'] = 'Powrót'; + +// welcome.php +$lang['welcome_note'] = 'U¿yj menu z lewej strony do nawigacji'; +$lang['credits'] = 'Lista p³ac'; +$lang['changelog'] = 'Historia zmian'; +$lang['donate'] = 'Wesprzyj projekt'; +$lang['purge_cache'] = 'Wyczy¶æ pamiêæ podrêczn±'; +$lang['no_cache_to_purge'] = 'Nie ma czego czy¶ciæ.'; +$lang['done_purging_caches'] = 'Wyczyszczono %s bajtów pamiêci podrêcznej.'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Niebezpieczna nazwa pliku: '; +$lang['no_such_file'] = 'Nie znaleziono pliku: '; + +//function.php +$lang['auto_update_not_setup'] = 'Zezwoli³e¶/a¶ na automatyczne nadawanie uid (auto_uid_numbers) + dla %s w konfiguracji, ale nie okre¶li³e¶/a¶ mechanizmu + (auto_uid_number_mechanism). Proszê skorygowaæ ten problem.'; +$lang['uidpool_not_set'] = 'Okre¶li³e¶/a¶ mechanizm autonumerowania uid "auto_uid_number_mechanism" jako "uidpool" w konfiguracji Twojego serwera %s, lecz nie okre¶li³e¶/a¶ audo_uid_number_uid_pool_dn. Proszê okre¶l to zanim przejdziesz dalej.'; +$lang['uidpool_not_exist'] = 'Wygl±da na to, ¿e uidPool, któr± okre¶li³e¶/a¶ w Twojej konfiguracji ("%s") nie istnieje.'; +$lang['specified_uidpool'] = 'Okre¶li³e¶/a¶ "auto_uid_number_mechanism" jako "search" w konfiguracji Twojego serwera %s, ale nie okre¶li³e¶/a¶ bazy "auto_uid_number_search_base". Zrób to zanim przejdziesz dalej.'; +$lang['auto_uid_invalid_credential'] = 'Nie mo¿na pod³±czyæ do %s z podan± to¿samo¶ci± auto_uid. Proszê sprawdziæ swój plik konfiguracyjny.'; +$lang['bad_auto_uid_search_base'] = 'W Twojej konfiguracji phpLDAPadmin okre¶lona jest nieprawid³owa warto¶æ auto_uid_search_base dla serwera %s'; +$lang['auto_uid_invalid_value'] = 'Okre¶li³e¶/a¶ b³êdn± warto¶æ dla auto_uid_number_mechanism ("%s") w konfiguracji. Tylko "uidpool" i "search" s± poprawne. Proszê skorygowaæ ten problem.'; +$lang['error_auth_type_config'] = 'B³±d: Masz b³±d w pliku konfiguracji. Trzy mo¿liwe warto¶ci dla auth_type w sekcji $servers to \'session\', \'cookie\' oraz \'config\'. Ty wpisa³e¶/a¶ \'%s\', co jest niedozwolone. '; +$lang['unique_attrs_invalid_credential'] = 'Nie mo¿na pod³±czyæ do %s z podan± to¿samo¶ci± unique_attrs. Proszê sprawdziæ swój plik konfiguracyjny.'; +$lang['unique_attr_failed'] = 'Próba dodania %s (%s) do
%s
jest NIEDOZWOLONA. Ten atrybut/warto¶æ nale¿y do innego wpisu.

Je¶li chcesz, mo¿esz poszukaæ tego wpisu.'; +$lang['php_install_not_supports_tls'] = 'Twoja instalacja PHP nie wspiera TLS.'; +$lang['could_not_start_tls'] = 'Nie mo¿na uruchomiæ TLS. Proszê sprawdziæ konfiguracjê serwera LDAP.'; +$lang['could_not_bind_anon'] = 'Nie mo¿na anonimowo pod³±czyæ do serwera.'; +$lang['could_not_bind'] = 'Nie mo¿na pod³±czyæ siê do serwera LDAP.'; +$lang['anonymous_bind'] = 'Pod³±czenie anonimowe'; +$lang['bad_user_name_or_password'] = 'Z³a nazwa u¿ytkownika lub has³o. Spróbuj ponownie.'; +$lang['redirecting_click_if_nothing_happens'] = 'Przekierowujê... Kliknij tutaj je¶li nic siê nie dzieje.'; +$lang['successfully_logged_in_to_server'] = 'Pomy¶lnie zalogowano do serwera %s'; +$lang['could_not_set_cookie'] = 'Nie mo¿na ustawiæ ciasteczka (cookie).'; +$lang['ldap_said'] = 'LDAP odpowiedzia³: %s'; +$lang['ferror_error'] = 'B³±d'; +$lang['fbrowse'] = 'przegl±daj'; +$lang['delete_photo'] = 'Usuñ fotografiê'; +$lang['install_not_support_blowfish'] = 'Twoja instalacja PHP nie wspiera szyfrowania blowfish.'; +$lang['install_not_support_md5crypt'] = 'Twoja instalacja PHP nie wspiera szyfrowania md5crypt.'; +$lang['install_no_mash'] = 'Twoja instalacja PHP nie posiada funkcji mhash(). Nie mogê tworzyæ haszy SHA.'; +$lang['jpeg_contains_errors'] = 'jpegPhoto zawiera b³êdy
'; +$lang['ferror_number'] = 'B³±d numer: %s (%s)'; +$lang['ferror_discription'] = 'Opis: %s

'; +$lang['ferror_number_short'] = 'B³±d numer: %s

'; +$lang['ferror_discription_short'] = 'Opis: (brak dostêpnego opisu)
'; +$lang['ferror_submit_bug'] = 'Czy jest to b³±d w phpLDAPadmin ? Je¶li tak, proszê go zg³osiæ.'; +$lang['ferror_unrecognized_num'] = 'Nierozpoznany numer b³êdu: '; +$lang['ferror_nonfatil_bug'] = '

+
+ Znalaz³e¶ b³±d w phpLDAPadmin (nie krytyczny) !
B³±d:%s (%s)
Plik:%s linia %s, wywo³ane z %s
Wersje:PLA: %s, PHP: %s, SAPI: %s +
Serwer Web:%s
+ Proszê zg³o¶ ten b³±d klikaj±c tutaj.

'; +$lang['ferror_congrats_found_bug'] = 'Gratulacje ! Znalaz³e¶ b³±d w phpLDAPadmin.

+ + + + + + + + + + +
B³±d:%s
Poziom:%s
Plik:%s
Linia:%s
Wywo³ane z:%s
Wersja PLA:%s
Wersja PHP:%s
PHP SAPI:%s
Serwer Web:%s
+
+ Proszê zg³o¶ ten b³±d klikaj±c poni¿ej !'; + +//ldif_import_form +$lang['import_ldif_file_title'] = 'Importuj plik LDIF'; +$lang['select_ldif_file'] = 'Wybierz plik LDIF:'; +$lang['select_ldif_file_proceed'] = 'Dalej >>'; +$lang['dont_stop_on_errors'] = 'Nie zatrzymuj siê po napotkaniu b³êdów'; + +//ldif_import +$lang['add_action'] = 'Dodawanie...'; +$lang['delete_action'] = 'Usuwanie...'; +$lang['rename_action'] = 'Zmiana nazwy...'; +$lang['modify_action'] = 'Modyfikowanie...'; +$lang['warning_no_ldif_version_found'] = 'Nie znaleziono numeru wersji. Przyjmujê 1.'; +$lang['valid_dn_line_required'] = 'Wymagana jest poprawna linia DN.'; +$lang['missing_uploaded_file'] = 'Brak wgrywanego pliku.'; +$lang['no_ldif_file_specified.'] = 'Nie okre¶lono pliku LDIF. Spróbuj ponownie.'; +$lang['ldif_file_empty'] = 'Wgrany plik LDIF jest pusty.'; +$lang['empty'] = 'pusty'; +$lang['file'] = 'Plik'; +$lang['number_bytes'] = '%s bajtów'; + +$lang['failed'] = 'Nieudane'; +$lang['ldif_parse_error'] = 'B³±d przetwarzania LDIF (Parse Error)'; +$lang['ldif_could_not_add_object'] = 'Nie mo¿na dodaæ obiektu:'; +$lang['ldif_could_not_rename_object'] = 'Nie mo¿na zmieniæ nazwy obiektu:'; +$lang['ldif_could_not_delete_object'] = 'Nie mo¿na usun±æ obiektu:'; +$lang['ldif_could_not_modify_object'] = 'Nie mo¿na zmodyfikowaæ obiektu:'; +$lang['ldif_line_number'] = 'Linia numer:'; +$lang['ldif_line'] = 'Linia:'; + +//delete_form +$lang['sure_permanent_delete_object']='Czy na pewno trwale usun±æ ten obiekt ?'; +$lang['list_of_entries_to_be_deleted'] = 'Lista wpisów do usuniêcia:'; +$lang['dn'] = 'DN'; + +// Exports +$lang['export_format'] = 'Format eksportu'; +$lang['line_ends'] = 'Zakoñczenie linii'; +$lang['must_choose_export_format'] = 'Musisz wybraæ format eksportu.'; +$lang['invalid_export_format'] = 'B³êdny format eksportu'; +$lang['no_exporter_found'] = 'Nie znaleziono dostêpnego eksportera.'; +$lang['error_performing_search'] = 'Napotkano b³±d podczas szukania.'; +$lang['showing_results_x_through_y'] = 'Pokazywanie rezultatów %s przez %s.'; +$lang['searching'] = 'Szukam...'; +$lang['size_limit_exceeded'] = 'Uwaga, przekroczono limit rozmiaru wyszukiwania.'; +$lang['entry'] = 'Wpis'; +$lang['ldif_export_for_dn'] = 'Eksport LDIF dla: %s'; +$lang['generated_on_date'] = 'Wygenerowane przez phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) na %s'; +$lang['total_entries'] = '£±cznie wpisów'; +$lang['dsml_export_for_dn'] = 'Eksport DSLM dla: %s'; +$lang['include_system_attrs'] = 'Zawiera atrybuty systemowe'; + +// logins +$lang['could_not_find_user'] = 'Nie mo¿na znale¼æ u¿ytkownika "%s"'; +$lang['password_blank'] = 'Pozostawi³e¶/a¶ puste has³o.'; +$lang['login_cancelled'] = 'Logowanie anulowane.'; +$lang['no_one_logged_in'] = 'Nikt nie jest zalogowany do tego serwera.'; +$lang['could_not_logout'] = 'Nie mo¿na wylogowaæ.'; +$lang['unknown_auth_type'] = 'Nieznany auth_type: %s'; +$lang['logged_out_successfully'] = 'Pomy¶lnie wylogowano z serwera %s'; +$lang['authenticate_to_server'] = 'Uwierzytelnienie dla serwera %s'; +$lang['warning_this_web_connection_is_unencrypted'] = 'Uwaga: To po³±czenie nie jest szyfrowane.'; +$lang['not_using_https'] = 'Nie u¿ywasz \'https\'. Przegl±darka bêdzie transmitowaæ informacjê logowania czystym tekstem (clear text).'; +$lang['login_dn'] = 'Login DN'; +$lang['user_name'] = 'Nazwa u¿ytkownika'; +$lang['password'] = 'Has³o'; +$lang['authenticate'] = 'Zaloguj'; + +// Entry browser +$lang['entry_chooser_title'] = 'Wybór wpisu'; + +// Index page +$lang['need_to_configure'] = 'Musisz skonfigurowaæ phpLDAPadmin. Wyedytuj plik \'config.php\' aby to zrobiæ. Przyk³ad pliku konfiguracji znajduje siê w \'config.php.example\''; + +// Mass deletes +$lang['no_deletes_in_read_only'] = 'Usuwanie jest niedozwolone w trybie tylko-do-odczytu.'; +$lang['error_calling_mass_delete'] = 'B³±d podczas wywo³ania mass_delete.php. Brakuj±ca mass_delete w zmiennych POST.'; +$lang['mass_delete_not_array'] = 'zmienna POST mass_delete nie jest w tablic±.'; +$lang['mass_delete_not_enabled'] = 'Masowe usuwanie nie jest dozwolone. Odblokuj to proszê w config.php przed kontynuacj±.'; +$lang['search_attrs_wrong_count'] = 'Twój config.php zawiera b³±d. Ilo¶æ atrybutów w $search_attributes i$search_attributes_display jest ró¿na'; +$lang['mass_deleting'] = 'Masowe usuwanie'; +$lang['mass_delete_progress'] = 'Postêp usuwania na serwerze "%s"'; +$lang['malformed_mass_delete_array'] = 'Zniekszta³cona tablica mass_delete.'; +$lang['no_entries_to_delete'] = 'Nie wybrano ¿adnegych wpisów do usuniêcia.'; +$lang['deleting_dn'] = 'Usuwanie %s'; +$lang['total_entries_failed'] = '%s z %s wpisów nie zosta³o usuniêtych.'; +$lang['all_entries_successful'] = 'Wszystkie wpisy pomy¶lnie usunieto.'; +$lang['confirm_mass_delete'] = 'Potwierd¼ masowe usuniêcie %s wpisów na serwerze %s'; +$lang['yes_delete'] = 'Tak, usuñ !'; + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'Nie mo¿esz zmieniæ nazwy wpisu, posiadaj±cego wpisy potomne (np. operacja zmiany nazwy nie jest dozwolona na wpisach nie bêd±cych li¶cmi).'; +$lang['no_rdn_change'] = 'Nie zmieni³e¶/a¶ RDN'; +$lang['invalid_rdn'] = 'B³êdna warto¶æ RDN'; +$lang['could_not_rename'] = 'Nie mo¿na zmieniæ nazwy wpisu'; + +// Templates +$lang['using'] = 'U¿ywaj±c'; +$lang['template'] = 'szablonu'; +$lang['switch_to'] = 'Mo¿esz prze³±czyæ siê do '; +$lang['default_template'] = 'domy¶lnego szablonu'; + +// template_config +$lang['user_account'] = 'Konto U¿ytkownika (posixAccount)'; +$lang['address_book'] = 'Wpis Ksi±¿ki Adresowej (inetOrgPerson)'; +$lang['kolab_user'] = 'Wpis U¿ytkownika Kolab'; +$lang['organizational_unit'] = 'Jednostka Organizacyjna'; +$lang['organizational_role'] = 'Rola w Organizacji'; +$lang['posix_group'] = 'Grupa Posix'; +$lang['samba_machine'] = 'Maszyna Samba NT'; +$lang['samba3_machine'] = 'Maszyna Samba 3 NT'; +$lang['samba_user'] = 'U¿ytkownik Samba'; +$lang['samba3_user'] = 'U¿ytkownik Samba 3'; +$lang['samba3_group'] = 'Przypisanie grupy Samba 3'; +$lang['dns_entry'] = 'Wpis DNS'; +$lang['simple_sec_object'] = 'Prosty obiekt bezpieczeñstwa (SSO)'; +$lang['courier_mail_account'] = 'Konto Pocztowe w Courier'; +$lang['courier_mail_alias'] = 'Alias Pocztowy w Courier'; +$lang['ldap_alias'] = 'Alias w LDAP'; +$lang['custom'] = 'Ogólne'; +$lang['samba_domain_name'] = 'Moja nazwa domeny w Samba'; +$lang['administrators'] = 'Administratorzy'; +$lang['users'] = 'U¿ytkownicy'; +$lang['guests'] = 'Go¶cie'; +$lang['power_users'] = 'U¿ytkownicy zaawansowani'; +$lang['account_ops'] = 'Operatorzy kont'; +$lang['server_ops'] = 'Operatorzy serwera'; +$lang['print_ops'] = 'Operatorzy drukowania'; +$lang['backup_ops'] = 'Operatorzy archiwizacji danych'; +$lang['replicator'] = 'Replikator'; +$lang['unable_smb_passwords'] = ' Nie mo¿na utworzyæ hase³ Samba. Proszê sprawdziæ konfiguracjê w template_config.php'; + +// Samba Account Template +$lang['samba_account'] = 'Konto Samba'; +$lang['samba_account_lcase'] = 'konto samba'; + +// New User (Posix) Account +$lang['t_new_user_account'] = 'Nowe konto u¿ytkownika'; +$lang['t_hint_customize'] = 'Wskazówka: Aby dostosowaæ ten szablon, wyedytuj plik templates/creation/new_user_template.php'; +$lang['t_name'] = 'Nazwa/Nazwisko'; +$lang['t_first_name'] = 'Imiê'; +$lang['t_last_name'] = 'Nazwisko'; +$lang['t_common_name'] = 'Nazwa'; +$lang['t_user_name'] = 'Nazwa u¿ytkownika'; +$lang['t_password'] = 'Has³o'; +$lang['t_encryption'] = 'Szyfrowanie'; +$lang['t_login_shell'] = 'Pow³oka (shell)'; +$lang['t_home_dir'] = 'Katalog domowy'; +$lang['t_uid_number'] = 'Numer UID'; +$lang['t_auto_det'] = '(automatycznie okre¶lony)'; +$lang['t_group'] = 'Grupa'; +$lang['t_gid_number'] = 'Numer GID'; +$lang['t_err_passwords'] = 'Has³a nie zgadzaj± siê. Wróc i spróbuj ponownie.'; +$lang['t_err_field_blank'] = 'Nie mo¿esz pozostawiæ pustego pola %s. Wróæ i spróbuj ponownie.'; +$lang['t_err_field_num'] = 'Pole %s mo¿e zawieraæ tylko warto¶ci numeryczne. Wróæ i spróbuj ponownie.'; +$lang['t_err_bad_container'] = 'Kontener który wybra³e¶/a¶ (%s) nie istnieje. Wróæ i spróbuj ponownie.'; +$lang['t_confirm_account_creation'] = 'Potwierd¼ utworzenie konta'; +$lang['t_secret'] = '[tajne]'; +$lang['t_create_account'] = 'Utwórz konto'; + +// New Address Template +$lang['t_new_address'] = 'Nowy wpis w Ksi±¿ce Adresowej'; +$lang['t_organization'] = 'Organizacja'; +$lang['t_address'] = 'Adres'; +$lang['t_city'] = 'Miasto'; +$lang['t_postal_code'] = 'Kod pocztowy'; +$lang['t_street'] = 'Ulica'; +$lang['t_work_phone'] = 'Telefon s³u¿bowy'; +$lang['t_fax'] = 'Fax'; +$lang['t_mobile'] = 'Telefon komórkowy'; +$lang['t_email'] = 'E-mail'; +$lang['t_container'] = 'Kontener'; +$lang['t_err_cn_blank'] = 'Nie mo¿esz pozostawiæ pustego pola Nazwa. Wróæ i spróbuj ponownie.'; +$lang['t_confim_creation'] = 'Potwierd¼ utworzenie wpisu:'; +$lang['t_create_address'] = 'Utwórz adres'; + +?> diff --git a/lang/pt-br.php b/lang/pt-br.php new file mode 100644 index 0000000..f89b128 --- /dev/null +++ b/lang/pt-br.php @@ -0,0 +1,516 @@ +To delete an attribute, empty the text field and click save.'; +$lang['attr_schema_hint'] = 'Dica: Para ver o esquema de um atributo clique no nome do atributo.';//'Hint: To view the schema for an attribute, click the attribute name.'; +$lang['attrs_modified'] = 'Alguns atributos (%s) foram modificados e estão destacados abaixo.';//'Some attributes (%s) were modified and are highlighted below.'; +$lang['attr_modified'] = 'Um atributo (%s) foi modificado e está destacado abaixo';//'An attribute (%s) was modified and is highlighted below.'; +$lang['viewing_read_only'] = 'Vizualizando objeto em modo somente-leitura.';//'Viewing entry in read-only mode.'; +$lang['no_new_attrs_available'] = 'novos atributos não disponíveis para este objeto.';//'no new attributes available for this entry'; +$lang['no_new_binary_attrs_available'] = 'novos atributos binários não disponíveis para este objeto.';//'no new binary attributes available for this entry'; +$lang['binary_value'] = 'Valor binário';//'Binary value'; +$lang['add_new_binary_attr'] = 'Inserir novo atributo binário';//'Add New Binary Attribute'; +$lang['alias_for'] = 'Nota: \'%s\' é um alias para \'%s\'';//'Note: \'%s\' is an alias for \'%s\''; +$lang['download_value'] = 'download do valor';//'download value'; +$lang['delete_attribute'] = 'apagar atributo';//'delete attribute'; +$lang['true'] = 'verdadeiro';//'true'; +$lang['false'] = 'falso';//'false'; +$lang['none_remove_value'] = 'nenhum, remover valor';//?? //'none, remove value'; +$lang['really_delete_attribute'] = 'Deseja realmente apagar atributo';//'Really delete attribute'; +$lang['add_new_value'] = 'Inserir novo valor';//'Add New Value'; + +// Schema browser +$lang['the_following_objectclasses'] = 'As seguintes Classes de objetos são suportadas por este servidor LDAP.';//'The following objectClasses are supported by this LDAP server.'; +$lang['the_following_attributes'] = 'Os seguintes tipos de atributos são suportadas por este servidor LDAP.';//'The following attributeTypes are supported by this LDAP server.'; +$lang['the_following_matching'] = 'As seguintes regras de consistência são suportadas por este servidor LDAP.';//'The following matching rules are supported by this LDAP server.'; +$lang['the_following_syntaxes'] = 'As seguintes sintaxes são suportadas por este servidor LDAP.';//'The following syntaxes are supported by this LDAP server.'; +$lang['schema_retrieve_error_1']='O servidor não suporta o protocolo LDAP completamente.';//'The server does not fully support the LDAP protocol.'; +$lang['schema_retrieve_error_2']='Sua versão do PHP não executa a consulta corretamente.';//'Your version of PHP does not correctly perform the query.'; +$lang['schema_retrieve_error_3']='Ou, por fim, o phpLDAPadmin não sabe como buscar o esquema para o seu servidor.';//'Or lastly, phpLDAPadmin doesn\'t know how to fetch the schema for your server.'; +$lang['jump_to_objectclass'] = 'Ir para uma classe de objetos';//'Jump to an objectClass'; +$lang['jump_to_attr'] = 'Ir para um tipo de atributo';//'Jump to an attribute'; +$lang['jump_to_matching_rule'] = 'Ir para regras de consistência';//'Jump to a matching rule'; +$lang['schema_for_server'] = 'Esquema para servidor';//'Schema for server'; +$lang['required_attrs'] = 'Atributos Obrigatórios';//'Required Attributes'; +$lang['optional_attrs'] = 'Atributos Opcionais';//'Optional Attributes'; +$lang['optional_binary_attrs'] = 'Atributos Binários Opcionais';//'Optional Binary Attributes'; +$lang['OID'] = 'OID';//'OID'; +$lang['aliases']='Apelidos';//'Aliases'; +$lang['desc'] = 'Descrição';//'Description'; +$lang['no_description']='sem descrição';//'no description'; +$lang['name'] = 'Nome';//'Name'; +$lang['equality']='Igualdade';//'Equality'; +$lang['is_obsolete'] = 'Esta classe de objeto está obsoleta.';//'This objectClass is obsolete'; +$lang['inherits'] = 'Herda de';//'Inherits'; +$lang['inherited_from']='Herdado de';//inherited from'; +$lang['parent_to'] = 'Pai para';//'Parent to'; +$lang['jump_to_this_oclass'] = 'Ir para definição desta classe de objeto';//'Jump to this objectClass definition'; +$lang['matching_rule_oid'] = 'OID da Regra de consistência';//'Matching Rule OID'; +$lang['syntax_oid'] = 'OID da Sintaxe';//'Syntax OID'; +$lang['not_applicable'] = 'não aplicável';//'not applicable'; +$lang['not_specified'] = 'não especificado';//not specified'; +$lang['character']='caracter';//'character'; +$lang['characters']='caracteres';//'characters'; +$lang['used_by_objectclasses']='Usado por classes de objetos';//'Used by objectClasses'; +$lang['used_by_attributes']='Usado por Atributos';//'Used by Attributes'; +$lang['oid']='OID'; +$lang['obsolete']='Obsoleto';//'Obsolete'; +$lang['ordering']='Ordenando';//'Ordering'; +$lang['substring_rule']='Regra de substring';//'Substring Rule'; +$lang['single_valued']='Avaliado sozinho';//'Single Valued'; +$lang['collective']='Coletivo';//'Collective'; +$lang['user_modification']='Alteração do usuário';//'User Modification'; +$lang['usage']='Uso';//'Usage'; +$lang['maximum_length']='Tamanho Máximo';//'Maximum Length'; +$lang['attributes']='Tipos de Atriburos';//'Attributes Types'; +$lang['syntaxes']='Sintaxes';//'Syntaxes'; +$lang['objectclasses']='Classe de Objetos';//'objectClasses'; +$lang['matchingrules']='Regra de consistência';//'Matching Rules'; +$lang['could_not_retrieve_schema_from']='Não foi possível encontrar esquema de';//'Could not retrieve schema from'; +$lang['type']='Tipo';// 'Type'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'Objeto \'%s\' excluído com sucesso.';//'Entry \'%s\' deleted successfully.'; +$lang['you_must_specify_a_dn'] = 'Você deve especificar um DN';//'You must specify a DN'; +$lang['could_not_delete_entry'] = 'Não foi possível excluir o objeto: %s';//'Could not delete the entry: %s'; +$lang['no_such_entry'] = 'Objeto inexistente: %s';//'No such entry: %s'; +$lang['delete_dn'] = 'Excluir %s';//'Delete %s'; +$lang['entry_is_root_sub_tree'] = 'Este objeto é a raiz de uma sub-árvore e contém %s objetos.';//'This entry is the root of a sub-tree containing %s entries.'; +$lang['view_entries'] = 'Ver objetos';//'view entries'; +$lang['confirm_recursive_delete'] = 'o phpLDAPadmin pode excluir recursivamente este objeto e todos %s filhos. Veja abaixo uma lista de todos os objetos que esta ação vai excluir. Deseja fazer isso?';//'phpLDAPadmin can recursively delete this entry and all %s of its children. See below for a list of all the entries that this action will delete. Do you want to do this?'; +$lang['confirm_recursive_delete_note'] = 'Nota: isto é potencialmente muito perigoso, faça isso por sua conta e risco. Esta operação não pode ser desfeita. Leve em consideração apelidos, referências e outras coisas que podem causar problemas.';//'Note: this is potentially very dangerous and you do this at your own risk. This operation cannot be undone. Take into consideration aliases, referrals, and other things that may cause problems.'; +$lang['delete_all_x_objects'] = 'Excluir todos os %s objetos';//'Delete all %s objects'; +$lang['recursive_delete_progress'] = 'Progresso de exclusão recursiva';//'Recursive delete progress'; +$lang['entry_and_sub_tree_deleted_successfully'] = 'Objeto %s e sub-árvore excluído com sucesso.';// 'Entry %s and sub-tree deleted successfully.'; +$lang['failed_to_delete_entry'] = 'Falha ao excluir objeto %s';//'Failed to delete entry %s'; + +// Deleting attributes +$lang['attr_is_read_only'] = 'O atributo %s está marcado como somente leitura na configuração do phpLDAPadmin.';//'The attribute "%s" is flagged as read-only in the phpLDAPadmin configuration.'; +$lang['no_attr_specified'] = 'Nome de atributo não especificado.';//'No attribute name specified.'; +$lang['no_dn_specified'] = 'DN não especificado';//'No DN specified'; + +// Adding attributes +$lang['left_attr_blank'] = 'Você deixou o valor do atributo vazio. Por favor retorne e tente novamente.';//'You left the attribute value blank. Please go back and try again.'; +$lang['failed_to_add_attr'] = 'Falha ao inserir o atributo.';//'Failed to add the attribute.'; +$lang['file_empty'] = 'O arquivo que você escolheu está vazio ou não existe. Por favor retorne e tente novamente.';//'The file you chose is either empty or does not exist. Please go back and try again.'; +$lang['invalid_file'] = 'Erro de segurança: O arquivo que está sendo carregado pode ser malicioso.';//'Security error: The file being uploaded may be malicious.'; +$lang['warning_file_uploads_disabled'] = 'Sua configuração do PHP desabilitou o upload de arquivos. Por favor verifique o php.ini antes de continuar.';//'Your PHP configuration has disabled file uploads. Please check php.ini before proceeding.'; +$lang['uploaded_file_too_big'] = 'O arquivo que você carregou é muito grande. Por favor verifique a configuração do upload_max_size no php.ini';//'The file you uploaded is too large. Please check php.ini, upload_max_size setting'; +$lang['uploaded_file_partial'] = 'O arquivo que você selecionou foi carregado parcialmente, provavelmente por causa de um erro de rede.';//'The file you selected was only partially uploaded, likley due to a network error.'; +$lang['max_file_size'] = 'Tamanho máximo de arquivo: %s';//'Maximum file size: %s'; + +// Updating values +$lang['modification_successful'] = 'Alteração bem sucedida!';//'Modification successful!'; +$lang['change_password_new_login'] = 'Você alterou sua senha, você deve conectar novamente com a sua nova senha.'; //'Since you changed your password, you must now login again with your new password.'; + + +// Adding objectClass form +$lang['new_required_attrs'] = 'Novos Atributos Obrigatórios';//'New Required Attributes'; +$lang['requires_to_add'] = 'Esta ação requer que você insira';//'This action requires you to add'; +$lang['new_attributes'] = 'novos atributos';//'new attributes'; +$lang['new_required_attrs_instructions'] = 'Instruções: Para poder inserir esta Classe de Objetos a este objeto, você deve especificar';//'Instructions: In order to add this objectClass to this entry, you must specify'; +$lang['that_this_oclass_requires'] = 'que esta Classe de Objetos requer. Você pode fazê-lo no formulário abaixo:';//'that this objectClass requires. You can do so in this form.'; +$lang['add_oclass_and_attrs'] = 'Inserir Classe de Objetos e Atributos';//'Add ObjectClass and Attributes'; + +// General +$lang['chooser_link_tooltip'] = 'Clique para abrir uma janela e selecionar um objeto (DN) graficamente';//"Click to popup a dialog to select an entry (DN) graphically'; +$lang['no_updates_in_read_only_mode'] = 'Você não pode realizar atualizações enquanto o servidor estiver em modo somente leitura';//'You cannot perform updates while server is in read-only mode'; +$lang['bad_server_id'] = 'ID do servidor inválido';//'Bad server id'; +$lang['not_enough_login_info'] = 'Informações insuficientes para a conexão com o servidor. Por favor verifique sua configuração.';//'Not enough information to login to server. Please check your configuration.'; +$lang['could_not_connect'] = 'Não foi possível conectar com o servidor LDAP.';//'Could not connect to LDAP server.'; +$lang['could_not_connect_to_host_on_port'] = 'Não foi possível conectar em "%s" na porta "%s"';//'Could not connect to "%s" on port "%s"'; +$lang['could_not_perform_ldap_mod_add'] = 'Não foi possível executar operação ldap_mod_add.';//'Could not perform ldap_mod_add operation.'; +$lang['bad_server_id_underline'] = 'server_id inválido: ';//"Bad server_id: '; +$lang['success'] = 'Sucesso';//"Success'; +$lang['server_colon_pare'] = 'Servidor: ';//"Server: '; +$lang['look_in'] = 'Procurando em: ';//"Looking in: '; +$lang['missing_server_id_in_query_string'] = 'ID do servidor não especificado na consulta!';//'No server ID specified in query string!'; +$lang['missing_dn_in_query_string'] = 'DN não especificado na consulta!';//'No DN specified in query string!'; +$lang['back_up_p'] = 'Backup...';//"Back Up...'; +$lang['no_entries'] = 'nenhum objeto';//"no entries'; +$lang['not_logged_in'] = 'Não conectado';//"Not logged in'; +$lang['could_not_det_base_dn'] = 'Não foi possível determinar a base DN';//"Could not determine base DN'; +$lang['reasons_for_error']='Isso pode ter acontecido por vários motivos, os mais provável são:';//'This could happen for several reasons, the most probable of which are:'; +$lang['please_report_this_as_a_bug']='Por favor informe isso como bug.';//'Please report this as a bug.'; +$lang['yes']='Sim';//'Yes' +$lang['no']='Não';//'No' +$lang['go']='Ir';//'go' +$lang['delete']='Excluir';//'Delete'; +$lang['back']='Voltar';//'Back'; +$lang['object']='objeto';//'object'; +$lang['delete_all']='Excluir tudo';//'Delete all'; +$lang['url_bug_report']='https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; +$lang['hint'] = 'dica';//'hint'; +$lang['bug'] = 'bug';//'bug'; +$lang['warning'] = 'aviso';//'warning'; +$lang['light'] = 'a palavra "light" de "light bulb"'; // the word 'light' from 'light bulb' +$lang['proceed_gt'] = 'Continuar >>';//'Proceed >>'; + + +// Add value form +$lang['add_new'] = 'Inserir novo';//'Add new'; +$lang['value_to'] = 'valor para';//'value to'; +//also used in copy_form.php +$lang['distinguished_name'] = 'Nome Distinto';// 'Distinguished Name'; +$lang['current_list_of'] = 'Lista atual de';//'Current list of'; +$lang['values_for_attribute'] = 'valores para atributo';//'values for attribute'; +$lang['inappropriate_matching_note'] = 'Nota: Você vai receber um erro de "inappropriate matching" se você não configurar uma regra de IGUALDADE no seu servidor LDAP para este atributo.'; //'Note: You will get an "inappropriate matching" error if you have not
setup an EQUALITY rule on your LDAP server for this attribute.'; +$lang['enter_value_to_add'] = 'Entre com o valor que você quer inserir: ';//'Enter the value you would like to add:'; +$lang['new_required_attrs_note'] = 'Nota: talvez seja solicitado que você entre com os atributos necessários para esta classe de objetos';//'Note: you may be required to enter new attributes
that this objectClass requires.'; +$lang['syntax'] = 'Sintaxe';//'Syntax'; + +//Copy.php +$lang['copy_server_read_only'] = 'Você não pode realizar atualizações enquanto o servidor estiver em modo somente leitura';//"You cannot perform updates while server is in read-only mode'; +$lang['copy_dest_dn_blank'] = 'Você deixou o DN de destino vazio.';//"You left the destination DN blank.'; +$lang['copy_dest_already_exists'] = 'O objeto de destino (%s) já existe.';//"The destination entry (%s) already exists.'; +$lang['copy_dest_container_does_not_exist'] = 'O container de destino (%s) não existe.';//'The destination container (%s) does not exist.'; +$lang['copy_source_dest_dn_same'] = 'O DN de origem e destino são o mesmo.';//"The source and destination DN are the same.'; +$lang['copy_copying'] = 'Copiando ';//"Copying '; +$lang['copy_recursive_copy_progress'] = 'Progresso da cópia recursiva';//"Recursive copy progress'; +$lang['copy_building_snapshot'] = 'Construindo a imagem da árvore a ser copiada...';//"Building snapshot of tree to copy... '; +$lang['copy_successful_like_to'] = 'Copiado com sucesso! Você gostaria de ';//"Copy successful! Would you like to '; +$lang['copy_view_new_entry'] = 'ver o novo objeto';//"view the new entry'; +$lang['copy_failed'] = 'Falha ao copiar DN: ';//'Failed to copy DN: '; + + +//edit.php +$lang['missing_template_file'] = 'Aviso: arquivo modelo faltando, ';//'Warning: missing template file, '; +$lang['using_default'] = 'Usando o padrão.';//'Using default.'; +$lang['template'] = 'Modelo';//'Template'; +$lang['must_choose_template'] = 'Você deve escolher um modelo';//'You must choose a template'; +$lang['invalid_template'] = '%s é um modelo inválido';// '%s is an invalid template'; +$lang['using_template'] = 'usando o modelo';//'using template'; +$lang['go_to_dn'] = 'Ir para %s';//'Go to %s'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Copiar ';//"Copy '; +$lang['copyf_to_new_object'] = 'para um novo objeto';//"to a new object'; +$lang['copyf_dest_dn'] = 'DN de destino';//"Destination DN'; +$lang['copyf_dest_dn_tooltip'] = 'O DN completo do novo objeto que será criado a partir da cópia da origem';//'The full DN of the new entry to be created when copying the source entry'; +$lang['copyf_dest_server'] = 'Servidor de destino';//"Destination Server'; +$lang['copyf_note'] = 'Dica: Copiando entre diferentes servidores somente funciona se não houver violação de esquema';//"Note: Copying between different servers only works if there are no schema violations'; +$lang['copyf_recursive_copy'] = 'Copia recursivamente todos filhos deste objeto também.';//"Recursively copy all children of this object as well.'; +$lang['recursive_copy'] = 'Cópia Recursiva';//'Recursive copy'; +$lang['filter'] = 'Filtro';//'Filter'; +$lang['filter_tooltip'] = 'Quando executar uma cópia recursiva, copiar somente os objetos que atendem a este filtro';// 'When performing a recursive copy, only copy those entries which match this filter'; + + +//create.php +$lang['create_required_attribute'] = 'Você deixou vazio o valor de um atributo obrigatório (%s).';//"Error, you left the value blank for required attribute '; +$lang['redirecting'] = 'Redirecionando...';//"Redirecting'; moved from create_redirection -> redirection +$lang['here'] = 'aqui';//"here'; renamed vom create_here -> here +$lang['create_could_not_add'] = 'Não foi possível inserir o objeto no servidor LDAP.';//"Could not add the object to the LDAP server.'; + +//create_form.php +$lang['createf_create_object'] = 'Criar Objeto';//"Create Object'; +$lang['createf_choose_temp'] = 'Escolher um modelo';//"Choose a template'; +$lang['createf_select_temp'] = 'Selecionar um modelo para o processo de criação';//"Select a template for the creation process'; +$lang['createf_proceed'] = 'Prosseguir';//"Proceed >>'; +$lang['rdn_field_blank'] = 'Você deixou o campo RDN vazio.';//'You left the RDN field blank.'; +$lang['container_does_not_exist'] = 'O container que você especificou (%s) não existe. Por favor tente novamente.';// 'The container you specified (%s) does not exist. Please try again.'; +$lang['no_objectclasses_selected'] = 'Você não selecionou nenhuma Classe de Objetos para este objeto. Por favor volte e faça isso.';//'You did not select any ObjectClasses for this object. Please go back and do so.'; +$lang['hint_structural_oclass'] = 'Dica: Você deve escolher pelo menos uma Classe de Objetos estrutural';//'Hint: You must choose at least one structural objectClass'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'No servidor';//"On server'; +$lang['ctemplate_no_template'] = 'Nenhum modelo especificado.';//"No template specified in POST variables.'; +$lang['ctemplate_config_handler'] = 'Seu arquivo de configuração determina que o modelo';//"Your config specifies a handler of'; +$lang['ctemplate_handler_does_not_exist'] = 'é válido. Porém este modelo não existe no diretório "templates/creation".';//"for this template. But, this handler does not exist in the 'templates/creation' directory.'; +$lang['create_step1'] = 'Passo 1 de 2: Nome e Classe(s) de Objetos';//'Step 1 of 2: Name and ObjectClass(es)'; +$lang['create_step2'] = 'Passo 2 de 2: Especifica atributos e valores';//'Step 2 of 2: Specify attributes and values'; +$lang['relative_distinguished_name'] = 'Nome Distinto Relativo';//'Relative Distinguished Name'; +$lang['rdn'] = 'RDN';//'RDN'; +$lang['rdn_example'] = 'exemplo: cn=MinhaNovaPessoa';//'(example: cn=MyNewPerson)'; +$lang['container'] = 'Container';//'Container'; + + +// search.php +$lang['you_have_not_logged_into_server'] = 'Você não conectou no servidor selecionado ainda, assim, você não pode realizar buscas nele.';//'You have not logged into the selected server yet, so you cannot perform searches on it.'; +$lang['click_to_go_to_login_form'] = 'Clique aqui para conectar-se ao servidor';//'Click here to go to the login form'; +$lang['unrecognized_criteria_option'] = 'Critério desconhecido: ';// 'Unrecognized criteria option: '; +$lang['if_you_want_to_add_criteria'] = 'Se você quer inserir seus próprios critérios à lista. Certifique-se de editar o search.php para tratá-los. Saindo.';//'If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting.'; +$lang['entries_found'] = 'Objetos encontrados: ';//'Entries found: '; +$lang['filter_performed'] = 'Filtro aplicado: ';//'Filter performed: '; +$lang['search_duration'] = 'Busca realizada pelo phpLDAPadmin em';//'Search performed by phpLDAPadmin in'; +$lang['seconds'] = 'segundos';//'seconds'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'O escopo no qual procurar';//'The scope in which to search'; +$lang['scope_sub'] = 'Sub (toda a sub-árvore)';//'Sub (entire subtree)'; +$lang['scope_one'] = 'One (um nível de profundidade)';//'One (one level beneath base)'; +$lang['scope_base'] = 'Base (apenas a base dn)';//'Base (base dn only)'; +$lang['standard_ldap_search_filter'] = 'Filtro de busca LDAP padrão. Exemplo: (&(sn=Silva)(givenname=Pedro))';//'Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))'; +$lang['search_filter'] = 'Filtro de Busca';//'Search Filter'; +$lang['list_of_attrs_to_display_in_results'] = 'A lista de atributos que devem ser mostrados nos resultados (separados por vírgula)';//'A list of attributes to display in the results (comma-separated)'; + +// search_form_simple.php +$lang['starts with'] = 'inicia com';//'starts with'; +$lang['ends with'] = 'termina com';//'ends with'; +$lang['sounds like'] = 'é semelhante a';//'sounds like'; + + +// server_info.php +$lang['could_not_fetch_server_info'] = 'Não foi possível obter informação LDAP do servidor';//'Could not retrieve LDAP information from the server'; +$lang['server_info_for'] = 'Informações do servidor: ';//'Server info for: '; +$lang['server_reports_following'] = 'O servidor forneceu a seguinte informação sobre si mesmo';//'Server reports the following information about itself'; +$lang['nothing_to_report'] = 'Este servidor não tem nada a informar';//'This server has nothing to report.'; + +//update.php +$lang['update_array_malformed'] = 'update_array danificado. Isto pode ser um bug do phpLDAPadmin. Por favor informe.';//'update_array is malformed. This might be a phpLDAPadmin bug. Please report it.'; +$lang['could_not_perform_ldap_modify'] = 'Não foi possível realizar a operação ldap_modify.';//'Could not perform ldap_modify operation.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Você confirma estas alterações?';//'Do you want to make these changes?'; +$lang['attribute'] = 'Atributo';//'Attribute'; +$lang['old_value'] = 'Valor Antigo';//'Old Value'; +$lang['new_value'] = 'Valor Novo';//'New Value'; +$lang['attr_deleted'] = '[atributo excluído]';//'[attribute deleted]'; +$lang['commit'] = 'Confirmar';//'Commit'; +$lang['cancel'] = 'Cancelar';//'Cancel'; +$lang['you_made_no_changes'] = 'Você não fez alterações';//'You made no changes'; +$lang['go_back'] = 'Voltar';//'Go back'; + +// welcome.php +$lang['welcome_note'] = 'Use o menu à esquerda para navegar';//'Use the menu to the left to navigate'; +$lang['credits'] = 'Créditos';//'Credits'; +$lang['changelog'] = 'Log de Alterações';//'ChangeLog'; +$lang['donate'] = 'Contribuir';//'Donate'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Nome de arquivo inseguro: ';//'Unsafe file name: '; +$lang['no_such_file'] = 'Arquivo inexistente: ';//'No such file: '; + +//function.php +$lang['auto_update_not_setup'] = 'Você habilitou auto_uid_numbers para %s na sua configuração, mas você não especificou auto_uid_number_mechanism. Por favor corrija este problema.';//"You have enabled auto_uid_numbers for %s in your configuration, but you have not specified the auto_uid_number_mechanism. Please correct this problem.'; +$lang['uidpool_not_set'] = 'Você especificou o "auto_uid_number_mechanism" como "uidpool" na sua configuração para o servidor %s, mas você não especificou o audo_uid_number_uid_pool_dn. Por favor especifique-o antes de continuar.';//"You specified the auto_uid_number_mechanism as uidpool in your configuration for server %s, but you did not specify the audo_uid_number_uid_pool_dn. Please specify it before proceeding.'; +$lang['uidpool_not_exist'] = 'Parece que o uidPool que você especificou na sua configuração (%s) não existe.';//"It appears that the uidPool you specified in your configuration (%s) does not exist.'; +$lang['specified_uidpool'] = 'Você especificou o "auto_uid_number_mechanism" como "busca" na sua configuração para o servidor %s, mas você não especificou o "auto_uid_number_search_base". Por favor especifique-o antes de continuar.';//"You specified the auto_uid_number_mechanism as search in your configuration for server %s, but you did not specify the auto_uid_number_search_base. Please specify it before proceeding.'; +$lang['auto_uid_invalid_credential'] = 'Problema ao conectar ao %s com as suas credenciais auto_uid. Por favor verifique seu arquivo de configuração.';// 'Unable to bind to %s with your with auto_uid credentials. Please check your configuration file.'; +$lang['bad_auto_uid_search_base'] = 'Sua configuração do phpLDAPadmin especifica que o auto_uid_search_base é inválido para o servidor %s';//'Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s'; +$lang['auto_uid_invalid_value'] = 'Você especificou um valor inválido para auto_uid_number_mechanism ("%s") na sua configuração. Somente "uidpool" e "busca" são válidos. Por favor corrija este problema.';//"You specified an invalid value for auto_uid_number_mechanism (%s) in your configration. Only uidpool and search are valid. Please correct this problem.'; + +$lang['error_auth_type_config'] = 'Erro: Você tem um erro no seu arquivo de configuração. Os dois únicos valores permitidos para auth_type na seção $servers são \'config\' e \'form\'. Você entrou \'%s\', que não é permitido.';//"Error: You have an error in your config file. The only two allowed values for 'auth_type' in the $servers section are 'config' and 'form'. You entered '%s', which is not allowed. '; + +$lang['php_install_not_supports_tls'] = 'Sua instalação do PHP não suporta TLS';//"Your PHP install does not support TLS'; +$lang['could_not_start_tls'] = 'Impossível iniciar TLS. Por favor verifique a configuração do servidor LDAP.';//"Could not start TLS.
Please check your LDAP server configuration.'; +$lang['could_not_bind_anon'] = 'Não foi possível conectar ao servidor anonimamente.';//'Could not bind anonymously to server.'; +$lang['could_not_bind'] = 'Não foi possível conectar ao servidor LDAP.';//'Could not bind to the LDAP server.'; +$lang['anonymous_bind'] = 'Conexão anônima';//'Anonymous Bind'; +$lang['bad_user_name_or_password'] = 'Usuário ou senha inválido. Por favor tente novamente.';//'Bad username or password. Please try again.'; +$lang['redirecting_click_if_nothing_happens'] = 'Redirecionando... Clique aqui se nada acontecer.';//'Redirecting... Click here if nothing happens.'; +$lang['successfully_logged_in_to_server'] = 'Conexão estabelecida com sucesso no sevidor %s';//'Successfully logged into server %s'; +$lang['could_not_set_cookie'] = 'Não foi possível criar o cookie.';//'Could not set cookie.'; +$lang['ldap_said'] = 'O servidor LDAP respondeu: %s';//"LDAP said: %s

'; +$lang['ferror_error'] = 'Erro';//"Error'; +$lang['fbrowse'] = 'procurar';//"browse'; +$lang['delete_photo'] = 'Excluir imagem';//"Delete Photo'; +$lang['install_not_support_blowfish'] = 'Sua instalação do PHP não suporta codificação blowfish.';//"Your PHP install does not support blowfish encryption.'; +$lang['install_not_support_md5crypt'] = 'Sua instalação do PHP não suporta codificação md5crypt.';//'Your PHP install does not support md5crypt encryption.'; +$lang['install_no_mash'] = 'Sua instalação do PHP não tem a função mhash(). Impossível fazer transformações SHA.';// "Your PHP install does not have the mhash() function. Cannot do SHA hashes.'; +$lang['jpeg_contains_errors'] = 'Foto jpeg contém erros
';//"jpegPhoto contains errors
'; +$lang['ferror_number'] = 'Erro número: %s (%s)';//"Error number: %s (%s)

'; +$lang['ferror_discription'] ='Descrição: %s

';// "Description: %s

'; +$lang['ferror_number_short'] = 'Erro número: %s

';//"Error number: %s

'; +$lang['ferror_discription_short'] = 'Descrição: (descrição não disponível
';//"Description: (no description available)
'; +$lang['ferror_submit_bug'] = 'Isto é um bug do phpLDAPadmin? Se for, por favor informe.';//"Is this a phpLDAPadmin bug? If so, please report it.'; +$lang['ferror_unrecognized_num'] = 'Número do erro desconhecido: ';//"Unrecognized error number: '; + +$lang['ferror_nonfatil_bug'] = '
Você encontrou um bug não-fatal no phpLDAPadmin!
Erro:%s (%s)
Arquivo:%s linha %s, solicitante %s
Versão:PLA: %s, PHP: %s, SAPI: %s
Servidor Web:%s
Por favor informe este bug clicando aqui.

';//"
You found a non-fatal phpLDAPadmin bug!
Error:%s (%s)
File:%s line %s, caller %s
Versions:PLA: %s, PHP: %s, SAPI: %s
Web server:%s
Please report this bug by clicking here.

'; + +$lang['ferror_congrats_found_bug'] = 'Parabéns! Você encontrou um bug no phpLDAPadmin.

Erro:%s
Nível:%s
Arquivo:%s
Linha:%s
Caller:%s
PLA Vers&atile;o:%s
PHP Vers&atile;o:%s
PHP SAPI:%s
Servidor Web:%s

Por favor informe o bug clicando abaixo!';//"Congratulations! You found a bug in phpLDAPadmin.

Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA Version:%s
PHP Version:%s
PHP SAPI:%s
Web server:%s

Please report this bug by clicking below!'; + +//ldif_import_form +$lang['import_ldif_file_title'] = 'Importar arquivo LDIF';//'Import LDIF File'; +$lang['select_ldif_file'] = 'Selecionar um arquivo LDIF';//'Select an LDIF file:'; +$lang['select_ldif_file_proceed'] = 'Continuar >>';//'Proceed >>'; +$lang['dont_stop_on_errors'] = 'Não parar quando der erro';//'Don\'t stop on errors'; + +//ldif_import +$lang['add_action'] = 'Inserindo...';//'Adding...'; +$lang['delete_action'] = 'Deletando...';//'Deleting...'; +$lang['rename_action'] = 'Renomeando...';//'Renaming...'; +$lang['modify_action'] = 'Alterando...';//'Modifying...'; +$lang['warning_no_ldif_version_found'] = 'Nenhuma versão encontrada. Assumindo 1.';//'No version found. Assuming 1.'; +$lang['valid_dn_line_required'] = 'Uma linha dn válida é obrigatória.';//'A valid dn line is required.'; +$lang['missing_uploaded_file'] = 'Arquivo carregado perdido.';//'Missing uploaded file.'; +$lang['no_ldif_file_specified.'] = 'Nenhum arquivo LDIF especificado. Por favor tente novamente.';//'No LDIF file specified. Please try again.'; +$lang['ldif_file_empty'] = 'Arquivo LDIF carregado está vazio.';// 'Uploaded LDIF file is empty.'; +$lang['empty'] = 'vazio';//'empty'; +$lang['file'] = 'Arquivo';//'File'; +$lang['number_bytes'] = '%s bytes';//'%s bytes'; + +$lang['failed'] = 'Falhou';//'failed'; +$lang['ldif_parse_error'] = 'Erro Analisando Arquivo LDIF';//'LDIF Parse Error'; +$lang['ldif_could_not_add_object'] = 'Não foi possível inserir objeto:';//'Could not add object:'; +$lang['ldif_could_not_rename_object'] = 'Não foi possível renomear objeto:';//'Could not rename object:'; +$lang['ldif_could_not_delete_object'] = 'Não foi possível excluir objeto:';//'Could not delete object:'; +$lang['ldif_could_not_modify_object'] = 'Não foi possível alterar objeto:';//'Could not modify object:'; +$lang['ldif_line_number'] = 'Linha Número:';//'Line Number:'; +$lang['ldif_line'] = 'Linha:';//'Line:'; + +//delete_form +$lang['sure_permanent_delete_object']='Você tem certeza que deseja excluir este objeto permanentemente?';//'Are you sure you want to permanently delete this object?'; +$lang['permanently_delete_children']='Exluir permanentemente todos os objetos filho também?';//'Permanently delete all children also?'; + +$lang['list_of_entries_to_be_deleted'] = 'Lista de objetos a serem deletados: ';//'List of entries to be deleted:'; +$lang['dn'] = 'DN'; //'DN'; + +// Exports +$lang['export_format'] = 'Formato para exportar';// 'Export format'; +$lang['line_ends'] = 'Fins de linha'; //'Line ends'; +$lang['must_choose_export_format'] = 'Você deve especificar um formato para exportar';//'You must choose an export format.'; +$lang['invalid_export_format'] = 'Formato para exportação inválido';//'Invalid export format'; +$lang['no_exporter_found'] = 'Nenhum exportador de arquivos encontrado.';//'No available exporter found.'; +$lang['error_performing_search'] = 'Erro encontrado enquanto fazia a pesquisa.';//'Encountered an error while performing search.'; +$lang['showing_results_x_through_y'] = 'Mostrando resultados %s através %s.';//'Showing results %s through %s.'; +$lang['searching'] = 'Pesquisando...';//'Searching...'; +$lang['size_limit_exceeded'] = 'Aviso, limite da pesquisa excedido.';//'Notice, search size limit exceeded.'; +$lang['entry'] = 'Objeto';//'Entry'; +$lang['ldif_export_for_dn'] = 'Exportação LDIF para: %s'; //'LDIF Export for: %s'; +$lang['generated_on_date'] = 'Gerado pelo phpLDAPadmin no %s';//'Generated by phpLDAPadmin on %s'; +$lang['total_entries'] = 'Total de objetos';//'Total Entries'; +$lang['dsml_export_for_dn'] = 'Exportação DSLM para: %s';//'DSLM Export for: %s'; + +// logins +$lang['could_not_find_user'] = 'Não foi possível encontrar o usuário "%s"';//'Could not find a user "%s"'; +$lang['password_blank'] = 'Você deixou a senha vazia.';//'You left the password blank.'; +$lang['login_cancelled'] = 'Login cancelado.';//'Login cancelled.'; +$lang['no_one_logged_in'] = 'Ninguém está conectado neste servidor.';//'No one is logged in to that server.'; +$lang['could_not_logout'] = 'Não foi possível desconectar.';//'Could not logout.'; +$lang['unknown_auth_type'] = 'auth_type desconhecido: %s';//'Unknown auth_type: %s'; +$lang['logged_out_successfully'] = 'Desconectado com sucesso do servidor %s';//'Logged out successfully from server %s'; +$lang['authenticate_to_server'] = 'Autenticar no servidor %s';//'Authenticate to server %s'; +$lang['warning_this_web_connection_is_unencrypted'] = 'Aviso: Esta conexão NÃO é criptografada.';//'Warning: This web connection is unencrypted.'; +$lang['not_using_https'] = 'Você não está usando \'https\'. O navegador internet vai transmitir as informações de login sem criptografar.';// 'You are not use \'https\'. Web browser will transmit login information in clear text.'; +$lang['login_dn'] = 'Login DN';//'Login DN'; +$lang['user_name'] = 'Nome de usuário';//'User name'; +$lang['password'] = 'Senha';//'Password'; +$lang['authenticate'] = 'Autenticar';//'Authenticate'; + +// Entry browser +$lang['entry_chooser_title'] = 'Selecionador de objeto';//'Entry Chooser'; + +// Index page +$lang['need_to_configure'] = 'Você deve configurar o phpLDAPadmin. Faça isso editando o arquivo \'config.php\'. Um arquivo de exemplo é fornecido em \'config.php.example\'';// ';//'You need to configure phpLDAPadmin. Edit the file \'config.php\' to do so. An example config file is provided in \'config.php.example\''; + +// Mass deletes +$lang['no_deletes_in_read_only'] = 'Exclusões não permitidas no modo somente leitura.';//'Deletes not allowed in read only mode.'; +$lang['error_calling_mass_delete'] = 'Erro chamando mass_delete.php. Faltando mass_delete nas variáveis POST.';//'Error calling mass_delete.php. Missing mass_delete in POST vars.'; +$lang['mass_delete_not_array'] = 'a variável POST mass_delete não é um conjunto';//'mass_delete POST var is not an array.'; +$lang['mass_delete_not_enabled'] = 'Exclusão em massa não habilitada. Por favor habilite-a no arquivo config.php antes de continuar';//'Mass deletion is not enabled. Please enable it in config.php before proceeding.'; +$lang['mass_deleting'] = 'Exclusão em massa';//'Mass Deleting'; +$lang['mass_delete_progress'] = 'Progresso da exclusão no servidor "%s"';//'Deletion progress on server "%s"'; +$lang['malformed_mass_delete_array'] = 'Conjunto mass_delete danificado.';//'Malformed mass_delete array.'; +$lang['no_entries_to_delete'] = 'Você não selecionou nenhum objeto para excluir';//'You did not select any entries to delete.'; +$lang['deleting_dn'] = 'Excluindo %s';//'Deleting %s'; +$lang['total_entries_failed'] = '%s de %s objetos falharam na exclusão.';//'%s of %s entries failed to be deleted.'; +$lang['all_entries_successful'] = 'Todos objetos foram excluídos com sucesso.';//'All entries deleted successfully.'; +$lang['confirm_mass_delete'] = 'Confirme exclusão em massa de %s objetos no servidor %s';//'Confirm mass delete of %s entries on server %s'; +$lang['yes_delete'] = 'Sim, excluir!';//'Yes, delete!'; + + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'Você não pode renomear um objeto que tem objetos filhos (isto é, a operação de renomear não é permitida em objetos não-folha)';// 'You cannot rename an entry which has children entries (eg, the rename operation is not allowed on non-leaf entries)'; +$lang['no_rdn_change'] = 'Você não alterou o RDN';//'You did not change the RDN'; +$lang['invalid_rdn'] = 'Valor RDN inválido';//'Invalid RDN value'; +$lang['could_not_rename'] = 'Não foi possível renomear o objeto';//'Could not rename the entry'; + + +?> diff --git a/lang/recoded/auto.php b/lang/recoded/auto.php index 8acdb9d..fdf60ca 100644 --- a/lang/recoded/auto.php +++ b/lang/recoded/auto.php @@ -1,25 +1,35 @@ "ct" // catalan is this right? shouldn't it be ca? - ," ct-"=>"ct" // +$langSupport=array(" ca "=>"ca" // catalan + ," ca-"=>"ca" // ," de "=>"de" // german ," de-"=>"de" // for de-at, de-ch... ," German "=>"de" // the browser Moz (1.5)submit German instead of de ," en "=>"en" // englisch ," en-"=>"en" // for en-us,en-gb,en-ca,.. + ," es "=>"es" // spainish + ," es-"=>"es" // es-cr, es-co,.... ," fr "=>"fr" // french ," fr-"=>"fr" // fr-lu,fr-ca,... ," it "=>"it" // italien ," it-"=>"it" // for it-ch (italien swiss).. + ," ja "=>"ja" // japanese ," nl "=>"nl" // dutch - ," nl-"=>"nl" // for ne-be, only one? + ," nl-"=>"nl" // for ne-be, only one? + ," pl "=>"pl" // polish + ," pl-"=>"pl" // maybe exist + ," pt "=>"pt-br" // brazilian portuguese + ," pt-br"=>"pt-br" // brazilian portuguese ," ru "=>"ru" // russian ," ru-"=>"ru" // ru- exits? + ," sv "=>"sv" //swedish + ," sv-"=>"sv" // swedisch to );// all supported languages in this array // test @@ -37,4 +47,6 @@ foreach ($langSupport as $key=>$value) { } //echo "used:$useLang\n"; include realpath ("$useLang".".php");// this should include from recode/ position +$language=$useLang; +//echo "language:".$langugage; ?> diff --git a/lang/recoded/ca.php b/lang/recoded/ca.php index 881faa7..0eb41a5 100644 --- a/lang/recoded/ca.php +++ b/lang/recoded/ca.php @@ -1,7 +1,9 @@ + + * --- INSTRUCTIONS FOR TRANSLATORS --- + * + * If you want to write a new language file for your language, + * please submit the file on SourceForge: + * + * https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498548 + * + * Use the option "Check to Upload and Attach a File" at the bottom + * + * Thank you! + * + */ + +// Search form +$lang['simple_search_form_str'] = 'Rychlé vyhledávání'; +$lang['advanced_search_form_str'] = 'Rozšířené vyhledávání'; +$lang['server'] = 'Server'; +$lang['search_for_entries_whose'] = 'Vyhledat objekty kde'; +$lang['base_dn'] = 'Výchozí DN'; +$lang['search_scope'] = 'Oblast prohledávání'; +$lang['show_attributes'] = 'Zobrazovat atributy'; +$lang['Search'] = 'Vyhledat'; +$lang['predefined_search_str'] = 'Zvolte pÅ™eddefinované vyhledávání'; +$lang['predefined_searches'] = 'PÅ™eddefinovaná vyhledávání'; +$lang['no_predefined_queries'] = 'V config.php nejsou definovány žádné dotazy.'; + +// Tree browser +$lang['request_new_feature'] = 'NapiÅ¡te si o novou funkci'; +$lang['report_bug'] = 'Nahlásit chybu'; +$lang['schema'] = 'schéma'; +$lang['search'] = 'vyhledat'; +$lang['create'] = 'vytvoÅ™it'; +$lang['info'] = 'info'; +$lang['import'] = 'import'; +$lang['refresh'] = 'obnovit'; +$lang['logout'] = 'odhlásit se'; +$lang['create_new'] = 'VytvoÅ™it nový'; +$lang['view_schema_for'] = 'Zobrazit schéma pro'; +$lang['refresh_expanded_containers'] = 'Obnovit vÅ¡echny otevÅ™ené složky'; +$lang['create_new_entry_on'] = 'VytvoÅ™it nový objekt v'; +$lang['new'] = 'nový'; +$lang['view_server_info'] = 'Zobrazit serverem poskytované informace'; +$lang['import_from_ldif'] = 'Importovat data ze souboru LDIF'; +$lang['logout_of_this_server'] = 'Odhlásit se od tohoto serveru'; +$lang['logged_in_as'] = 'PÅ™ihlášen jako: '; +$lang['read_only'] = 'jen pro Ätení'; +$lang['read_only_tooltip'] = 'Tento atribut byl administrátorem phpLDAPadminu oznaÄen jako "jen pro Ätení".'; +$lang['could_not_determine_root'] = 'NepodaÅ™ilo se zjistit koÅ™en VaÅ¡eho LDAP stromu.'; +$lang['ldap_refuses_to_give_root'] = 'Zdá se, že LDAP server je nastavený tak, že nezobrazuje svůj koÅ™en.'; +$lang['please_specify_in_config'] = 'Nastavte ho prosím v souboru config.php'; +$lang['create_new_entry_in'] = 'VytvoÅ™it nový objekt v'; +$lang['login_link'] = 'PÅ™ihlásit se...'; +$lang['login'] = 'pÅ™ihlásit'; + +// Entry display +$lang['delete_this_entry'] = 'Smazat tento objekt'; +$lang['delete_this_entry_tooltip'] = 'Budete požádáni o potvrzení tohoto rozhodnutí'; +$lang['copy_this_entry'] = 'Kopírovat tento objekt'; +$lang['copy_this_entry_tooltip'] = 'Okopíruje tento objekt do jiného umístÄ›ní, nového DN, nebo na jiný server'; +$lang['export'] = 'Export'; +$lang['export_tooltip'] = 'Uložit pÅ™epis objektu'; +$lang['export_subtree_tooltip'] = 'Uloží pÅ™epis tohoto objektu a vÅ¡ech jeho potomků'; +$lang['export_subtree'] = 'Exportovat podstrom'; +$lang['create_a_child_entry'] = 'VytvoÅ™it nového potomka'; +$lang['rename_entry'] = 'PÅ™ejmenovat objekt'; +$lang['rename'] = 'PÅ™ejmenovat'; +$lang['add'] = 'PÅ™idat'; +$lang['view'] = 'Zobrazit'; +$lang['view_one_child'] = 'Zobrazit potomka'; +$lang['view_children'] = 'Zobrazit potomky (%s)'; +$lang['add_new_attribute'] = 'PÅ™idat nový atribut'; +$lang['add_new_objectclass'] = 'PÅ™idat objectClass'; +$lang['hide_internal_attrs'] = 'Schovat interní atributy'; +$lang['show_internal_attrs'] = 'Zobrazit interní atributy'; +$lang['attr_name_tooltip'] = 'Klepnutím zobrazíte definiÄní schéma pro atribut typu \'%s\''; +$lang['none'] = 'žádný'; +$lang['no_internal_attributes'] = 'Žádné interní atributy'; +$lang['no_attributes'] = 'Tento objekt nemá atributy'; +$lang['save_changes'] = 'Uložit zmÄ›ny'; +$lang['add_value'] = 'pÅ™idat hodnotu'; +$lang['add_value_tooltip'] = 'PÅ™idá další hodnotu k atributu \'%s\''; +$lang['refresh_entry'] = 'Obnovit'; +$lang['refresh_this_entry'] = 'Obnovit tento objekt'; +$lang['delete_hint'] = 'Rada: Pro smazání atributu vyprázdÄ›te textové políÄko a klepnÄ›te na Uložit.'; +$lang['attr_schema_hint'] = 'Rada: K zobrazení schémata pro atribut klepnÄ›te na název atributu.'; +$lang['attrs_modified'] = 'NÄ›které atributy (%s) byly modifikováný a jsou zvýraznÄ›ny dole.'; +$lang['attr_modified'] = 'Atribut (%s) byl zmÄ›nÄ›n a je zvýraznÄ›n dole.'; +$lang['viewing_read_only'] = 'Prohlížení objekt v módu "pouze pro Ätení".'; +$lang['no_new_attrs_available'] = 'nejsou dostupné žádné nové atributy pro tento objekt'; +$lang['no_new_binary_attrs_available'] = 'nejsou dostupné žádné nové binární atributy pro tento objekt'; +$lang['binary_value'] = 'Binarní hodnota'; +$lang['add_new_binary_attr'] = 'PÅ™idat nový binarní atribut'; +$lang['alias_for'] = 'Poznámka: \'%s\' je aliasem pro \'%s\''; +$lang['download_value'] = 'stáhnout data'; +$lang['delete_attribute'] = 'smazat atribut'; +$lang['true'] = 'true'; +$lang['false'] = 'false'; +$lang['none_remove_value'] = 'žádný, odebrat hodnotu'; +$lang['really_delete_attribute'] = 'SkuteÄnÄ› smazat atribut'; +$lang['add_new_value'] = 'PÅ™idat novou hodnotu'; + +// Schema browser +$lang['the_following_objectclasses'] = 'Následující objectClass jsou podporovány tímto LDAP serverem.'; +$lang['the_following_attributes'] = 'Následující attributeType jsou podporovány tímto LDAP serverem.'; +$lang['the_following_matching'] = 'Následující kritéria výbÄ›ru jsou podporovány tímto LDAP serverem.'; +$lang['the_following_syntaxes'] = 'Následující syntaxe jsou podporovány tímto LDAP serverem.'; +$lang['schema_retrieve_error_1']='Server plnÄ› nepodporuje LDAP protocol.'; +$lang['schema_retrieve_error_2']='VaÅ¡e verze PHP korektnÄ› neprovede tento dotaz.'; +$lang['schema_retrieve_error_3']='Nebo možná phpLDAPadmin neví jak získat schéma pro Váš server.'; +$lang['jump_to_objectclass'] = 'Jdi na objectClass'; +$lang['jump_to_attr'] = 'Jdi na typ atributu'; +$lang['jump_to_matching_rule'] = 'Jdi na Matching Rule'; +$lang['schema_for_server'] = 'Schéma serveru'; +$lang['required_attrs'] = 'Vyžadované atributy'; +$lang['optional_attrs'] = 'Volitelné atributy'; +$lang['optional_binary_attrs'] = 'Volitelné binární atributy'; +$lang['OID'] = 'OID'; +$lang['aliases']='Aliasy'; +$lang['desc'] = 'Popis'; +$lang['no_description']='žádný popis'; +$lang['name'] = 'Název'; +$lang['equality']='Equality'; +$lang['is_obsolete'] = 'Tato objectClass je zastaralá'; +$lang['inherits'] = 'Odvozeno od objectClass'; +$lang['inherited_from'] = 'Odvozeno od objectClass'; +$lang['parent_to'] = 'RodiÄovská objectClass'; +$lang['jump_to_this_oclass'] = 'Jdi na definici této objectClass'; +$lang['matching_rule_oid'] = 'VýbÄ›rové kritérium OID'; +$lang['syntax_oid'] = 'Syntaxe OID'; +$lang['not_applicable'] = 'nepoužitelný'; +$lang['not_specified'] = 'nespecifikovaný'; +$lang['character']='znak'; +$lang['characters']='znaků'; +$lang['used_by_objectclasses']='Používáno tÄ›mito objectClass'; +$lang['used_by_attributes']='Používají atributy'; +$lang['maximum_length']='Maximální délka'; +$lang['attributes']='Typy atributů'; +$lang['syntaxes']='Syntaxe'; +$lang['matchingrules']='Matching Rules'; +$lang['oid']='OID'; +$lang['obsolete']='Zastaralé'; +$lang['ordering']='Řazení'; +$lang['substring_rule']='Substring Rule'; +$lang['single_valued']='Single Valued'; +$lang['collective']='Collective'; +$lang['user_modification']='User Modification'; +$lang['usage']='Použití'; +$lang['could_not_retrieve_schema_from']='Nelze získat schéma z'; +$lang['type']='Typ'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'Objekt \'%s\' byl úspěšnÄ› odstranÄ›n.'; +$lang['you_must_specify_a_dn'] = 'Musíte zadat DN'; +$lang['could_not_delete_entry'] = 'Nebylo možné odstranit objekt: %s'; +$lang['no_such_entry'] = 'Objekt neexistuje: %s'; +$lang['delete_dn'] = 'Smazat %s'; +$lang['permanently_delete_children'] = 'Odstranit také vÅ¡echny potomky?'; +$lang['entry_is_root_sub_tree'] = 'Tento objekt je koÅ™enem podstromu, který obsahuje %s objektů.'; +$lang['view_entries'] = 'zobrazit objekty'; +$lang['confirm_recursive_delete'] = 'phpLDAPadmin rekurzivnÄ› odstraní tento objekt a vÅ¡ech jeho %s potomků. PozornÄ› si prohlédnÄ›te seznam objektů, které tato operace odstraní. PÅ™ejete si pokraÄovat?'; +$lang['confirm_recursive_delete_note'] = 'Poznámka: tato operace může mít fatální následky a nelze ji vrátit zpÄ›t. Speciální pozornost vÄ›nujte aliasům, odkazům a ostatním vÄ›cem, které můžou způsobit problémy.'; +$lang['delete_all_x_objects'] = 'Smazat vÅ¡ech %s objektů'; +$lang['recursive_delete_progress'] = 'PrůbÄ›h rekurzivního odstranÄ›ní'; +$lang['entry_and_sub_tree_deleted_successfully'] = 'Objekt %s a jeho podstrom byly úspěšnÄ› odstranÄ›ny.'; +$lang['failed_to_delete_entry'] = 'NepodaÅ™ilo se odstranit objekt %s'; +$lang['list_of_entries_to_be_deleted'] = 'Seznam objektů k odstranÄ›ní:'; +$lang['sure_permanent_delete_object']='Jste si skuteÄnÄ› jisti, že chcete odstranit tento objekt?'; +$lang['dn'] = 'DN'; + +// Deleting attributes +$lang['attr_is_read_only'] = 'Atribut "%s" je v konfiguraci phpLDAPadminu oznaÄen jako "jen pro Ätení".'; +$lang['no_attr_specified'] = 'Nebylo zadáno jméno atributu.'; +$lang['no_dn_specified'] = 'Nebylo zadáno DN'; + +// Adding attributes +$lang['left_attr_blank'] = 'Nevyplnili jste hodnotu atributu. VraÅ¥te se zpÄ›t a akci opakujte.'; +$lang['failed_to_add_attr'] = 'PÅ™idání atributu selhalo.'; +$lang['file_empty'] = 'Soubor, který jste zvolili je buÄ prázdný nebo neexistuje. VraÅ¥te se prosím zpÄ›t a akci opakujte.'; +$lang['invalid_file'] = 'BezpeÄnostní chyba: Soubor, který uploadujete může být závadný.'; +$lang['warning_file_uploads_disabled'] = 'V konfiguraci PHP jsou zakázány uploady souborů. Pro pokraÄování upravte prosím php.ini.'; +$lang['uploaded_file_too_big'] = 'Soubor, který se pokouÅ¡eli uložit je příliÅ¡ veliký. Upravte prosím hodnotu upload_max_size v php.ini.'; +$lang['uploaded_file_partial'] = 'PÅ™i uploadu souboru doÅ¡lo zÅ™ejmÄ› k selhání sítÄ›, neboÅ¥ se podaÅ™ilo získat jen Äást souboru.'; +$lang['max_file_size'] = 'Maximální velikost souboru: %s'; + +// Updating values +$lang['modification_successful'] = 'Úprava probÄ›hla úspěšnÄ›!'; +$lang['change_password_new_login'] = 'Kvůli zmÄ›nÄ› svého hesla se nyní musíte pÅ™ihlásit znova - s novým heslem.'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'Nový vyžadovaný atribut'; +$lang['requires_to_add'] = 'K provedení této akce musíte pÅ™idat'; +$lang['new_attributes'] = 'nové atributy'; +$lang['new_required_attrs_instructions'] = 'Návod: K pÅ™iÅ™azení této objectClass k vybranému objektu musíte zadat'; +$lang['that_this_oclass_requires'] = 'atributy, které jsou touto objectClass vyžadovány. Můžete tak uÄinit v tomto formuláři.'; +$lang['add_oclass_and_attrs'] = 'PÅ™idat objectClass a atributy'; +$lang['objectclasses'] = 'objectClassy'; + +// General +$lang['chooser_link_tooltip'] = 'OtevÅ™e popup okno, ve kterém zvolíte DN'; +$lang['no_updates_in_read_only_mode'] = 'Nelze provádÄ›t úpravy dokud je server v módu "pouze pro Ätení"'; +$lang['bad_server_id'] = 'Å patné ID serveru'; +$lang['not_enough_login_info'] = 'Nedostatek informací pro pÅ™ihlášení k serveru. Ověřte prosím nastavení.'; +$lang['could_not_connect'] = 'Nelze se pÅ™ipojit k LDAP serveru.'; +$lang['could_not_connect_to_host_on_port'] = 'Nelze se pÅ™ipojit k "%s" na portu "%s"'; +$lang['could_not_perform_ldap_mod_add'] = 'Nelze provést ldap_mod_add operaci.'; +$lang['bad_server_id_underline'] = 'server_id: '; +$lang['success'] = 'Hotovo'; +$lang['server_colon_pare'] = 'Server: '; +$lang['look_in'] = 'Prohlížení: '; +$lang['missing_server_id_in_query_string'] = 'V požadavku nebylo uvedeno žádné ID serveru!'; +$lang['missing_dn_in_query_string'] = 'V požadavku nebyl uveden žádný DN!'; +$lang['back_up_p'] = 'O úroveň výš...'; +$lang['no_entries'] = 'žádné objekty'; +$lang['not_logged_in'] = 'NepÅ™ihlášen'; +$lang['could_not_det_base_dn'] = 'Nelze zjistit výchozí DN'; +$lang['please_report_this_as_a_bug']='NahlaÅ¡te toto prosím jako chybu.'; +$lang['reasons_for_error']='Toto se může pÅ™ihodit z nÄ›kolika příÄin. NejpravdÄ›podobnÄ›jší jsou:'; +$lang['yes']='Ano'; +$lang['no']='Ne'; +$lang['go']='Jdi'; +$lang['delete']='Odstranit'; +$lang['back']='ZpÄ›t'; +$lang['object']='objekt'; +$lang['delete_all']='Odstranit vÅ¡e'; +$lang['url_bug_report']='https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; +$lang['hint'] = 'rada'; +$lang['bug'] = 'chyba'; +$lang['warning'] = 'upozornÄ›ní'; +$lang['light'] = 'light'; // the word 'light' from 'light bulb' +$lang['proceed_gt'] = 'ProveÄ >>'; + +// Add value form +$lang['add_new'] = 'PÅ™idat nový'; +$lang['value_to'] = 'hodnota pro'; +$lang['distinguished_name'] = 'Distinguished Name'; +$lang['current_list_of'] = 'SouÄasný výpis'; +$lang['values_for_attribute'] = 'hodnoty pro atribut'; +$lang['inappropriate_matching_note'] = 'Poznámka: Pokud nenastavíte na tomto LDAP serveru pravidlo
EQUALITY pro tento atribut, dojde k chybÄ› pÅ™i výbÄ›ru objektů.'; +$lang['enter_value_to_add'] = 'Zadejte hodnotu, kterou chcete pÅ™idat:'; +$lang['new_required_attrs_note'] = 'Poznámka: Není vylouÄené, že budete vyzváni k zadání nových atributů vyžadovaných touto objectClass'; +$lang['syntax'] = 'Syntaxe'; + +//copy.php +$lang['copy_server_read_only'] = 'Nemůžete provádÄ›t zmÄ›ny dokud je server v módu "jen pro Ätení"'; +$lang['copy_dest_dn_blank'] = 'Ponechali jste kolonku cílové DN prázdnou.'; +$lang['copy_dest_already_exists'] = 'Objekt (%s) již v cílovém DN existuje.'; +$lang['copy_dest_container_does_not_exist'] = 'Cílová složka (%s) neexistuje.'; +$lang['copy_source_dest_dn_same'] = 'Zdrojové a cílové DN se shodují.'; +$lang['copy_copying'] = 'Kopíruji '; +$lang['copy_recursive_copy_progress'] = 'PrůbÄ›h rekurzivního kopírování'; +$lang['copy_building_snapshot'] = 'Sestavuji obraz stromu ke kopírování... '; +$lang['copy_successful_like_to'] = 'Kopie úspěšnÄ› dokonÄena! PÅ™ejete si '; +$lang['copy_view_new_entry'] = 'zobrazit nový objekt'; +$lang['copy_failed'] = 'NepodaÅ™ilo se okopírovat DN: '; + +//edit.php +$lang['missing_template_file'] = 'UpozornÄ›ní: chybí Å¡ablona, '; +$lang['using_default'] = 'Používám výchozí.'; +$lang['template'] = 'Å ablona'; +$lang['must_choose_template'] = 'Musíte zvolit Å¡ablonu'; +$lang['invalid_template'] = '%s je neplatná Å¡ablona'; +$lang['using_template'] = 'použítím Å¡ablony'; +$lang['go_to_dn'] = 'Jdi na %s'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Kopírovat '; +$lang['copyf_to_new_object'] = 'jako nový objekt'; +$lang['copyf_dest_dn'] = 'Cílové DN'; +$lang['copyf_dest_dn_tooltip'] = 'Celé DN nového objektu bude vytvoÅ™eno kopií zdrojového objektu'; +$lang['copyf_dest_server'] = 'Cílový server'; +$lang['copyf_note'] = 'Rada: Kopírování mezi servery funguje jedinÄ› za pÅ™edpokladu, že nedojde k neshodÄ› schémat'; +$lang['copyf_recursive_copy'] = 'PÅ™i kopírování zahrnout vÅ¡echny potomky tohoto objektu.'; +$lang['recursive_copy'] = 'Rekurzivní kopie'; +$lang['filter'] = 'Filtr'; +$lang['filter_tooltip'] = 'PÅ™i rekurzivní kopii pracovat pouze s objekty, které splňují zvolený filtr'; + +//create.php +$lang['create_required_attribute'] = 'Nevyplnili jste pole pro vyžadovaný atribut %s.'; +$lang['redirecting'] = 'PÅ™esmÄ›rovávám'; +$lang['here'] = 'zde'; +$lang['create_could_not_add'] = 'Nelze objekt do LDAP serveru pÅ™idat.'; + +//create_form.php +$lang['createf_create_object'] = 'VytvoÅ™it objekt'; +$lang['createf_choose_temp'] = 'Vyberte Å¡ablonu'; +$lang['createf_select_temp'] = 'Zvolte Å¡ablonu pro vytvoÅ™ení objektu'; +$lang['createf_proceed'] = 'Provést'; +$lang['rdn_field_blank'] = 'Ponechali jste pole RDN nevyplnÄ›né.'; +$lang['container_does_not_exist'] = 'Složka (%s) neexistuje. Opakujte prosím akci.'; +$lang['no_objectclasses_selected'] = 'NepÅ™iÅ™adili jste žádné objectClass k tomuto objektu. VraÅ¥te se prosím zpÄ›t a akci opakujte.'; +$lang['hint_structural_oclass'] = 'NápovÄ›da: Musíte zvolit alespoň jednu structural objectClass.'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'Na serveru'; +$lang['ctemplate_no_template'] = 'V POST požadavku nebyla zaslána žádná Å¡ablona.'; +$lang['ctemplate_config_handler'] = 'VaÅ¡e nastavení uvádí obsluhovaÄ '; +$lang['ctemplate_handler_does_not_exist'] = 'pro tuto Å¡ablonu. Ale tento obsluhovaÄ nelze v adresáři templates/creation nalézt.'; +$lang['create_step1'] = 'Krok 1 ze 2: Jméno a objectClass(y)'; +$lang['create_step2'] = 'Krok 2 ze 2: Atributy a hodnoty'; +$lang['relative_distinguished_name'] = 'Relativní Distinguished Name'; +$lang['rdn'] = 'RDN'; +$lang['rdn_example'] = '(příklad: cn=MujNovyUzivatel)'; +$lang['container'] = 'Složka'; +$lang['alias_for'] = 'Alias k %s'; + +// search.php +$lang['you_have_not_logged_into_server'] = 'Nelze provádÄ›t vyhledávání na serveru bez pÅ™edchozího pÅ™ihlášení.'; +$lang['click_to_go_to_login_form'] = 'Klepnutím budete pÅ™esmÄ›rováni na formulář k pÅ™ihlášení'; +$lang['unrecognized_criteria_option'] = 'Neznámá vyhledávací kritéria: '; +$lang['if_you_want_to_add_criteria'] = 'Pokud si pÅ™ejete pÅ™idat svoje vlastní vyhledávací kritéria, ujistÄ›te se, že jste je pÅ™idali do search.php.'; +$lang['entries_found'] = 'Nalezené objekty: '; +$lang['filter_performed'] = 'UplatnÄ›ný filtr: '; +$lang['search_duration'] = 'Vyhledávání dokonÄeno za'; +$lang['seconds'] = 'sekund'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'Oblast vyhledávání'; +$lang['scope_sub'] = 'Celý podstrom'; +$lang['scope_one'] = 'O jednu úroveň níž'; +$lang['scope_base'] = 'Pouze výchozí DN'; +$lang['standard_ldap_search_filter'] = 'Standardní LDAP vyhledávací filtr. PÅ™iklad: (&(sn=Smith)(givenname=David))'; +$lang['search_filter'] = 'Vyhledávací filtr'; +$lang['list_of_attrs_to_display_in_results'] = 'Seznam atributů zobrazených ve výsledku hledání (oddÄ›lené Äárkou)'; +$lang['show_attributes'] = 'Zobrazit atributy'; + +// search_form_simple.php +$lang['search_for_entries_whose'] = 'Vyhledat objekty kde'; +$lang['equals'] = 'je'; +$lang['starts with'] = 'zaÄíná na'; +$lang['contains'] = 'obsahuje'; +$lang['ends with'] = 'konÄí na'; +$lang['sounds like'] = 'zní jako'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'Nelze získat informace ze serveru LDAP'; +$lang['server_info_for'] = 'Server info pro: '; +$lang['server_reports_following'] = 'Server o sobÄ› poskytuje následující informace'; +$lang['nothing_to_report'] = 'Server neposkytuje žádné informace.'; + +//update.php +$lang['update_array_malformed'] = 'update_array je poÅ¡kozené. Může se jednat o chybu v phpLDAPadmin. Prosíme Vás, abyste chybu nahlásili.'; +$lang['could_not_perform_ldap_modify'] = 'Nelze provést operaci ldap_modify.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'PÅ™ejete si provést tyto zmÄ›ny?'; +$lang['attribute'] = 'Atribut'; +$lang['old_value'] = 'Původní hodnota'; +$lang['new_value'] = 'Nová hodnota'; +$lang['attr_deleted'] = '[atribut odstranÄ›n]'; +$lang['commit'] = 'Odeslat'; +$lang['cancel'] = 'Storno'; +$lang['you_made_no_changes'] = 'Neprovedli jste žádné zmÄ›ny'; +$lang['go_back'] = 'ZpÄ›t'; + +// welcome.php +$lang['welcome_note'] = 'K navigaci použijte prosím menu v levé Äásti obrazovky'; +$lang['credits'] = 'AutoÅ™i'; +$lang['changelog'] = 'ChangeLog'; +$lang['donate'] = 'PodpoÅ™it projekt'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'NebezpeÄný název souboru: '; +$lang['no_such_file'] = 'Soubor nelze nalézt: '; + +//function.php +$lang['auto_update_not_setup'] = 'V konfiguraci jste zapnuli podporu auto_uid_numbers pro %s, ale nespecifikovali jste auto_uid_number_mechanism. Napravte prosím nejprve tento problém.'; +$lang['uidpool_not_set'] = 'V konfiguraci serveru %s jste specifikovali auto_uid_number_mechanism jako uidpool, ale neuvedli jste audo_uid_number_uid_pool_dn. Napravte prosím nejprve tento problém.'; +$lang['uidpool_not_exist'] = 'Zdá se, že uidPool uvedený v konfiguraci (%s) neexistuje.'; +$lang['specified_uidpool'] = 'V konfiguraci serveru %s jste specifikovali auto_uid_number_mechanism jako search, ale neuvedli jste auto_uid_number_search_base. Napravte prosím nejprve tento problém.'; +$lang['auto_uid_invalid_credential'] = 'Se zadanými přístupovými oprávnÄ›ními se nelze pÅ™ipojit k %s a získat auto_uid. Zkontrolujte prosím konfiguraci.'; +$lang['bad_auto_uid_search_base'] = 'V konfiguraci phpLDAPadminu je uveden neplatný parametr auto_uid_search_base pro server %s'; +$lang['auto_uid_invalid_value'] = 'V konfiguraci je uvedena neplatná hodnota auto_uid_number_mechanism (%s). Platné hodnoty jsou pouze uidpool a search. Napravte prosím nejprve tento problém.'; +$lang['error_auth_type_config'] = 'Chyba: Ve svém konfiguraÄním souboru jste u položky $servers[\'auth_type\'] uvedli chybnou hodnotu \'%s\'. Platné hodnoty jsou pouze \'config\' a \'form\'.'; +$lang['php_install_not_supports_tls'] = 'Tato instalace PHP neobsahuje podporu pro TLS'; +$lang['could_not_start_tls'] = 'Nelze inicializovat TLS.
Zkontolujte prosím konfiguraci svého LDAP serveru.'; +$lang['could_not_bind_anon'] = 'K serveru se nelze pÅ™ipojit anonymnÄ›.'; +$lang['could_not_bind'] = 'Nelze se pÅ™ipojit k serveru LDAP.'; +$lang['anonymous_bind'] = 'PÅ™ipojit anonymnÄ›'; +$lang['bad_user_name_or_password'] = 'Nesprávné jméno nebo heslo. Opakujte pÅ™ihlášení.'; +$lang['redirecting_click_if_nothing_happens'] = 'PÅ™esmÄ›rovávám... KlepnÄ›te sem, pokud se nic nestane.'; +$lang['successfully_logged_in_to_server'] = 'ÚspěšnÄ› jste se pÅ™ihlásili k serveru %s'; +$lang['could_not_set_cookie'] = 'Cookie nemohla být uložena.'; +$lang['ldap_said'] = 'OdpovÄ›Ä LDAP serveru: %s

'; +$lang['ferror_error'] = 'Chyba'; +$lang['fbrowse'] = 'procházet'; +$lang['delete_photo'] = 'Odstranit fotografii'; +$lang['install_not_support_blowfish'] = 'Tato instalace PHP neobsahuje podporu pro šifru Blowfish.'; +$lang['install_not_support_md5crypt'] = 'Tato instalace PHP neobsahuje podporu pro šifru md5crypt.'; +$lang['install_no_mash'] = 'Tato instalace PHP nepodporuje funkci mhash(). Nelze aplikovat SHA hash.'; +$lang['jpeg_contains_errors'] = 'jpegPhoto obsahuje chyby
'; +$lang['ferror_number'] = 'Číslo chyby: %s (%s)

'; +$lang['ferror_discription'] = 'Popis: %s

'; +$lang['ferror_number_short'] = 'Číslo chyby: %s

'; +$lang['ferror_discription_short'] = 'Popis: (popis není k dispozici)
'; +$lang['ferror_submit_bug'] = 'Pokud je toto chyba v phpLDAPadmin, napiÅ¡te nám o tom.'; +$lang['ferror_unrecognized_num'] = 'Neznámé Äíslo chyby: '; +$lang['ferror_nonfatil_bug'] = '
+
+ Narazili jste na nezávažnou, droubnou až zanedbatelnou chybu v phpLDAPadmin!
Chyba:%s (%s)
Soubor:%s řádka %s, voláno z %s
Verze:PLA: %s, PHP: %s, SAPI: %s +
Web server:%s
+ Klepnutím prosím ohlášte chybu.

'; +$lang['ferror_congrats_found_bug'] = 'Blahopřejeme! Nalezli jste chybu v phpLDAPadmin. :-)

+ + + + + + + + + + +
Chyba:%s
Vážnost:%s
Soubor:%s
Řádka:%s
Voláno z:%s
Verze PLA:%s
Verze PHP:%s
PHP SAPI:%s
Web server:%s
+
+ Klepnutím dole prosím ohlaÅ¡te chybu!'; + +//ldif_import_form +$lang['import_ldif_file_title'] = 'Importovat soubor LDIF'; +$lang['select_ldif_file'] = 'Zvolte soubor LDIF:'; +$lang['select_ldif_file_proceed'] = 'ProveÄ >>'; +$lang['dont_stop_on_errors'] = 'Ignorovat chyby'; + +//ldif_import +$lang['add_action'] = 'PÅ™idávání...'; +$lang['delete_action'] = 'Odstraňování...'; +$lang['rename_action'] = 'PÅ™ejmenovávání...'; +$lang['modify_action'] = 'Upravování...'; +$lang['warning_no_ldif_version_found'] = 'Nebyla nalezena verze. PÅ™edpokládám 1.'; +$lang['valid_dn_line_required'] = 'Je vyžadován platný řádek s DN.'; +$lang['missing_uploaded_file'] = 'Soubor LDIF nebyl nalezen.'; +$lang['no_ldif_file_specified.'] = 'Neuvedli jste LDIF soubor. Opakujte prosím akci.'; +$lang['ldif_file_empty'] = 'Soubor LDIF je prázdný.'; +$lang['empty'] = 'prázdný'; +$lang['file'] = 'Soubor'; +$lang['number_bytes'] = '%s bajtů'; + +$lang['failed'] = 'selhal'; +$lang['ldif_parse_error'] = 'Chyba v souboru LDIF'; +$lang['ldif_could_not_add_object'] = 'Nelze pÅ™idat objekt:'; +$lang['ldif_could_not_rename_object'] = 'Nelze pÅ™ejmenovat objekt:'; +$lang['ldif_could_not_delete_object'] = 'Nelze odstranit objekt:'; +$lang['ldif_could_not_modify_object'] = 'Nelze upravit objekt:'; +$lang['ldif_line_number'] = 'Číslo řádku:'; +$lang['ldif_line'] = 'Řádek:'; + +// Exports +$lang['export_format'] = 'Formát exportu'; +$lang['line_ends'] = 'Konce řádků'; +$lang['must_choose_export_format'] = 'Musíte zvolit exportní formát.'; +$lang['invalid_export_format'] = 'Neplatný exportní formát'; +$lang['no_exporter_found'] = 'Nebyla nalezena žádná aplikace pro export.'; +$lang['error_performing_search'] = 'BÄ›hem vyhledávání doÅ¡lo k chybÄ›.'; +$lang['showing_results_x_through_y'] = 'Výsledky od %s do %s.'; +$lang['searching'] = 'Vyhledávám...'; +$lang['size_limit_exceeded'] = 'Byl pÅ™ekroÄen limitní parametr pro vyhledávání.'; +$lang['entry'] = 'Objekt'; +$lang['ldif_export_for_dn'] = 'LDIF Export objektu: %s'; +$lang['generated_on_date'] = 'Generováno phpLDAPadminem dne %s'; +$lang['total_entries'] = 'Celkem objektů'; +$lang['dsml_export_for_dn'] = 'DSLM Export objektu: %s'; + +// logins +$lang['could_not_find_user'] = 'Nelze nalézt uživatele "%s"'; +$lang['password_blank'] = 'Nezadali jste uživatelské heslo.'; +$lang['login_cancelled'] = 'PÅ™ihlaÅ¡ování zruÅ¡eno.'; +$lang['no_one_logged_in'] = 'Nikdo není pÅ™ihlášen k tomuto serveru.'; +$lang['could_not_logout'] = 'Nelze se odhlásit.'; +$lang['unknown_auth_type'] = 'Neznámý auth_type: %s'; +$lang['logged_out_successfully'] = 'Odhlášení od serveru %s probÄ›hlo úspěšnÄ›.'; +$lang['authenticate_to_server'] = 'Ověření vůÄi serveru %s'; +$lang['warning_this_web_connection_is_unencrypted'] = 'UpozornÄ›ní: Toto spojení není Å¡ifrováné.'; +$lang['not_using_https'] = 'NepÅ™ipojujete se pomocí \'https\'. ProhlížeÄ odeÅ¡le VaÅ¡e pÅ™ihlášení v neÅ¡ifrované podobÄ›.'; +$lang['login_dn'] = 'PÅ™ihlaÅ¡ovací DN'; +$lang['user_name'] = 'Uživatel'; +$lang['password'] = 'Heslo'; +$lang['authenticate'] = 'PÅ™ihlásit'; + +// Entry browser +$lang['entry_chooser_title'] = 'Zvolit objekt'; + +// Index page +$lang['need_to_configure'] = 'Nejprve je tÅ™eba phpLDAPadmin nakonfigurovat. Toho docílíte upravou souboru \'config.php\'. Ukázková konfigurace je k nalezení v souboru \'config.php.example\''; + +// Mass deletes +$lang['no_deletes_in_read_only'] = 'Mazání je v režimu "jen pro Ätení" zakázáno.'; +$lang['error_calling_mass_delete'] = 'Chyba pÅ™i volání mass_delete.php. V POSTu chybí promÄ›nná mass_delete.'; +$lang['mass_delete_not_array'] = 'mass_delete v POSTu není pole.'; +$lang['mass_delete_not_enabled'] = 'Hromadý výmaz není umožnÄ›n. Můžete ho povolit v souboru config.php.'; +$lang['mass_deleting'] = 'Hromadný výmaz'; +$lang['mass_delete_progress'] = 'PrůbÄ›h odstraňování na serveru "%s"'; +$lang['malformed_mass_delete_array'] = 'Zdeformované pole mass_delete.'; +$lang['no_entries_to_delete'] = 'Nevybrali jste žádné objekty k odstranÄ›ní.'; +$lang['deleting_dn'] = 'Odstraňuji %s'; +$lang['total_entries_failed'] = '%s z %s objektů se nepodaÅ™ilo odstranit.'; +$lang['all_entries_successful'] = 'VÅ¡echny objekty byly úspěšnÄ› odstranÄ›ny.'; +$lang['confirm_mass_delete'] = 'PotvÄte hromadný výmaz v poÄtu %s objektů na serveru %s'; +$lang['yes_delete'] = 'Ano, odstranit!'; + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'Nelze pÅ™ejmenovat objekt, který má potomky. Toto se například vztahuje na vÅ¡echny objekty, které nejsou typu "list".'; +$lang['no_rdn_change'] = 'NezmÄ›nili jste RDN'; +$lang['invalid_rdn'] = 'Neplatná hodnota RDN'; +$lang['could_not_rename'] = 'Objekt nelze pÅ™ejmenovat'; + +?> diff --git a/lang/recoded/de.php b/lang/recoded/de.php index 489035f..5de6f92 100644 --- a/lang/recoded/de.php +++ b/lang/recoded/de.php @@ -4,173 +4,282 @@ * Ãœbersetzung von Marius Rieder * Uwe Ebel * Modifikationen von Dieter Kluenter + * + * + * $Header: /cvsroot/phpldapadmin/phpldapadmin/lang/recoded/de.php,v 1.22 2004/07/20 19:47:32 i18phpldapadmin Exp $ + * Update auf CVS-Version von en.php 1.79 + * Verwendete CVS-Version von en.php 1.65 */ // Search form $lang['simple_search_form_str'] = 'Einfache Suche';//'Simple Search Form'; $lang['advanced_search_form_str'] = 'Experten Suche';//'Advanced Search Form'; $lang['server'] = 'Server';//'Server'; -$lang['search_for_entries_whose'] = 'Suche nach Einträgen die';//'Search for entries whose'; +$lang['search_for_entries_whose'] = 'Suche nach Einträgen die';//'Search for entries whose'; $lang['base_dn'] = 'Base DN';//'Base DN'; $lang['search_scope'] = 'Suchbereich';//'Search Scope'; -$lang['search_ filter'] = 'Suchfilter';//'Search Filter'; +//$lang['search_ filter'] = 'Suchfilter';//'Search Filter'; $lang['show_attributes'] = 'Zeige Attribute';//'Show Attributtes'; $lang['Search'] = 'Suchen';//'Search'; $lang['equals'] = 'gleich';//'equals'; -$lang['starts_with'] = 'beginnt mit';//'starts with'; -$lang['contains'] = 'enthält';//'contains'; -$lang['ends_with'] = 'endet mit';//'ends with'; -$lang['sounds_like'] = 'änlich wie';//'sounds like'; +//$lang['starts_with'] = 'beginnt mit';//'starts with'; +$lang['contains'] = 'enthält';//'contains'; +//$lang['ends_with'] = 'endet mit';//'ends with'; +//$lang['sounds_like'] = 'ähnlich wie';//'sounds like'; +$lang['predefined_search_str'] = 'oder ein von dieser Liste auswählen';//'or select a predefined search'; +$lang['predefined_searches'] = 'Vordefinierte Suche';//'Predefined Searches'; +$lang['no_predefined_queries'] = 'Keine Abfragen sind in der config.php definiert';// 'No queries have been defined in config.php.'; +$lang['export_results'] = 'Ergebnisse exportieren';// 'export results'; +$lang['unrecoginzed_search_result_format'] = 'Das Suchergebnisformat ist nicht erkennbar: %s';//'Unrecognized search result format: %s'; +$lang['format'] = 'Format';// 'Format'; +$lang['list'] = 'Liste';// 'list'; +$lang['table'] = 'Tabelle';// 'table'; +$lang['bad_search_display'] = 'Die config.php gibt einen falsche Wert für $default_search_display: %s vor. Bitte in der Konfiguration korrigieren.';//'Your config.php specifies an invalid value for $default_search_display: %s. Please fix it'; + + // Tree browser -$lang['request_new_feature'] = 'Anfragen von neuen Möglichkeiten';//'Request a new feature'; -$lang['see_open_requests'] = 'Siehe offene Anfragen';//'see open requests'; +$lang['request_new_feature'] = 'Anfragen von neuen Möglichkeiten';//'Request a new feature'; +//$lang['see_open_requests'] = 'Siehe offene Anfragen';//'see open requests'; $lang['report_bug'] = 'Einen Fehler berichten';//'Report a bug'; -$lang['see_open_bugs'] = 'Siehe offene Fehler';//'see open bugs'; +//$lang['see_open_bugs'] = 'Siehe offene Fehler';//'see open bugs'; $lang['schema'] = 'Schema';//'schema'; $lang['search'] = 'suche';//'search'; $lang['refresh'] = 'aktualisieren';//'refresh'; -$lang['create'] = 'neu';//'create'; +$lang['create'] = 'Erstellen';//'create'; $lang['info'] = 'Info';//'info'; $lang['import'] = 'Import';//'import'; $lang['logout'] = 'abmelden';//'logout'; $lang['create_new'] = 'Neuen Eintrag erzeugen';//'Create New'; -$lang['view_schema_for'] = 'Zeige Schema für';//'View schema for'; -$lang['refresh_expanded_containers'] = 'Aktualisiere alle geöffneten Container von';//'Refresh all expanded containers for'; +$lang['new'] = 'Neu';//'new'; +$lang['view_schema_for'] = 'Zeige Schema für';//'View schema for'; +$lang['refresh_expanded_containers'] = 'Aktualisiere alle geöffneten Container von';//'Refresh all expanded containers for'; $lang['create_new_entry_on'] = 'Erzeuge einen neuen Eintrag auf';//'Create a new entry on'; $lang['view_server_info'] = 'Zeige Server Informationen';//'View server-supplied information'; -$lang['import_from_ldif'] = 'Importiere Einträge von einer LDIF-Datei';//'Import entries from an LDIF file'; +$lang['import_from_ldif'] = 'Importiere Einträge von einer LDIF-Datei';//'Import entries from an LDIF file'; $lang['logout_of_this_server'] = 'Von diesem Server abmelden';//'Logout of this server'; $lang['logged_in_as'] = 'Angemeldet als: ';//'Logged in as: '; $lang['read_only'] = 'nur lesen';//'read only'; +$lang['read_only_tooltip'] = 'Diese Attribut wurde vom phpLDAPadmin-Adminstrator als nur lesend markiert.';//This attribute has been flagged as read only by the phpLDAPadmin administrator'; $lang['could_not_determine_root'] = 'Konnte die Basis ihres LDAP Verzeichnises nicht ermitteln';//'Could not determin the root of your LDAP tree.'; $lang['ldap_refuses_to_give_root'] = 'Es scheint das ihr LDAP Server nicht dazu konfiguriert wurde seine Basis bekanntzugeben';//'It appears that the LDAP server has been configured to not reveal its root.'; $lang['please_specify_in_config'] = 'Bitte in config.php angeben';//'Please specify it in config.php'; $lang['create_new_entry_in'] = 'Neuen Eintrag erzeugen auf';//'Create a new entry in'; $lang['login_link'] = 'Anmelden...';//'Login...'; +$lang['login'] = 'Anmelden';//'login'; // Entry display -$lang['delete_this_entry'] = 'Diesen Eintrag löschen';//'Delete this entry'; -$lang['delete_this_entry_tooltip'] = 'F¨r diese Entscheidung wird nochmals nachgefragt.';//'You will be prompted to confirm this decision'; +$lang['delete_this_entry'] = 'Diesen Eintrag löschen';//'Delete this entry'; +$lang['delete_this_entry_tooltip'] = 'Für diese Entscheidung wird nochmals nachgefragt.';//'You will be prompted to confirm this decision'; $lang['copy_this_entry'] = 'Diesen Eintrag kopieren';//'Copy this entry'; $lang['copy_this_entry_tooltip'] = 'Kopiere diese Object an eine anderen Ort: ein neuer DN oder einen anderen Server.';//'Copy this object to another location, a new DN, or another server'; -$lang['export_to_ldif'] = 'Exportieren nach LDIF';//'Export to LDIF'; -$lang['export_to_ldif_tooltip'] = 'Speichere einen LDIF-Abzug diese Objektes';//'Save an LDIF dump of this object'; -$lang['export_subtree_to_ldif_tooltip'] = 'Speicher eine LDIF-Abzug ab diesem Objekt und alle seine Untereinträge';//'Save an LDIF dump of this object and all of its children'; -$lang['export_subtree_to_ldif'] = 'Export Unterbaum nach LDIF';//'Export subtree to LDIF'; -$lang['export_to_ldif_mac'] = 'Zeilenende für Macintosh';//'Macintosh style line ends'; -$lang['export_to_ldif_win'] = 'Zeilenende für Windows';//'Windows style line ends'; -$lang['export_to_ldif_unix'] = 'Zeilenende für Unix';//'Unix style line ends'; +$lang['export'] = 'Exportieren';//'Export to LDIF'; +$lang['export_lcase'] = 'exportieren';//'export'; +$lang['export_tooltip'] = 'Speichere einen Abzug diese Objektes';//'Save an LDIF dump of this object'; +$lang['export_subtree_tooltip'] = 'Speicher eine Abzug ab diesem Objekt und alle seine Untereinträge';//'Save an LDIF dump of this object and all of its children'; +$lang['export_subtree'] = 'Export Unterbaum nach LDIF';//'Export subtree to LDIF'; +//$lang['export_mac'] = 'Zeilenende für Macintosh';//'Macintosh style line ends'; +//$lang['export_win'] = 'Zeilenende für Windows';//'Windows style line ends'; +//$lang['export_unix'] = 'Zeilenende für Unix';//'Unix style line ends'; $lang['create_a_child_entry'] = 'Erzeuge einen Untereintrag';//'Create a child entry'; -$lang['add_a_jpeg_photo'] = 'Ein JPEG-Foto hinzufügen';//'Add a jpegPhoto'; +//$lang['add_a_jpeg_photo'] = 'Ein JPEG-Foto hinzufügen';//'Add a jpegPhoto'; $lang['rename_entry'] = 'Eintrag umbenennen';//'Rename Entry'; $lang['rename'] = 'Umbenennen';//'Rename'; -$lang['add'] = 'Hinzufügen';//'Add'; +$lang['add'] = 'Hinzufügen';//'Add'; $lang['view'] = 'Ansehen';//'View'; -$lang['add_new_attribute'] = 'Neues Attribut hinzufügen';//'Add New Attribute'; -$lang['add_new_attribute_tooltip'] = 'Füge ein neues Attribut/Wert zu diesem Eintrag hinzu';// 'Add a new attribute/value to this entry'; -$lang['internal_attributes'] = 'Interne Attribute';//'Internal Attributes'; +$lang['view_one_child'] = 'Zeige einen Untereintrag';//'View 1 child'; +$lang['view_children'] = 'Zeige %s Untereinträge';//'View %s children'; +$lang['add_new_attribute'] = 'Neues Attribut hinzufügen';//'Add New Attribute'; +// DELETED $lang['add_new_attribute_tooltip'] = 'Füge ein neues Attribut/Wert zu diesem Eintrag hinzu';// 'Add a new attribute/value to this entry'; +$lang['add_new_objectclass'] = 'Neue ObjectClass hinzufügen';//'Add new ObjectClass'; +//$lang['internal_attributes'] = 'Interne Attribute';//'Internal Attributes'; $lang['hide_internal_attrs'] = 'Verdecke interne Attribute';//'Hide internal attributes'; $lang['show_internal_attrs'] = 'Zeige interne Attribute';//'Show internal attributes'; -$lang['internal_attrs_tooltip'] = 'Attribute werden automatisch vom System erzeugt.';//'Attributes set automatically by the system'; -$lang['entry_attributes'] = 'Attribute des Eintrages';//'Entry Attributes'; -$lang['attr_name_tooltip'] = 'Klicken sie um die Schemadefinition für den Attributtyp \'%s\' anzuzeigen.';//'Click to view the schema defintion for attribute type \'%s\''; -$lang['click_to_display'] = 'Klicken zum Ansehen';//'click to display'; -$lang['hidden'] = 'verdeckt';//'hidden'; +//$lang['internal_attrs_tooltip'] = 'Attribute werden automatisch vom System erzeugt.';//'Attributes set automatically by the system'; +//$lang['entry_attributes'] = 'Attribute des Eintrages';//'Entry Attributes'; +$lang['attr_name_tooltip'] = 'Klicken sie um die Schemadefinition für den Attributtyp "%s" anzuzeigen.';//'Click to view the schema defintion for attribute type \'%s\''; +//$lang['click_to_display'] = 'Klicken zum Ansehen';//'click to display'; +//$lang['hidden'] = 'verdeckt';//'hidden'; $lang['none'] = 'Keine';//'none'; -$lang['save_changes'] = 'Änderungen speichern';//'Save Changes'; -$lang['add_value'] = 'Wert hinzufügen';//'add value'; -$lang['add_value_tooltip'] = 'Füge einen weiteren Wert dem Attribut hinzu';//'Add an additional value to this attribute'; +$lang['no_internal_attributes'] = 'Keine internen Attribute.';//'No internal attributes'; +$lang['no_attributes'] = 'Dieser Eintrag hat keine Attribute.';//'This entry has no attributes'; +$lang['save_changes'] = 'Änderungen speichern';//'Save Changes'; +$lang['add_value'] = 'Wert hinzufügen';//'add value'; +$lang['add_value_tooltip'] = 'Füge einen weiteren Wert dem Attribut hinzu';//'Add an additional value to this attribute'; $lang['refresh_entry'] = 'Auffrischen';// 'Refresh'; $lang['refresh_this_entry'] = 'Aktualisiere den Entrag';//'Refresh this entry'; -$lang['delete_hint'] = 'Hinweis: Um ein Attribut zu löschen, leeren Sie den Inhalt des Wertes.';//'Hint: To delete an attribute, empty the text field and click save.'; -$lang['attr_schema_hint'] = 'Tipp:Um das Schema für ein Attribut anzusehen, genügt ein klick auf den Attributnamen';//'Hint: To view the schema for an attribute, click the attribute name.'; -$lang['attrs_modified'] = 'Einige Attribute (%s) wurden verändert und sind hervorgehoben.';//'Some attributes (%s) were modified and are highlighted below.'; -$lang['attr_modified'] = 'Ein Attribut (%s) wurde verändert und ist hervorgehoben.';//'An attribute (%s) was modified and is highlighted below.'; +$lang['delete_hint'] = 'Hinweis: Um ein Attribut zu löschen, leeren Sie den Inhalt des Wertes.';//'Hint: To delete an attribute, empty the text field and click save.'; +$lang['attr_schema_hint'] = 'Tipp:Um das Schema für ein Attribut anzusehen, genügt ein klick auf den Attributnamen';//'Hint: To view the schema for an attribute, click the attribute name.'; +$lang['attrs_modified'] = 'Einige Attribute (%s) wurden verändert und sind hervorgehoben.';//'Some attributes (%s) were modified and are highlighted below.'; +$lang['attr_modified'] = 'Ein Attribut (%s) wurde verändert und ist hervorgehoben.';//'An attribute (%s) was modified and is highlighted below.'; $lang['viewing_read_only'] = 'Zeige Eintrag im Nurlesemodus';//'Viewing entry in read-only mode.'; -$lang['change_entry_rdn'] = 'Ändere den RDN des Eintrages';//'Change this entry\'s RDN'; -$lang['no_new_attrs_available'] = 'Keine weiteren Attribute verfügbar für diesen Eintrag';//'no new attributes available for this entry'; -$lang['binary_value'] = 'Binärwert';//'Binary value'; -$lang['add_new_binary_attr'] = 'Neuen Binärwert hinzufügen';//'Add New Binary Attribute'; -$lang['add_new_binary_attr_tooltip'] = 'Füge einen neuen Binäwert (Attribut/Wert) aus einer Datei hinzu.';//'Add a new binary attribute/value from a file'; -$lang['alias_for'] = 'Alias für';//'Alias for'; +//$lang['change_entry_rdn'] = 'Ändere den RDN des Eintrages';//'Change this entry\'s RDN'; +$lang['no_new_attrs_available'] = 'Keine weiteren Attribute verfügbar für diesen Eintrag';//'no new attributes available for this entry'; +$lang['no_new_binary_attrs_available'] = 'Keine weiteren Binären Attribute verfügbar für diesen Eintrag.';//'no new binary attributes available for this entry'; +$lang['binary_value'] = 'Binärwert';//'Binary value'; +$lang['add_new_binary_attr'] = 'Neuen Binärwert hinzufügen';//'Add New Binary Attribute'; +// DELETE $lang['add_new_binary_attr_tooltip'] = 'Füge einen neuen Binäwert (Attribut/Wert) aus einer Datei hinzu.';//'Add a new binary attribute/value from a file'; +$lang['alias_for'] = 'Alias für';//'Alias for'; +$lang['required_for'] = 'Notwendige Attribute für die Objektklasse(n) %s';//'Required attribute for objectClass(es) %s'; $lang['download_value'] = 'Wert herunterladen';//'download value'; -$lang['delete_attribute'] = 'Lösche Attribut';//'delete attribute'; +$lang['delete_attribute'] = 'Lösche Attribut';//'delete attribute'; $lang['true'] = 'Wahr';//'true'; $lang['false'] = 'Falsch';//'false'; $lang['none_remove_value'] = 'nichts, entferne den Wert';//?? //'none, remove value'; -$lang['really_delete_attribute'] = 'Lösche das Attribut wirklich';//'Really delete attribute'; +$lang['really_delete_attribute'] = 'Lösche das Attribut wirklich';//'Really delete attribute'; +$lang['add_new_value'] = 'Neuen Wert hinzufügen';//'Add New Value'; // Schema browser -$lang['the_following_objectclasses'] = 'Die folgenden Objektklassen werden vom LDAP-Server unterstützt.';//'The following objectClasses are supported by this LDAP server.'; -$lang['the_following_attributes'] = 'Die folgenden Attribute werden vom LDAP-Server unterstützt.';//'The following attributeTypes are supported by this LDAP server.'; -$lang['the_following_matching'] = 'Die folgenden Suchregeln werden vom LDAP-Server unterstützt.';//'The following matching rules are supported by this LDAP server.'; -$lang['the_following_syntaxes'] = 'Die folgenden Syntaxe werden vom LDAP-Server unterstützt.';//'The following syntaxes are supported by this LDAP server.'; +$lang['the_following_objectclasses'] = 'Die folgenden Objektklassen werden vom LDAP-Server unterstützt.';//'The following objectClasses are supported by this LDAP server.'; +$lang['the_following_attributes'] = 'Die folgenden Attribute werden vom LDAP-Server unterstützt.';//'The following attributeTypes are supported by this LDAP server.'; +$lang['the_following_matching'] = 'Die folgenden Suchregeln werden vom LDAP-Server unterstützt.';//'The following matching rules are supported by this LDAP server.'; +$lang['the_following_syntaxes'] = 'Die folgenden Syntaxe werden vom LDAP-Server unterstützt.';//'The following syntaxes are supported by this LDAP server.'; +$lang['schema_retrieve_error_1']='Der Server unterstützt nicht vollständig das LDAP-Protokoll.';//'The server does not fully support the LDAP protocol.'; +$lang['schema_retrieve_error_2']='Die verwendete PHP-Version setzte keine korrekte LDAP-Abfrage ab.';//'Your version of PHP does not correctly perform the query.'; +$lang['schema_retrieve_error_3']='Oder phpLDAPadmin konnte nicht das Schema für den Server abfragen.';//'Or lastly, phpLDAPadmin doesn\'t know how to fetch the schema for your server.'; $lang['jump_to_objectclass'] = 'Gehe zur objectClass';//'Jump to an objectClass'; +$lang['view_schema_for_oclass'] = 'Zeige die Schemabeschreibung für diese Objektklasse';//'View the schema description for this objectClass'; $lang['jump_to_attr'] = 'Gehe zum Attribut';//'Jump to an attribute'; -$lang['schema_for_server'] = 'Schema für Server';//'Schema for server'; +$lang['jump_to_matching_rule'] = 'Gehe zur Treffer Regel'; // 'Jump to a matching rule'; + +$lang['schema_for_server'] = 'Schema für Server';//'Schema for server'; $lang['required_attrs'] = 'Notwendige Attribute';//'Required Attributes'; +$lang['required'] = 'notwendig';//'required'; $lang['optional_attrs'] = 'Optionale Attribute';//'Optional Attributes'; +$lang['optional_binary_attrs'] = 'Optinales Binärattribut';//'Optional Binary Attributes'; $lang['OID'] = 'OID';//'OID'; +$lang['aliases']='Pseudonym(e)';//'Aliases'; $lang['desc'] = 'Beschreibung';//'Description'; +$lang['no_description']='Keine Beschreibung';//'no description'; $lang['name'] = 'Name';//'Name'; +$lang['equality']='Gleichheit';// 'Equality'; $lang['is_obsolete'] = 'Diese objectClass ist veraltet';//'This objectClass is obsolete'; $lang['inherits'] = 'Abgeleitet von';//'Inherits'; +$lang['inherited_from']='abgeleitet von';//inherited from'; +$lang['parent_to'] = 'Knoten von';//'Parent to'; $lang['jump_to_this_oclass'] = 'Gehe zur objectClass Definition';//'Jump to this objectClass definition'; $lang['matching_rule_oid'] = 'Treffer-Regel OID';//'Matching Rule OID'; $lang['syntax_oid'] = 'Syntax OID';//'Syntax OID'; -$lang['not_applicable'] = 'keine Angabe';//'not applicable'; +$lang['not_applicable'] = 'nicht anwendbar';//'not applicable'; $lang['not_specified'] = 'nicht spezifiziert';//not specified'; +$lang['character']='Zeichen';//'character'; +$lang['characters']='Zeichen';//'characters'; +$lang['used_by_objectclasses']='Verwendet von den Objektklassen';//'Used by objectClasses'; +$lang['used_by_attributes']='Verwendet in den Attributen';//'Used by Attributes'; +$lang['oid']='OID'; // 'OID' +$lang['obsolete']='Veraltet';//'Obsolete'; +$lang['ordering']='Ordnung';//'Ordering'; +$lang['substring_rule']='Teilstring Regel';//'Substring Rule'; +$lang['single_valued']='Einzelner Wert';//'Single Valued'; +$lang['collective']='Sammlung';//'Collective'; +$lang['user_modification']='Benutzer Änderung';//'User Modification'; +$lang['usage']='Verwendung';//'Usage'; +$lang['maximum_length']='Maximale Grösse';//'Maximum Length'; +$lang['attribute_types']='Attribut Typen';//'Attribute Types'; +$lang['attributes']='Attribut Typen';//'Attributes Types'; +$lang['syntaxes']='Syntaxe';//'Syntaxes'; +$lang['objectclasses']='Objekt Klassen';//'objectClasses'; +$lang['matchingrules']='Treffer Regeln';//'Matching Rules'; +$lang['could_not_retrieve_schema_from']='Das Schema konnte nicht abgefragt werden. Betrifft die Einstellung des Servers:';//'Could not retrieve schema from'; +$lang['type']='Typ';// 'Type'; +$lang['no_such_schema_item'] = 'Kein Schema Eintrag für Element: %s';//'No such schema item: "%s"'; + // Deleting entries -$lang['entry_deleted_successfully'] = 'Der Eintrag \'%s\' wurde erfolgreich gelöscht.';//'Entry \'%s\' deleted successfully.'; +$lang['entry_deleted_successfully'] = 'Der Eintrag \'%s\' wurde erfolgreich gelöscht.';//'Entry \'%s\' deleted successfully.'; $lang['you_must_specify_a_dn'] = 'Ein DN muss angegeben werden.';//'You must specify a DN'; -$lang['could_not_delete_entry'] = 'Konnte den Eintrag nicht löschen: %s';//'Could not delete the entry: %s'; +$lang['could_not_delete_entry'] = 'Konnte den Eintrag nicht löschen: %s';//'Could not delete the entry: %s'; +$lang['no_such_entry'] = 'Keinen solchen Eintrag: %s';//'No such entry: %s'; +$lang['delete_dn'] = 'Löschen von %s';//'Delete %s'; +//$lang['permanently_delete_children'] = 'Ebenso dauerhaftes Löschen aller Untereinträge?';//'Permanently delete all children also?'; +$lang['entry_is_root_sub_tree'] = 'Dies ist ein Root-Eintrag und beinhaltet einen Unterbaum mit %s Einträgen.';//'This entry is the root of a sub-tree containing %s entries.'; +$lang['view_entries'] = 'Zeige Einträge';//'view entries'; +$lang['confirm_recursive_delete'] = 'phpLDAPadmin kann diesen Eintrag und die %s Untereinträge rekursiv löschen. Unten ist eine Liste der Einträge angegeben die von diesem Löschen betroffen wären. Sollen alle Einträge gelöscht werden?';//'phpLDAPadmin can recursively delete this entry and all %s of its children. See below for a list of all the entries that this action will delete. Do you want to do this?'; +$lang['confirm_recursive_delete_note'] = 'Hinweis: Dies ist sehr gefährlich und erfolgt auf eines Risiko. Die Ausführung kann nicht rückgängig gemacht werden. Dies betrifft ebenso Aliase, Referenzen und andere Dinge die zu Problemen führen können.';//'Note: this is potentially very dangerous and you do this at your own risk. This operation cannot be undone. Take into consideration aliases, referrals, and other things that may cause problems.'; +$lang['delete_all_x_objects'] = 'Löschen aller "%s" Objekte';//'Delete all %s objects'; +$lang['recursive_delete_progress'] = 'Rekursives Löschen in Arbeit';//'Recursive delete progress'; +$lang['entry_and_sub_tree_deleted_successfully'] = 'Erfolgreiches Löschen des Eintrages "%s" und dessen Unterbaums.';// 'Entry %s and sub-tree deleted successfully.'; +$lang['failed_to_delete_entry'] = 'Fehler beim Löschen des Eintrages %s.';//'Failed to delete entry %s'; + +// Deleting attributes +$lang['attr_is_read_only'] = 'Das Attribut "%s" ist in der phpLDAPadmin Konfiguration als nur lesend deklariert.';//'The attribute "%s" is flagged as read-only in the phpLDAPadmin configuration.'; +$lang['no_attr_specified'] = 'Kein Attributname angegeben.';//'No attribute name specified.'; +$lang['no_dn_specified'] = 'Kein DN angegeben.';//'No DN specified'; + +// Adding attributes +$lang['left_attr_blank'] = 'Der Wert des Attributes wurde leergelassen. Bitte zurück gehen und erneut versuchen.';//'You left the attribute value blank. Please go back and try again.'; +$lang['failed_to_add_attr'] = 'Fehler beim Hinzufügen des Attributes';//'Failed to add the attribute.'; +$lang['file_empty'] = 'Die ausgewählte Datei ist entweder nicht vorhanden oder leer. Bitte zurückgehen und nochmals versuchen.';//'The file you chose is either empty or does not exist. Please go back and try again.'; +$lang['invalid_file'] = 'Sicherheitsfehler: Die hochgeladene Datei kann bösartig sein.';//'Security error: The file being uploaded may be malicious.'; +$lang['warning_file_uploads_disabled'] = 'Die PHP-Konfiguration (php.ini) gestattet es nicht Dateien hochzuladen. Bitte die php.ini hierzu überprüfen.';//'Your PHP configuration has disabled file uploads. Please check php.ini before proceeding.'; +$lang['uploaded_file_too_big'] = 'Die hochgeladene Datei ist größer als die maximal erlaubte Datei aus der "php.ini". Bitte in der php.ini den Eintrag "upload_max_size" überprüfen.';//'The file you uploaded is too large. Please check php.ini, upload_max_size setting'; +$lang['uploaded_file_partial'] = 'Die auswählte Datei wurde nur unvollständig hochgeladen.';//'The file you selected was only partially uploaded, likley due to a network error.'; +$lang['max_file_size'] = 'Maximal Dateigröße ist: %s';//'Maximum file size: %s'; + +// Updating values +$lang['modification_successful'] = 'Änderung war erfolgreich!';//'Modification successful!'; +$lang['change_password_new_login'] = 'Da das Passwort geändert wurde müssen Sie sich erneut einloggen.'; //'Since you changed your password, you must now login again with your new password.'; // Adding objectClass form -$lang['new_required_attrs'] = 'Neue benötigte Attribute';//'New Required Attributes'; -$lang['requires_to_add'] = 'Diese Aktion zwingt sie folgendes hinzuzufügen';//'This action requires you to add'; +$lang['new_required_attrs'] = 'Neue benötigte Attribute';//'New Required Attributes'; +$lang['requires_to_add'] = 'Diese Aktion zwingt sie folgendes hinzuzufügen';//'This action requires you to add'; $lang['new_attributes'] = 'neue Attribute';//'new attributes'; -$lang['new_required_attrs_instructions'] = 'Anleitung: Um diese objectClass hinzuzuf¨gen müssen sie ';//'Instructions: In order to add this objectClass to this entry, you must specify'; -$lang['that_this_oclass_requires'] = 'die von dieser objectClass benötigt werden. Sie können dies in diesem Formular machen.';//'that this objectClass requires. You can do so in this form.'; -$lang['add_oclass_and_attrs'] = 'ObjectClass und Attribute hinzufügen';//'Add ObjectClass and Attributes'; +$lang['new_required_attrs_instructions'] = 'Anleitung: Um diese objectClass hinzuzufügen müssen sie ';//'Instructions: In order to add this objectClass to this entry, you must specify'; +$lang['that_this_oclass_requires'] = 'die von dieser objectClass benötigt werden. Sie können dies in diesem Formular machen.';//'that this objectClass requires. You can do so in this form.'; +$lang['add_oclass_and_attrs'] = 'ObjectClass und Attribute hinzufügen';//'Add ObjectClass and Attributes'; // General -$lang['chooser_link_tooltip'] = 'Klicken um einen Eintrag (DN) grafisch auszuwählen.';//"Click to popup a dialog to select an entry (DN) graphically'; -$lang['no_updates_in_read_only_mode'] = 'Sie können keine Aktualisierungen durchführen während der Server sich im \'nur lese\'-modus befindet';//'You cannot perform updates while server is in read-only mode'; -$lang['bad_server_id'] = 'Ungültige Server ID';//'Bad server id'; -$lang['not_enough_login_info'] = 'Nicht genügend Angaben zur Anmeldung am Server. Bitte überprüfen sie ihre Konfiguration';//'Not enough information to login to server. Please check your configuration.'; +$lang['chooser_link_tooltip'] = 'Klicken um einen Eintrag (DN) grafisch auszuwählen.';//"Click to popup a dialog to select an entry (DN) graphically'; +$lang['no_updates_in_read_only_mode'] = 'Sie können keine Aktualisierungen durchführen während der Server sich im \'nur lese\'-modus befindet';//'You cannot perform updates while server is in read-only mode'; +$lang['bad_server_id'] = 'Ungültige Server ID';//'Bad server id'; +$lang['not_enough_login_info'] = 'Nicht genügend Angaben zur Anmeldung am Server. Bitte überprüfen sie ihre Konfiguration';//'Not enough information to login to server. Please check your configuration.'; $lang['could_not_connect'] = 'Konnte keine Verbindung zum LDAP Server herstellen.';//'Could not connect to LDAP server.'; -$lang['could_not_perform_ldap_mod_add'] = 'Kann keine \'ldap_mod_add\' Operationen durchführen.';//'Could not perform ldap_mod_add operation.'; -$lang['bad_server_id_underline'] = 'Ungültige Server ID:';//"Bad server_id: '; +$lang['could_not_connect_to_host_on_port'] = 'Konnte keine Verbindung zum Server "%s" am Port "%s" erstellen.';//'Could not connect to "%s" on port "%s"'; +$lang['could_not_perform_ldap_mod_add'] = 'Kann keine \'ldap_mod_add\' Operationen durchführen.';//'Could not perform ldap_mod_add operation.'; +$lang['bad_server_id_underline'] = 'Ungültige Server ID:';//"Bad server_id: '; $lang['success'] = 'Erfolgreich';//"Success'; $lang['server_colon_pare'] = 'Server';//"Server: '; $lang['look_in'] = 'Sehe nach in:';//"Looking in: '; $lang['missing_server_id_in_query_string'] = 'Keine Server ID in der Anfrage angegeben';//'No server ID specified in query string!'; $lang['missing_dn_in_query_string'] = 'Kein DN in der Anfrage angegeben';//'No DN specified in query string!'; -$lang['back_up_p'] = 'Backup...';//"Back Up...'; -$lang['no_entries'] = 'Keine Einträge';//"no entries'; +$lang['back_up_p'] = 'Eine Ebene höher...';//"Back Up...'; +$lang['no_entries'] = 'Keine Einträge';//"no entries'; $lang['not_logged_in'] = 'Nicht eingeloggt';//"Not logged in'; $lang['could_not_det_base_dn'] = 'Konnten Basis-DN nicht ermitteln.';//"Could not determine base DN'; +$lang['reasons_for_error']='Dies kann mehrere Gründe haben. Die häufigsten sind:';//'This could happen for several reasons, the most probable of which are:'; +$lang['please_report_this_as_a_bug']='Bitte senden Sie dies als einen Fehlerbericht.';//'Please report this as a bug.'; +$lang['yes']='Ja';//'Yes' +$lang['no']='Nein';//'No' +$lang['go']='Weiter';//'go' +$lang['delete']='Löschen';//'Delete'; +$lang['back']='Zurück';//'Back'; +$lang['object']='Objekt';//'object'; +//$lang['objects']='Objekte';//'objects'; +$lang['delete_all']='Lösche alle';//'Delete all'; +$lang['url_bug_report']=''+$lang['url_bug_report'];//'https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; +$lang['hint'] = 'Hinweis';//'hint'; +$lang['bug'] = 'Programmfehler';//'bug'; +$lang['warning'] = 'Warnung';//'warning'; +$lang['light'] = 'light'; // the word 'light' from 'light bulb' +$lang['proceed_gt'] = 'Weiter';//'Proceed >>'; // Add value form -$lang['add_new'] = 'Neu hinzufügen';//'Add new'; +$lang['add_new'] = 'Neu hinzufügen';//'Add new'; $lang['value_to'] = 'Wert auf';//'value to'; -$lang['server'] = 'Server';//'Server'; //also used in copy_form.php $lang['distinguished_name'] = 'Distinguished Name (eindeutiger Name)';// 'Distinguished Name'; $lang['current_list_of'] = 'Aktuelle Liste von';//'Current list of'; $lang['values_for_attribute'] = 'Werte des Attributes';//'values for attribute'; -$lang['inappropriate_matching_note'] = 'Info: Sie werden einen "inappropriate matching" Fehler erhalten, falls sie nicht
'; //'Note: You will get an "inappropriate matching" error if you have not
' . - 'eine EQUALITY Regel für dieses Attribut auf ihren LDAP Server eingerichtet haben.';//'setup an EQUALITY rule on your LDAP server for this attribute.'; -$lang['enter_value_to_add'] = 'Geben sie den Wert ein den sie hinzufügen möchten:';//'Enter the value you would like to add:'; -$lang['new_required_attrs_note'] = 'Info: Sie werden gegebenenfalles gezwungen sein neue Attribute hinzuzufügen.';//'Note: you may be required to enter new attributes
that this objectClass requires.'; +$lang['inappropriate_matching_note'] = 'Info: Sie werden einen "inappropriate matching" Fehler erhalten, falls sie nicht'; //'Note: You will get an "inappropriate matching" error if you have not
' . + ' eine "EQUALITY" Regel für dieses Attribut auf ihren LDAP Server eingerichtet haben.';//'setup an EQUALITY rule on your LDAP server for this attribute.'; +$lang['enter_value_to_add'] = 'Geben sie den Wert ein den sie hinzufügen möchten:';//'Enter the value you would like to add:'; +$lang['new_required_attrs_note'] = 'Info: Sie werden gegebenenfalles gezwungen sein neue Attribute hinzuzufügen.';//'Note: you may be required to enter new attributes
that this objectClass requires.'; $lang['syntax'] = 'Syntax';//'Syntax'; //Copy.php -$lang['copy_server_read_only'] = 'Sie können keine Aktualisierungen durchführen während der Server sich im \'nur lese\'-modus befindet';//"You cannot perform updates while server is in read-only mode'; +$lang['copy_server_read_only'] = 'Sie können keine Aktualisierungen durchführen während der Server sich im \'nur lese\'-modus befindet';//"You cannot perform updates while server is in read-only mode'; $lang['copy_dest_dn_blank'] = 'Sie haben kein Ziel DN angegeben';//"You left the destination DN blank.'; $lang['copy_dest_already_exists'] = 'Der Zieleintrag (%s) existiert bereits.';//"The destination entry (%s) already exists.'; $lang['copy_dest_container_does_not_exist'] = 'Der Zielcontainer (%s) existiert nicht.';//'The destination container (%s) does not exist.'; @@ -186,6 +295,15 @@ $lang['copy_failed'] = 'Kopieren des DN fehlgeschlagen: ';//'Failed to copy DN: //edit.php $lang['missing_template_file'] = 'Warnung: Template Datei nicht gefunden';//'Warning: missing template file, '; $lang['using_default'] = 'Standardeinstellung verwenden';//'Using default.'; +$lang['template'] = 'Vorlage';//'Template'; +$lang['must_choose_template'] = 'Eine Vorlage muss ausgewählt sein';//'You must choose a template'; +$lang['invalid_template'] = 'Die Vorlage "%s" ist ungültig';// '%s is an invalid template'; +$lang['using_template'] = 'Verwende Vorlage';//'using template'; +$lang['go_to_dn'] = 'Gehe zu %s';//'Go to %s'; +$lang['structural_object_class_cannot_remove'] = 'Dies ist eine strukturelle Objektklasse und kann nicht entfernt werden.';//'This is a stuctural ObjectClass and cannot be removed.'; +$lang['structural'] = 'Strukturell';//'stuctural'; + + //copy_form.php $lang['copyf_title_copy'] = 'Kopiere';//"Copy '; @@ -195,111 +313,144 @@ $lang['copyf_dest_dn_tooltip'] = 'Der komplette DN des Eintrages der beim Kopier $lang['copyf_dest_server'] = 'Zielserver';//"Destination Server'; $lang['copyf_note'] = 'Info: Kopieren zwischen unterschiedlichen Servern funktioniert nur wenn keine Unvereinbarkeiten im Schema auftreten';//"Note: Copying between different servers only works if there are no schema violations'; $lang['copyf_recursive_copy'] = 'Rekursiv kopiert auch alle Unterobjekte';//"Recursively copy all children of this object as well.'; +$lang['recursive_copy'] = 'Rekursives kopieren';//'Recursive copy'; +$lang['filter'] = 'Filter';//'Filter'; +$lang['filter_tooltip'] = 'Bei der Ausfürung des rekursiven Kopierens werden nur die Einträge verwendet, die mit dem Filter übereinstimmen';// 'When performing a recursive copy, only copy those entries which match this filter'; + //create.php -$lang['create_required_attribute'] = 'Fehler, sie haben einen Wert für ein benötigtes Attribut frei gelassen.';//"Error, you left the value blank for required attribute '; -$lang['create_redirecting'] = 'Weiterleitung';//"Redirecting'; -$lang['create_here'] = 'hier';//"here'; -$lang['create_could_not_add'] = 'Konnte das Objekt dem LDAP-Server nicht hinzufügen.';//"Could not add the object to the LDAP server.'; +$lang['create_required_attribute'] = 'Fehler, sie haben einen Wert für ein benötigtes Attribut frei gelassen.';//"Error, you left the value blank for required attribute '; +$lang['redirecting'] = 'Weiterleitung';//"Redirecting'; moved from create_redirection -> redirection +$lang['here'] = 'hier';//"here'; renamed vom create_here -> here +$lang['create_could_not_add'] = 'Konnte das Objekt dem LDAP-Server nicht hinzufügen.';//"Could not add the object to the LDAP server.'; //create_form.php $lang['createf_create_object'] = 'Erzeuge einen neuen Eintag';//"Create Object'; -$lang['createf_choose_temp'] = 'Vorlage wählen';//"Choose a template'; -$lang['createf_select_temp'] = 'Wählen sie eine Vorlage für das Objekt';//"Select a template for the creation process'; +$lang['createf_choose_temp'] = 'Vorlage wählen';//"Choose a template'; +$lang['createf_select_temp'] = 'Wählen sie eine Vorlage für das Objekt';//"Select a template for the creation process'; $lang['createf_proceed'] = 'Weiter';//"Proceed >>'; +$lang['rdn_field_blank'] = 'Das RDN Feld wurde leer gelassen.';//'You left the RDN field blank.'; +$lang['container_does_not_exist'] = 'Der angegenben Eintrag (%s) ist nicht vorhanden. Bitte erneut versuchen.';// 'The container you specified (%s) does not exist. Please try again.'; +$lang['no_objectclasses_selected'] = 'Es wurde kein ObjectClasses für diesen Eintrag ausgewählt. Bitte zurückgehen und korrigieren';//'You did not select any ObjectClasses for this object. Please go back and do so.'; +$lang['hint_structural_oclass'] = 'Hinweis: Es muss mindestens ein Strukturelle ObjectClass ausgewählt sein.';//'Hint: You must choose at least one structural objectClass'; //creation_template.php $lang['ctemplate_on_server'] = 'Auf dem Server';//"On server'; $lang['ctemplate_no_template'] = 'Keine Vorlage angegeben in den POST Variabeln';//"No template specified in POST variables.'; -$lang['ctemplate_config_handler'] = 'Ihre Konfiguration spezifiziert für diese Vorlage die Routine';//"Your config specifies a handler of'; +$lang['ctemplate_config_handler'] = 'Ihre Konfiguration spezifiziert für diese Vorlage die Routine';//"Your config specifies a handler of'; $lang['ctemplate_handler_does_not_exist'] = '. Diese Routine existiert nicht im \'templates/creation\' Verzeichnis';//"for this template. But, this handler does not exist in the 'templates/creation' directory.'; +$lang['create_step1'] = 'Schritt 1 von 2: Name und Objektklasse(n)';//'Step 1 of 2: Name and ObjectClass(es)'; +$lang['create_step2'] = 'Schritt 2 von 2: Bestimmen der Attribute und Werte';//'Step 2 of 2: Specify attributes and values'; +$lang['relative_distinguished_name'] = 'Relativer Distingushed Name';//'Relative Distinguished Name'; +$lang['rdn'] = 'RDN';//'RDN'; +$lang['rdn_example'] = '(Beispiel: cn=MeineNeuePerson)';//'(example: cn=MyNewPerson)'; +$lang['container'] = 'Behälter';//'Container'; + // search.php -$lang['you_have_not_logged_into_server'] = 'Sie haben sich am ausgewählten Server nicht angemeldet. Sie k&oouml;nnen keine Suche durchführen.';//'You have not logged into the selected server yet, so you cannot perform searches on it.'; +$lang['you_have_not_logged_into_server'] = 'Sie haben sich am ausgewählten Server nicht angemeldet. Sie können keine Suche durchführen.';//'You have not logged into the selected server yet, so you cannot perform searches on it.'; $lang['click_to_go_to_login_form'] = 'Klicken sie hier um zur Anmeldeseite zu gelangen';//'Click here to go to the login form'; $lang['unrecognized_criteria_option'] = 'Unbekannte Option';// 'Unrecognized criteria option: '; -$lang['if_you_want_to_add_criteria'] = 'Falls eigene Auswahlkriterien hinzugefügt werden sollen, muss \'search.php\' editiert werden';//'If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting.'; -$lang['entries_found'] = 'Gefundene Einträge: ';//'Entries found: '; +$lang['if_you_want_to_add_criteria'] = 'Falls eigene Auswahlkriterien hinzugefügt werden sollen, muss \'search.php\' editiert werden';//'If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting.'; +$lang['entries_found'] = 'Gefundene Einträge: ';//'Entries found: '; $lang['filter_performed'] = 'Angewanter Filter: ';//'Filter performed: '; -$lang['search_duration'] = 'Suche durch phpLDAPadmin ausgeführt in';//'Search performed by phpLDAPadmin in'; +$lang['search_duration'] = 'Suche durch phpLDAPadmin ausgeführt in';//'Search performed by phpLDAPadmin in'; $lang['seconds'] = 'Sekunden';//'seconds'; // search_form_advanced.php $lang['scope_in_which_to_search'] = 'Bereich der durchsucht wird.';//'The scope in which to search'; -$lang['scope_sub'] = 'Sub (Suchbase und alle Unterverzeichnisebenen)';//'Sub (entire subtree)'; +$lang['scope_sub'] = 'Sub (Suchbasis und alle Unterverzeichnisebenen)';//'Sub (entire subtree)'; $lang['scope_one'] = 'One (Suchbasis und eine Unterverzeichnisebene)';//'One (one level beneath base)'; $lang['scope_base'] = 'Base (Nur Suchbasis)';//'Base (base dn only)'; $lang['standard_ldap_search_filter'] = 'Standard LDAP Suchfilter. Bsp.: (&(sn=Smith)(givenname=David))';//'Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))'; $lang['search_filter'] = 'Suchfilter';//'Search Filter'; $lang['list_of_attrs_to_display_in_results'] = 'Kommaseparierte Liste der anzuzeigenden Attribute.';//'A list of attributes to display in the results (comma-separated)'; -$lang['show_attributes'] = 'Zeige Attribute';//'Show Attributes'; // search_form_simple.php -$lang['search_for_entries_whose'] = 'Suche nach Einträgen welche:';//'Search for entries whose:'; -$lang['equals'] = 'entspricht';//'equals'; $lang['starts with'] = 'beginnt mit';//'starts with'; -$lang['contains'] = 'enthält';//'contains'; $lang['ends with'] = 'endet auf';//'ends with'; $lang['sounds like'] = 'klingt wie';//'sounds like'; + // server_info.php $lang['could_not_fetch_server_info'] = 'Konnte keine LDAP Informationen vom Server empfangen';//'Could not retrieve LDAP information from the server'; -$lang['server_info_for'] = 'Serverinformationen für: ';//'Server info for: '; -$lang['server_reports_following'] = 'Der Server meldete die folgenden Informationen über sich';//'Server reports the following information about itself'; +$lang['server_info_for'] = 'Serverinformationen für: ';//'Server info for: '; +$lang['server_reports_following'] = 'Der Server meldete die folgenden Informationen über sich';//'Server reports the following information about itself'; $lang['nothing_to_report'] = 'Der Server hat keine Informationen gemeldet';//'This server has nothing to report.'; //update.php -$lang['update_array_malformed'] = 'Das \'update_array\' wird falsch dargestellt. Dies könnte ein phpLDAPadmin Fehler sein. Bitte Berichten sie uns davon.';//'update_array is malformed. This might be a phpLDAPadmin bug. Please report it.'; -$lang['could_not_perform_ldap_modify'] = 'Konnte die \'ldap_modify\' Operation nicht ausführen.';//'Could not perform ldap_modify operation.'; +$lang['update_array_malformed'] = 'Das "update_array" wird falsch dargestellt. Dies könnte ein phpLDAPadmin Fehler sein. Bitte Berichten sie uns davon.';//'update_array is malformed. This might be a phpLDAPadmin bug. Please report it.'; +$lang['could_not_perform_ldap_modify'] = 'Konnte die \'ldap_modify\' Operation nicht ausführen.';//'Could not perform ldap_modify operation.'; // update_confirm.php -$lang['do_you_want_to_make_these_changes'] = 'Wollen sie diese Änderungen übernehmen?';//'Do you want to make these changes?'; +$lang['do_you_want_to_make_these_changes'] = 'Wollen sie diese Änderungen übernehmen?';//'Do you want to make these changes?'; $lang['attribute'] = 'Attribute';//'Attribute'; $lang['old_value'] = 'Alter Wert';//'Old Value'; $lang['new_value'] = 'Neuer Wert';//'New Value'; -$lang['attr_deleted'] = '[Wert gelöscht]';//'[attribute deleted]'; +$lang['attr_deleted'] = '[Wert gelöscht]';//'[attribute deleted]'; $lang['commit'] = 'Anwenden';//'Commit'; -$lang['cancel'] = 'Verwerfen';//'Cancel'; -$lang['you_made_no_changes'] = 'Sie haben keine Änderungen vorgenommen.';//'You made no changes'; -$lang['go_back'] = 'Zurück';//'Go back'; +$lang['cancel'] = 'Abbruch';//'Cancel'; +$lang['you_made_no_changes'] = 'Sie haben keine Änderungen vorgenommen.';//'You made no changes'; +$lang['go_back'] = 'Zurück';//'Go back'; // welcome.php -$lang['welcome_note'] = 'Benützen sie das Menu auf der linken Seite zur Navigation.';//'Use the menu to the left to navigate'; +$lang['welcome_note'] = 'Benutzen sie das Menu auf der linken Seite zur Navigation.';//'Use the menu to the left to navigate'; $lang['credits'] = 'Vorspann';//'Credits'; -$lang['changelog'] = 'Änderungsdatei';//'ChangeLog'; -$lang['documentation'] = 'Dokumentation';// 'Documentation'; +$lang['changelog'] = 'Änderungsdatei';//'ChangeLog'; +//$lang['documentation'] = 'Dokumentation';// 'Documentation'; +$lang['donate'] = 'Spende';//'Donate'; + +$lang['purge_cache'] = 'Cache bereinigen';//'Purge caches'; +$lang['no_cache_to_purge'] = 'Kein Cache zu bereinigen';//'No cache to purge.'; +$lang['done_purging_caches'] = 'Es wurden %s Bytes aus dem Cache bereinigt.';//'Purged %s bytes of cache.'; + + // view_jpeg_photo.php $lang['unsafe_file_name'] = 'Unsicherer Dateiname:';//'Unsafe file name: '; $lang['no_such_file'] = 'Keine Datei unter diesem Namen';//'No such file: '; //function.php -$lang['auto_update_not_setup'] = 'auto_uid_numbers wurde in der Konfiguration (%s aktiviert, aber der Mechanismus (auto_uid_number_mechanism) nicht. Bitte diese Problem korrigieren.';//"You have enabled auto_uid_numbers for %s in your configuration, but you have not specified the auto_uid_number_mechanism. Please correct this problem.'; -$lang['uidpool_not_set'] = 'Der Mechanismus auto_uid_number_mechanism ist als uidpool für den Server %s festgelegt, jedoch wurde nicht der auto_uid_number_uid_pool_dn festgelegt. Bitte korrigieren und dann weiter verfahren.';//"You specified the auto_uid_number_mechanism as uidpool in your configuration for server %s, but you did not specify the audo_uid_number_uid_pool_dn. Please specify it before proceeding.'; +$lang['auto_update_not_setup'] = '"auto_uid_numbers" wurde in der Konfiguration (%s) aktiviert, aber der Mechanismus (auto_uid_number_mechanism) nicht. Bitte diese Problem korrigieren.';//"You have enabled auto_uid_numbers for %s in your configuration, but you have not specified the auto_uid_number_mechanism. Please correct this problem.'; +$lang['uidpool_not_set'] = 'Der Mechanismus "auto_uid_number_mechanism" ist als "uidpool" für den Server (%s) festgelegt, jedoch wurde nicht der "auto_uid_number_uid_pool_dn" festgelegt. Bitte korrigieren und dann weiter verfahren.';//"You specified the auto_uid_number_mechanism as uidpool in your configuration for server %s, but you did not specify the audo_uid_number_uid_pool_dn. Please specify it before proceeding.'; -$lang['uidpool_not_exist'] = 'Es scheint so, dass der uidPool - der in der Konfiguration festgelegt ist - nicht vorhanden ist.';//"It appears that the uidPool you specified in your configuration (%s) does not exist.'; +$lang['uidpool_not_exist'] = 'Es scheint so, dass der "uidPool" - der in der Konfiguration festgelegt ist - nicht vorhanden ist.';//"It appears that the uidPool you specified in your configuration (%s) does not exist.'; -$lang['specified_uidpool'] = 'Der auto_uid_number_mechanism wurde auf search in der Konfiguration des Servers %s festgelegt, aber es wurde der Wert fü auto_uid_number_search_base nicht gesetzt. Bitte korrigieren und dann weiter verfahren.';//"You specified the auto_uid_number_mechanism as search in your configuration for server %s, but you did not specify the auto_uid_number_search_base. Please specify it before proceeding.'; +$lang['specified_uidpool'] = 'Der "auto_uid_number_mechanism" wurde auf "search" in der Konfiguration des Servers (%s) festgelegt, aber es wurde der Wert fü "auto_uid_number_search_base" nicht gesetzt. Bitte korrigieren und dann weiter verfahren.';//"You specified the auto_uid_number_mechanism as search in your configuration for server %s, but you did not specify the auto_uid_number_search_base. Please specify it before proceeding.'; +$lang['bad_auto_uid_search_base'] = 'Die phpLDAPadmin Konfiguration für den Server "%s" gibt eine ungültige Suchbasis für "auto_uid_search_base" an.';//'Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s'; +$lang['auto_uid_invalid_credential'] = 'Konnte nicht mit "%s" verbinden';// 'Unable to bind to %s with your with auto_uid credentials. Please check your configuration file.'; +$lang['auto_uid_invalid_value'] = 'Es wurde ein ungültiger Wert für "auto_uid_number_mechanism" (%s) festgelegt. Gültig sind nur die Werte "uidpool" und "search". Bitte den Fehler korrigieren. ';//"You specified an invalid value for auto_uid_number_mechanism (%s) in your configration. Only uidpool and search are valid. Please correct this problem.'; -$lang['auto_uid_invalid_value'] = 'Es wurde ein ungültiger Wert für auto_uid_number_mechanism(%s) festgelegt. Gültig sind nur die Werte uidpool und search. Bitte den Fehler korrigieren. ';//"You specified an invalid value for auto_uid_number_mechanism (%s) in your configration. Only uidpool and search are valid. Please correct this problem.'; +$lang['error_auth_type_config'] = 'Fehler: Ein Fehler ist in der Konfiguration (config.php) aufgetreten. Die einzigen beiden erlaubten Werte im Konfigurationsteil "auth_type" zu einem LDAP-Server ist "config" oder "form". Eingetragen ist aber "%s", was nicht erlaubt ist.';//"Error: You have an error in your config file. The only two allowed values for 'auth_type' in the $servers section are 'config' and 'form'. You entered '%s', which is not allowed. '; -$lang['error_auth_type_config'] = 'Fehler: Ein Fehler ist in der Konfiguration (config.php) aufgetreten. Die einzigen beiden erlaubten Werte im Konfigurationsteil \'auth_type\' zu einem LDAP-Server ist \'config\' oder \'form\'. Eingetragen ist aber %s, was nicht erlaubt ist.';//"Error: You have an error in your config file. The only two allowed values for 'auth_type' in the $servers section are 'config' and 'form'. You entered '%s', which is not allowed. '; +$lang['unique_attrs_invalid_credential'] = 'Es konnten nicht an "%s" mit dem Berechtigungsnachweis von "unique_attrs" verbunden werden. Bitte die Konfigurationdatei (config.php) überprüfen.';//'Unable to bind to %s with your with unique_attrs credentials. Please check your configuration file.'; +$lang['unique_attr_failed'] = 'Der Versuch von "%s" (%s) an "%s%" ist nicht erlaubt. Das Attibut/Wert gehört zu einem anderen Eintrag. Vielleicht möchten Sie nach dem Wert suchen?';// ERROR DONT'T USE HTML!!! //'Your attempt to add %s (%s) to
%s
is NOT allowed. That attribute/value belongs to another entry.

You might like to search for that entry.'; -$lang['php_install_not_supports_tls'] = 'Die verwendete PHP-Version unterstützt kein TLS (verschlüsselte Verbindung).';//"Your PHP install does not support TLS'; -$lang['could_not_start_tls'] = 'TLS konnte nicht gestartet werden.
Bitte die LDAP-Server-Konfiguration überprüfen.';//"Could not start TLS.
Please check your LDAP server configuration.'; -$lang['auth_type_not_valid'] = 'Die Konfigurationsdatei enthält einen Fehler. Der Eintrag für \'auth_type\' %s ist nicht gü,ltig';// 'You have an error in your config file. auth_type of %s is not valid.'; -$lang['ldap_said'] = 'LDAP meldet: %s

';//"LDAP said: %s

'; + +$lang['php_install_not_supports_tls'] = 'Die verwendete PHP-Version unterstützt kein TLS (verschlüsselte Verbindung).';//"Your PHP install does not support TLS'; +$lang['could_not_start_tls'] = 'TLS konnte nicht gestartet werden. Bitte die LDAP-Server-Konfiguration überprüfen.';//"Could not start TLS.
Please check your LDAP server configuration.'; +$lang['could_not_bind_anon'] = 'Konnte keine Anonymous Anmeldung zum Server herstellen.';//'Could not bind anonymously to server.'; +$lang['could_not_bind'] = 'Konnte keine Verbindung zum LDAP-Server herstellen';//'Could not bind to the LDAP server.'; +//$lang['anon_required_for_login_attr'] = 'Bei der Verwendung des Anmeldeprozedur "login_attr" muss der Server Anonymous Anmelden zulassen.';//'When using the login_attr feature, the LDAP server must support anonymous binds.'; +$lang['anonymous_bind'] = 'Anonymous anmelden';//'Anonymous Bind'; +//$lang['auth_type_not_valid'] = 'Die Konfigurationsdatei enthält einen Fehler. Der Eintrag für \'auth_type\' mit \'%s\' ist nicht gültig';// 'You have an error in your config file. auth_type of %s is not valid.'; +$lang['bad_user_name_or_password'] = 'Falscher Benutzername oder Passwort. Bitte erneut versuchen.';//'Bad username or password. Please try again.'; +$lang['redirecting_click_if_nothing_happens'] = 'Automatische Umleitung. Falls dies nicht automatisch erfolgt dann hier klicken.';//'Redirecting... Click here if nothing happens.'; +$lang['successfully_logged_in_to_server'] = 'Erfolgreich am Server %s angemeldet';//'Successfully logged into server %s'; +$lang['could_not_set_cookie'] = 'Konnte kein \'Cookie\' setzten.';//'Could not set cookie.'; +$lang['ldap_said'] = 'LDAP meldet: %s';//"LDAP said: %s

'; $lang['ferror_error'] = 'Fehler';//"Error'; -$lang['fbrowse'] = 'Überfliegen';//"browse'; -$lang['delete_photo'] = 'Lösche Foto';//"Delete Photo'; -$lang['install_not_support_blowfish'] = 'Die verwendete PHP-Version unterstützt keine Blowfish Verschlüsselung.';//"Your PHP install does not support blowfish encryption.'; -$lang['install_no_mash'] = 'Die verwendete PHP-Version unterstützt nicht die Funktion mhash(), daher kann kein SHA Hash verwendet werden.';// "Your PHP install does not have the mhash() function. Cannot do SHA hashes.'; -$lang['jpeg_contains_errors'] = 'Die Bilddatei enthält Fehler';//"jpegPhoto contains errors
'; -$lang['ferror_number'] = 'Fehlernummer: %s(%s)

';//"Error number: %s (%s)

'; -$lang['ferror_discription'] ='Beschreibung: %s

';// "Description: %s

'; -$lang['ferror_number_short'] = 'Fehlernummer:%s

';//"Error number: %s

'; -$lang['ferror_discription_short'] = 'Beschreibung: (keine Beschreibung verfügbar)
';//"Description: (no description available)
'; -$lang['ferror_submit_bug'] = 'Ist das ein phpLDAPadmin Fehler? Wenn dies so ist, dann bitte darüber berichten';//"Is this a phpLDAPadmin bug? If so, please report it.'; +$lang['fbrowse'] = 'Ãœberfliegen';//"browse'; +$lang['delete_photo'] = 'Lösche Foto';//"Delete Photo'; +$lang['install_not_support_blowfish'] = 'Die verwendete PHP-Version unterstützt keine Blowfish Verschlüsselung.';//"Your PHP install does not support blowfish encryption.'; +$lang['install_not_support_md5crypt'] = 'Die eingesetzte PHP-Version unterstützt keine MD5-Verschlüsselung.';//'Your PHP install does not support md5crypt encryption.'; +$lang['install_no_mash'] = 'Die verwendete PHP-Version unterstützt nicht die Funktion mhash(), daher kann kein SHA Hash verwendet werden.';// "Your PHP install does not have the mhash() function. Cannot do SHA hashes.'; +$lang['jpeg_contains_errors'] = 'Die Bilddatei enthält Fehler';//"jpegPhoto contains errors
'; +$lang['ferror_number'] = 'Fehlernummer: %s (%s)';//"Error number: %s (%s)

'; +$lang['ferror_discription'] ='Beschreibung: %s';// "Description: %s

'; +$lang['ferror_number_short'] = 'Fehlernummer: %s';//"Error number: %s

'; +$lang['ferror_discription_short'] = 'Beschreibung: (keine Beschreibung verfügbar)';//"Description: (no description available)
'; +$lang['ferror_submit_bug'] = 'Ist das ein phpLDAPadmin Fehler? Wenn dies so ist, dann bitte darüber berichten';//"Is this a phpLDAPadmin bug? If so, please report it.'; $lang['ferror_unrecognized_num'] = 'Unbekannte Fehlernummer:';//"Unrecognized error number: '; $lang['ferror_nonfatil_bug'] = '

Ein nicht fataler Fehler in phpLDAPadmin gefunden!
Fehler:%s (%s)
Datei:%sZeile:%s, aufgerufen von %s
Version:PLA: %s, PHP: %s, SAPI: %s
Web server:%s
Bitte diesen Fehler melden (durch anklicken)..

';//"
You found a non-fatal phpLDAPadmin bug!
Error:%s (%s)
File:%s line %s, caller %s
Versions:PLA: %s, PHP: %s, SAPI: %s
Web server:%s
Please report this bug by clicking here.

'; @@ -308,22 +459,109 @@ $lang['ferror_congrats_found_bug'] = '
%s'; +$lang['authenticate_to_server'] = 'Authentifizierung mit Server %s';//'Authenticate to server %s'; +$lang['warning_this_web_connection_is_unencrypted'] = 'Achtung: Diese Webverbindung ist unverschlüsselt.';//'Warning: This web connection is unencrypted.'; +$lang['not_using_https'] = 'Es wird keine verschlüsselte Verbindung (\'https\') verwendet. Der Webbrowser übermittelt die Anmeldeinformationen im Klartext.';// 'You are not use \'https\'. Web browser will transmit login information in clear text.'; +$lang['login_dn'] = 'Anmelde DN';//'Login DN'; +$lang['user_name'] = 'Benutzername';//'User name'; +$lang['password'] = 'Passwort';//'Password'; +$lang['authenticate'] = 'Authentifizierung';//'Authenticate'; + +// Entry browser +$lang['entry_chooser_title'] = 'Einträge auswählen';//'Entry Chooser'; + +// Index page +$lang['need_to_configure'] = 'phpLDAPadmin muss konfiguriert werden. Bitte die Datei "config.php" erstellen. Ein Beispiel einer "config.php" liegt als Datei "config.php.example" bei.';// ';//'You need to configure phpLDAPadmin. Edit the file \'config.php\' to do so. An example config file is provided in \'config.php.example\''; + +// Mass deletes +$lang['no_deletes_in_read_only'] = 'Löschen ist im Nur-Lese-Modus nicht erlaubt.';//'Deletes not allowed in read only mode.'; +$lang['error_calling_mass_delete'] = 'Fehler im Aufruf von "mass_delete.php". "mass_delete" ist in den POST-Variablen nicht vorhanden.';//'Error calling mass_delete.php. Missing mass_delete in POST vars.'; +$lang['search_attrs_wrong_count'] = 'Die config.php beinhaltet einen fehlerhaften Eintrag. Die anzahl der Attribute in $search_attributes und $search_attributes_diplay ist unterschiedlich';//'Your config.php has an error. The number of attributes in $search_attributes and $search_attributes_display is different'; +$lang['mass_delete_not_array'] = 'Die POST-Variable "mass_delete" ist kein Array.';//'mass_delete POST var is not an array.'; +$lang['mass_delete_not_enabled'] = '"Viel-Löschen" ist nicht aktiviert. Bitte in der der "config.php" aktivieren vor dem Weitermachen.';//'Mass deletion is not enabled. Please enable it in config.php before proceeding.'; +$lang['mass_deleting'] = 'Viel-Löschen';//'Mass Deleting'; +$lang['mass_delete_progress'] = 'Löschprozess auf Server "%s"';//'Deletion progress on server "%s"'; +$lang['malformed_mass_delete_array'] = 'Das Array "mass_delete" ist falsch dargestellt.';//'Malformed mass_delete array.'; +$lang['no_entries_to_delete'] = 'Es wurde kein zu löschender Eintrag ausgewählt.';//'You did not select any entries to delete.'; +$lang['deleting_dn'] = 'Lösche "%s"';//'Deleting %s'; +$lang['total_entries_failed'] = '%s von %s Einträgen konnten nicht gelöscht werden.';//'%s of %s entries failed to be deleted.'; +$lang['all_entries_successful'] = 'Alle Einträge wurden erfolgreich gelöscht.';//'All entries deleted successfully.'; +$lang['confirm_mass_delete'] = 'Bitte das Löschen von %s Einträgen auf dem Server %s bestätigen';//'Confirm mass delete of %s entries on server %s'; +$lang['yes_delete'] = 'Ja, Löschen!';//'Yes, delete!'; + + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'Das Umbenennen von einem Eintrag mit Untereinträgen ist nicht Möglich. Es ist nur auf den Untersten Einträgen gestattet.';// 'You cannot rename an entry which has children entries (eg, the rename operation is not allowed on non-leaf entries)'; +$lang['no_rdn_change'] = 'Der RDN wurde nicht verändert';//'You did not change the RDN'; +$lang['invalid_rdn'] = 'Ungültiger RDN Wert';//'Invalid RDN value'; +$lang['could_not_rename'] = 'Der Eintrag konnte nicht umbenannt werden';//'Could not rename the entry'; + + ?> diff --git a/lang/recoded/en.php b/lang/recoded/en.php index bba4041..64a5fee 100644 --- a/lang/recoded/en.php +++ b/lang/recoded/en.php @@ -1,14 +1,18 @@ DN'; +$lang['base_dn'] = 'Base DN'; $lang['search_scope'] = 'Search Scope'; -$lang['search_ filter'] = 'Search Filter'; $lang['show_attributes'] = 'Show Attributtes'; +$lang['attributes'] = 'Attributes'; $lang['Search'] = 'Search'; -$lang['equals'] = 'equals'; -$lang['starts_with'] = 'starts with'; -$lang['contains'] = 'contains'; -$lang['ends_with'] = 'ends with'; -$lang['sounds_like'] = 'sounds like'; +$lang['predefined_search_str'] = 'Select a predefined search'; +$lang['predefined_searches'] = 'Predefined Searches'; +$lang['no_predefined_queries'] = 'No queries have been defined in config.php.'; +$lang['export_results'] = 'export results'; +$lang['unrecoginzed_search_result_format'] = 'Unrecognized search result format: %s'; +$lang['format'] = 'Format'; +$lang['list'] = 'list'; +$lang['table'] = 'table'; +$lang['bad_search_display'] = 'Your config.php specifies an invalid value for $default_search_display: %s. Please fix it'; +$lang['page_n'] = 'Page %d'; +$lang['no_results'] = 'The search found no results.'; // Tree browser -$lang['request_new_feature'] = 'Request a new feature'; -$lang['see_open_requests'] = 'see open requests'; +$lang['request_new_feature'] = 'Request feature'; $lang['report_bug'] = 'Report a bug'; -$lang['see_open_bugs'] = 'see open bugs'; $lang['schema'] = 'schema'; $lang['search'] = 'search'; $lang['create'] = 'create'; @@ -47,98 +55,166 @@ $lang['info'] = 'info'; $lang['import'] = 'import'; $lang['refresh'] = 'refresh'; $lang['logout'] = 'logout'; -$lang['create_new'] = 'Create New'; +$lang['create_new'] = 'Create new entry here'; $lang['view_schema_for'] = 'View schema for'; $lang['refresh_expanded_containers'] = 'Refresh all expanded containers for'; $lang['create_new_entry_on'] = 'Create a new entry on'; +$lang['new'] = 'new'; $lang['view_server_info'] = 'View server-supplied information'; $lang['import_from_ldif'] = 'Import entries from an LDIF file'; $lang['logout_of_this_server'] = 'Logout of this server'; $lang['logged_in_as'] = 'Logged in as: '; +$lang['this_base_dn_is_not_valid'] = 'This is not a valid DN.'; +$lang['this_base_dn_does_not_exist'] = 'This entry does not exist.'; $lang['read_only'] = 'read only'; +$lang['read_only_tooltip'] = 'This attribute has been flagged as read only by the phpLDAPadmin administrator'; $lang['could_not_determine_root'] = 'Could not determine the root of your LDAP tree.'; $lang['ldap_refuses_to_give_root'] = 'It appears that the LDAP server has been configured to not reveal its root.'; $lang['please_specify_in_config'] = 'Please specify it in config.php'; $lang['create_new_entry_in'] = 'Create a new entry in'; $lang['login_link'] = 'Login...'; +$lang['login'] = 'login'; +$lang['base_entry_does_not_exist'] = 'The base entry does not exist.'; +$lang['create_it'] = 'Create it?'; // Entry display $lang['delete_this_entry'] = 'Delete this entry'; $lang['delete_this_entry_tooltip'] = 'You will be prompted to confirm this decision'; $lang['copy_this_entry'] = 'Copy this entry'; $lang['copy_this_entry_tooltip'] = 'Copy this object to another location, a new DN, or another server'; -$lang['export_to_ldif'] = 'Export to LDIF'; -$lang['export_to_ldif_tooltip'] = 'Save an LDIF dump of this object'; -$lang['export_subtree_to_ldif_tooltip'] = 'Save an LDIF dump of this object and all of its children'; -$lang['export_subtree_to_ldif'] = 'Export subtree to LDIF'; -$lang['export_to_ldif_mac'] = 'Macintosh style line ends'; -$lang['export_to_ldif_win'] = 'Windows style line ends'; -$lang['export_to_ldif_unix'] = 'Unix style line ends'; +$lang['export'] = 'Export'; +$lang['export_lcase'] = 'export'; +$lang['export_tooltip'] = 'Save a dump of this object'; +$lang['export_subtree_tooltip'] = 'Save a dump of this object and all of its children'; +$lang['export_subtree'] = 'Export subtree'; $lang['create_a_child_entry'] = 'Create a child entry'; -$lang['add_a_jpeg_photo'] = 'Add a jpegPhoto'; $lang['rename_entry'] = 'Rename Entry'; $lang['rename'] = 'Rename'; $lang['add'] = 'Add'; $lang['view'] = 'View'; -$lang['add_new_attribute'] = 'Add New Attribute'; -$lang['add_new_attribute_tooltip'] = 'Add a new attribute/value to this entry'; -$lang['internal_attributes'] = 'Internal Attributes'; +$lang['view_one_child'] = 'View 1 child'; +$lang['view_children'] = 'View %s children'; +$lang['add_new_attribute'] = 'Add new attribute'; +$lang['add_new_objectclass'] = 'Add new ObjectClass'; $lang['hide_internal_attrs'] = 'Hide internal attributes'; $lang['show_internal_attrs'] = 'Show internal attributes'; -$lang['internal_attrs_tooltip'] = 'Attributes set automatically by the system'; -$lang['entry_attributes'] = 'Entry Attributes'; $lang['attr_name_tooltip'] = 'Click to view the schema defintion for attribute type \'%s\''; -$lang['click_to_display'] = 'click \'+\' to display'; -$lang['hidden'] = 'hidden'; $lang['none'] = 'none'; +$lang['no_internal_attributes'] = 'No internal attributes'; +$lang['no_attributes'] = 'This entry has no attributes'; $lang['save_changes'] = 'Save Changes'; $lang['add_value'] = 'add value'; $lang['add_value_tooltip'] = 'Add an additional value to attribute \'%s\''; $lang['refresh_entry'] = 'Refresh'; $lang['refresh_this_entry'] = 'Refresh this entry'; -$lang['delete_hint'] = 'Hint: To delete an attribute, empty the text field and click save.'; -$lang['attr_schema_hint'] = 'Hint: To view the schema for an attribute, click the attribute name.'; +$lang['delete_hint'] = 'Hint: To delete an attribute, empty the text field and click save.'; +$lang['attr_schema_hint'] = 'Hint: To view the schema for an attribute, click the attribute name.'; $lang['attrs_modified'] = 'Some attributes (%s) were modified and are highlighted below.'; $lang['attr_modified'] = 'An attribute (%s) was modified and is highlighted below.'; $lang['viewing_read_only'] = 'Viewing entry in read-only mode.'; -$lang['change_entry_rdn'] = 'Change this entry\'s RDN'; $lang['no_new_attrs_available'] = 'no new attributes available for this entry'; +$lang['no_new_binary_attrs_available'] = 'no new binary attributes available for this entry'; $lang['binary_value'] = 'Binary value'; -$lang['add_new_binary_attr'] = 'Add New Binary Attribute'; -$lang['add_new_binary_attr_tooltip'] = 'Add a new binary attribute/value from a file'; +$lang['add_new_binary_attr'] = 'Add new binary attribute'; $lang['alias_for'] = 'Note: \'%s\' is an alias for \'%s\''; +$lang['required_for'] = 'Required attribute for objectClass(es) %s'; $lang['download_value'] = 'download value'; $lang['delete_attribute'] = 'delete attribute'; $lang['true'] = 'true'; $lang['false'] = 'false'; $lang['none_remove_value'] = 'none, remove value'; $lang['really_delete_attribute'] = 'Really delete attribute'; +$lang['add_new_value'] = 'Add New Value'; // Schema browser -$lang['the_following_objectclasses'] = 'The following objectClasses are supported by this LDAP server.'; -$lang['the_following_attributes'] = 'The following attributeTypes are supported by this LDAP server.'; -$lang['the_following_matching'] = 'The following matching rules are supported by this LDAP server.'; -$lang['the_following_syntaxes'] = 'The following syntaxes are supported by this LDAP server.'; +$lang['the_following_objectclasses'] = 'The following objectClasses are supported by this LDAP server.'; +$lang['the_following_attributes'] = 'The following attributeTypes are supported by this LDAP server.'; +$lang['the_following_matching'] = 'The following matching rules are supported by this LDAP server.'; +$lang['the_following_syntaxes'] = 'The following syntaxes are supported by this LDAP server.'; +$lang['schema_retrieve_error_1']='The server does not fully support the LDAP protocol.'; +$lang['schema_retrieve_error_2']='Your version of PHP does not correctly perform the query.'; +$lang['schema_retrieve_error_3']='Or lastly, phpLDAPadmin doesn\'t know how to fetch the schema for your server.'; $lang['jump_to_objectclass'] = 'Jump to an objectClass'; -$lang['jump_to_attr'] = 'Jump to an attribute'; +$lang['view_schema_for_oclass'] = 'View the schema description for this objectClass'; +$lang['jump_to_attr'] = 'Jump to an attribute type'; +$lang['jump_to_matching_rule'] = 'Jump to a matching rule'; $lang['schema_for_server'] = 'Schema for server'; $lang['required_attrs'] = 'Required Attributes'; +$lang['required'] = 'required'; $lang['optional_attrs'] = 'Optional Attributes'; +$lang['optional_binary_attrs'] = 'Optional Binary Attributes'; $lang['OID'] = 'OID'; +$lang['aliases']='Aliases'; $lang['desc'] = 'Description'; +$lang['no_description']='no description'; $lang['name'] = 'Name'; -$lang['is_obsolete'] = 'This objectClass is obsolete'; -$lang['inherits'] = 'Inherits'; +$lang['equality']='Equality'; +$lang['is_obsolete'] = 'This objectClass is obsolete.'; +$lang['inherits'] = 'Inherits from'; +$lang['inherited_from'] = 'Inherited from'; +$lang['parent_to'] = 'Parent to'; $lang['jump_to_this_oclass'] = 'Jump to this objectClass definition'; $lang['matching_rule_oid'] = 'Matching Rule OID'; $lang['syntax_oid'] = 'Syntax OID'; $lang['not_applicable'] = 'not applicable'; $lang['not_specified'] = 'not specified'; +$lang['character']='character'; +$lang['characters']='characters'; +$lang['used_by_objectclasses']='Used by objectClasses'; +$lang['used_by_attributes']='Used by Attributes'; +$lang['maximum_length']='Maximum Length'; +$lang['attribute_types']='Attribute Types'; +$lang['syntaxes']='Syntaxes'; +$lang['matchingrules']='Matching Rules'; +$lang['oid']='OID'; +$lang['obsolete']='Obsolete'; +$lang['ordering']='Ordering'; +$lang['substring_rule']='Substring Rule'; +$lang['single_valued']='Single Valued'; +$lang['collective']='Collective'; +$lang['user_modification']='User Modification'; +$lang['usage']='Usage'; +$lang['could_not_retrieve_schema_from']='Could not retrieve schema from'; +$lang['type']='Type'; +$lang['no_such_schema_item'] = 'No such schema item: "%s"'; // Deleting entries -$lang['entry_deleted_successfully'] = 'Entry \'%s\' deleted successfully.'; +$lang['entry_deleted_successfully'] = 'Entry %s deleted successfully.'; $lang['you_must_specify_a_dn'] = 'You must specify a DN'; $lang['could_not_delete_entry'] = 'Could not delete the entry: %s'; +$lang['no_such_entry'] = 'No such entry: %s'; +$lang['delete_dn'] = 'Delete %s'; +$lang['permanently_delete_children'] = 'Permanently delete all children also?'; +$lang['entry_is_root_sub_tree'] = 'This entry is the root of a sub-tree containing %s entries.'; +$lang['view_entries'] = 'view entries'; +$lang['confirm_recursive_delete'] = 'phpLDAPadmin can recursively delete this entry and all %s of its children. See below for a list of all the entries that this action will delete. Do you want to do this?'; +$lang['confirm_recursive_delete_note'] = 'Note: this is potentially very dangerous and you do this at your own risk. This operation cannot be undone. Take into consideration aliases, referrals, and other things that may cause problems.'; +$lang['delete_all_x_objects'] = 'Delete all %s objects'; +$lang['recursive_delete_progress'] = 'Recursive delete progress'; +$lang['entry_and_sub_tree_deleted_successfully'] = 'Entry %s and sub-tree deleted successfully.'; +$lang['failed_to_delete_entry'] = 'Failed to delete entry %s'; +$lang['list_of_entries_to_be_deleted'] = 'List of entries to be deleted:'; +$lang['sure_permanent_delete_object']='Are you sure you want to permanently delete this object?'; +$lang['dn'] = 'DN'; + +// Deleting attributes +$lang['attr_is_read_only'] = 'The attribute "%s" is flagged as read-only in the phpLDAPadmin configuration.'; +$lang['no_attr_specified'] = 'No attribute name specified.'; +$lang['no_dn_specified'] = 'No DN specified'; + +// Adding attributes +$lang['left_attr_blank'] = 'You left the attribute value blank. Please go back and try again.'; +$lang['failed_to_add_attr'] = 'Failed to add the attribute.'; +$lang['file_empty'] = 'The file you chose is either empty or does not exist. Please go back and try again.'; +$lang['invalid_file'] = 'Security error: The file being uploaded may be malicious.'; +$lang['warning_file_uploads_disabled'] = 'Your PHP configuration has disabled file uploads. Please check php.ini before proceeding.'; +$lang['uploaded_file_too_big'] = 'The file you uploaded is too large. Please check php.ini, upload_max_size setting'; +$lang['uploaded_file_partial'] = 'The file you selected was only partially uploaded, likley due to a network error.'; +$lang['max_file_size'] = 'Maximum file size: %s'; + +// Updating values +$lang['modification_successful'] = 'Modification successful!'; +$lang['change_password_new_login'] = 'Since you changed your password, you must now login again with your new password.'; // Adding objectClass form $lang['new_required_attrs'] = 'New Required Attributes'; @@ -147,6 +223,7 @@ $lang['new_attributes'] = 'new attributes'; $lang['new_required_attrs_instructions'] = 'Instructions: In order to add this objectClass to this entry, you must specify'; $lang['that_this_oclass_requires'] = 'that this objectClass requires. You can do so in this form.'; $lang['add_oclass_and_attrs'] = 'Add ObjectClass and Attributes'; +$lang['objectclasses'] = 'ObjectClasses'; // General $lang['chooser_link_tooltip'] = 'Click to popup a dialog to select an entry (DN) graphically'; @@ -154,8 +231,11 @@ $lang['no_updates_in_read_only_mode'] = 'You cannot perform updates while server $lang['bad_server_id'] = 'Bad server id'; $lang['not_enough_login_info'] = 'Not enough information to login to server. Please check your configuration.'; $lang['could_not_connect'] = 'Could not connect to LDAP server.'; +$lang['could_not_connect_to_host_on_port'] = 'Could not connect to "%s" on port "%s"'; $lang['could_not_perform_ldap_mod_add'] = 'Could not perform ldap_mod_add operation.'; $lang['bad_server_id_underline'] = 'Bad server_id: '; +$lang['home'] = 'Home'; +$lang['help'] = 'Help'; $lang['success'] = 'Success'; $lang['server_colon_pare'] = 'Server: '; $lang['look_in'] = 'Looking in: '; @@ -165,6 +245,22 @@ $lang['back_up_p'] = 'Back Up...'; $lang['no_entries'] = 'no entries'; $lang['not_logged_in'] = 'Not logged in'; $lang['could_not_det_base_dn'] = 'Could not determine base DN'; +$lang['please_report_this_as_a_bug']='Please report this as a bug.'; +$lang['reasons_for_error']='This could happen for several reasons, the most probable of which are:'; +$lang['yes']='Yes'; +$lang['no']='No'; +$lang['go']='Go'; +$lang['delete']='Delete'; +$lang['back']='Back'; +$lang['object']='object'; +$lang['delete_all']='Delete all'; +$lang['url_bug_report']='https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; +$lang['hint'] = 'hint'; +$lang['bug'] = 'bug'; +$lang['warning'] = 'warning'; +$lang['light'] = 'light'; // the word 'light' from 'light bulb' +$lang['proceed_gt'] = 'Proceed >>'; + // Add value form $lang['add_new'] = 'Add new'; @@ -172,8 +268,7 @@ $lang['value_to'] = 'value to'; $lang['distinguished_name'] = 'Distinguished Name'; $lang['current_list_of'] = 'Current list of'; $lang['values_for_attribute'] = 'values for attribute'; -$lang['inappropriate_matching_note'] = 'Note: You will get an "inappropriate matching" error if you have not
' . - 'setup an EQUALITY rule on your LDAP server for this attribute.'; +$lang['inappropriate_matching_note'] = 'Note: You will get an "inappropriate matching" error if you have not setup an EQUALITY rule on your LDAP server for this attribute.'; $lang['enter_value_to_add'] = 'Enter the value you would like to add:'; $lang['new_required_attrs_note'] = 'Note: you may be required to enter new attributes that this objectClass requires'; $lang['syntax'] = 'Syntax'; @@ -194,6 +289,13 @@ $lang['copy_failed'] = 'Failed to copy DN: '; //edit.php $lang['missing_template_file'] = 'Warning: missing template file, '; $lang['using_default'] = 'Using default.'; +$lang['template'] = 'Template'; +$lang['must_choose_template'] = 'You must choose a template'; +$lang['invalid_template'] = '%s is an invalid template'; +$lang['using_template'] = 'using template'; +$lang['go_to_dn'] = 'Go to %s'; ++$lang['structural_object_class_cannot_remove'] = 'This is a structural ObjectClass and cannot be removed.'; ++$lang['structural'] = 'structural'; //copy_form.php $lang['copyf_title_copy'] = 'Copy '; @@ -203,24 +305,38 @@ $lang['copyf_dest_dn_tooltip'] = 'The full DN of the new entry to be created whe $lang['copyf_dest_server'] = 'Destination Server'; $lang['copyf_note'] = 'Hint: Copying between different servers only works if there are no schema violations'; $lang['copyf_recursive_copy'] = 'Recursively copy all children of this object as well.'; +$lang['recursive_copy'] = 'Recursive copy'; +$lang['filter'] = 'Filter'; +$lang['search_filter'] = 'Search Filter'; +$lang['filter_tooltip'] = 'When performing a recursive copy, only copy those entries which match this filter'; //create.php -$lang['create_required_attribute'] = 'You left the value blank for required attribute %s.'; -$lang['create_redirecting'] = 'Redirecting'; -$lang['create_here'] = 'here'; +$lang['create_required_attribute'] = 'You left the value blank for required attribute (%s).'; +$lang['redirecting'] = 'Redirecting...'; +$lang['here'] = 'here'; $lang['create_could_not_add'] = 'Could not add the object to the LDAP server.'; //create_form.php $lang['createf_create_object'] = 'Create Object'; $lang['createf_choose_temp'] = 'Choose a template'; $lang['createf_select_temp'] = 'Select a template for the creation process'; -$lang['createf_proceed'] = 'Proceed'; +$lang['save_as_file'] = 'Save as file'; +$lang['rdn_field_blank'] = 'You left the RDN field blank.'; +$lang['container_does_not_exist'] = 'The container you specified (%s) does not exist. Please try again.'; +$lang['no_objectclasses_selected'] = 'You did not select any ObjectClasses for this object. Please go back and do so.'; +$lang['hint_structural_oclass'] = 'Hint: You must choose exactly one structural objectClass (shown in bold above)'; //creation_template.php $lang['ctemplate_on_server'] = 'On server'; $lang['ctemplate_no_template'] = 'No template specified in POST variables.'; -$lang['ctemplate_config_handler'] = 'Your config specifies a handler of'; -$lang['ctemplate_handler_does_not_exist'] = 'for this template. But, this handler does not exist in the templates/creation directory.'; +$lang['template_not_readable'] = 'Your config specifies a handler of "%s" for this template but this file is not readable because the permissions are too strict.'; +$lang['template_does_not_exist'] = 'Your config specifies a handler of "%s" for this template but this handler does not exist in the templates/creation directory.'; +$lang['create_step1'] = 'Step 1 of 2: Name and ObjectClass(es)'; +$lang['create_step2'] = 'Step 2 of 2: Specify attributes and values'; +$lang['relative_distinguished_name'] = 'Relative Distinguished Name'; +$lang['rdn'] = 'RDN'; +$lang['rdn_example'] = '(example: cn=MyNewPerson)'; +$lang['container'] = 'Container'; // search.php $lang['you_have_not_logged_into_server'] = 'You have not logged into the selected server yet, so you cannot perform searches on it.'; @@ -251,7 +367,7 @@ $lang['ends with'] = 'ends with'; $lang['sounds like'] = 'sounds like'; // server_info.php -$lang['could_not_fetch_server_info'] = 'Could not retrieve LDAP information from the server'; +$lang['could_not_fetch_server_info'] = 'Could not retrieve LDAP information from the server. This may be due to a bug in your version of PHP or perhaps your LDAP server has access control specified that prevents LDAP clients from accessing the RootDSE.'; $lang['server_info_for'] = 'Server info for: '; $lang['server_reports_following'] = 'Server reports the following information about itself'; $lang['nothing_to_report'] = 'This server has nothing to report.'; @@ -275,7 +391,19 @@ $lang['go_back'] = 'Go back'; $lang['welcome_note'] = 'Use the menu to the left to navigate'; $lang['credits'] = 'Credits'; $lang['changelog'] = 'ChangeLog'; -$lang['documentation'] = 'Documentation'; +$lang['donate'] = 'Donate'; +$lang['pla_logo'] = 'phpLDAPadmin logo'; + +// Donate.php +$lang['donation_instructions'] = 'To donate funds to the phpLDAPadmin project, use one of the PayPal buttons below.'; +$lang['donate_amount'] = 'Donate %s'; +$lang['wish_list_option'] = 'Or perhaps you would prefer to purchase an gift for a phpLDAPadmin developer.'; +$lang['wish_list'] = 'View Dave\'s phpLDAPadmin wish list'; + +$lang['purge_cache'] = 'Purge caches'; +$lang['no_cache_to_purge'] = 'No cache to purge.'; +$lang['done_purging_caches'] = 'Purged %s bytes of cache.'; +$lang['purge_cache_tooltip'] = 'Purge all cached data in phpLDAPadmin, including server schemas.'; // view_jpeg_photo.php $lang['unsafe_file_name'] = 'Unsafe file name: '; @@ -285,34 +413,45 @@ $lang['no_such_file'] = 'No such file: '; $lang['auto_update_not_setup'] = 'You have enabled auto_uid_numbers for %s in your configuration, but you have not specified the auto_uid_number_mechanism. Please correct this problem.'; -$lang['uidpool_not_set'] = 'You specified the auto_uid_number_mechanism as uidpool +$lang['uidpool_not_set'] = 'You specified the "auto_uid_number_mechanism" as "uidpool" in your configuration for server %s, but you did not specify the audo_uid_number_uid_pool_dn. Please specify it before proceeding.'; -$lang['uidpool_not_exist'] = 'It appears that the uidPool you specified in your configuration (%s) +$lang['uidpool_not_exist'] = 'It appears that the uidPool you specified in your configuration ("%s") does not exist.'; -$lang['specified_uidpool'] = 'You specified the auto_uid_number_mechanism as search in your +$lang['specified_uidpool'] = 'You specified the "auto_uid_number_mechanism" as "search" in your configuration for server %s, but you did not specify the - auto_uid_number_search_base. Please specify it before proceeding.'; -$lang['auto_uid_invalid_value'] = 'You specified an invalid value for auto_uid_number_mechanism (%s) - in your configration. Only uidpool and search are valid. + "auto_uid_number_search_base". Please specify it before proceeding.'; +$lang['auto_uid_invalid_credential'] = 'Unable to bind to %s with your with auto_uid credentials. Please check your configuration file.'; +$lang['bad_auto_uid_search_base'] = 'Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s'; +$lang['auto_uid_invalid_value'] = 'You specified an invalid value for auto_uid_number_mechanism ("%s") + in your configration. Only "uidpool" and "search" are valid. Please correct this problem.'; -$lang['error_auth_type_config'] = 'Error: You have an error in your config file. The only two allowed values - for auth_type in the $servers section are \'config\' and \'form\'. You entered \'%s\', +$lang['error_auth_type_config'] = 'Error: You have an error in your config file. The only three allowed values + for auth_type in the $servers section are \'session\', \'cookie\', and \'config\'. You entered \'%s\', which is not allowed. '; -$lang['php_install_not_supports_tls'] = 'Your PHP install does not support TLS'; -$lang['could_not_start_tls'] = 'Could not start TLS.
Please check your LDAP server configuration.'; -$lang['auth_type_not_valid'] = 'You have an error in your config file. auth_type of %s is not valid.'; -$lang['ldap_said'] = 'LDAP said: %s

'; +$lang['unique_attrs_invalid_credential'] = 'Unable to bind to %s with your with unique_attrs credentials. Please check your configuration file.'; +$lang['unique_attr_failed'] = 'Your attempt to add %s (%s) to
%s
is NOT allowed. That attribute/value belongs to another entry.

You might like to search for that entry.'; +$lang['php_install_not_supports_tls'] = 'Your PHP install does not support TLS.'; +$lang['could_not_start_tls'] = 'Could not start TLS. Please check your LDAP server configuration.'; +$lang['could_not_bind_anon'] = 'Could not bind anonymously to server.'; +$lang['could_not_bind'] = 'Could not bind to the LDAP server.'; +$lang['anonymous_bind'] = 'Anonymous Bind'; +$lang['bad_user_name_or_password'] = 'Bad username or password. Please try again.'; +$lang['redirecting_click_if_nothing_happens'] = 'Redirecting... Click here if nothing happens.'; +$lang['successfully_logged_in_to_server'] = 'Successfully logged into server %s'; +$lang['could_not_set_cookie'] = 'Could not set cookie.'; +$lang['ldap_said'] = 'LDAP said: %s'; $lang['ferror_error'] = 'Error'; $lang['fbrowse'] = 'browse'; $lang['delete_photo'] = 'Delete Photo'; $lang['install_not_support_blowfish'] = 'Your PHP install does not support blowfish encryption.'; +$lang['install_not_support_md5crypt'] = 'Your PHP install does not support md5crypt encryption.'; $lang['install_no_mash'] = 'Your PHP install does not have the mhash() function. Cannot do SHA hashes.'; $lang['jpeg_contains_errors'] = 'jpegPhoto contains errors
'; -$lang['ferror_number'] = 'Error number: %s (%s)

'; -$lang['ferror_discription'] = 'Description: %s

'; -$lang['ferror_number_short'] = 'Error number: %s

'; -$lang['ferror_discription_short'] = 'Description: (no description available)
'; +$lang['ferror_number'] = 'Error number: %s (%s)'; +$lang['ferror_discription'] = 'Description: %s

'; +$lang['ferror_number_short'] = 'Error number: %s

'; +$lang['ferror_discription_short'] = 'Description: (no description available)
'; $lang['ferror_submit_bug'] = 'Is this a phpLDAPadmin bug? If so, please report it.'; $lang['ferror_unrecognized_num'] = 'Unrecognized error number: '; $lang['ferror_nonfatil_bug'] = '

@@ -338,15 +477,23 @@ $lang['ferror_congrats_found_bug'] = 'Congratulations! You found a bug in phpLDA //ldif_import_form $lang['import_ldif_file_title'] = 'Import LDIF File'; $lang['select_ldif_file'] = 'Select an LDIF file:'; -$lang['select_ldif_file_proceed'] = 'Proceed >>'; +$lang['dont_stop_on_errors'] = 'Don\'t stop on errors'; //ldif_import $lang['add_action'] = 'Adding...'; $lang['delete_action'] = 'Deleting...'; $lang['rename_action'] = 'Renaming...'; $lang['modify_action'] = 'Modifying...'; +$lang['warning_no_ldif_version_found'] = 'No version found. Assuming 1.'; +$lang['valid_dn_line_required'] = 'A valid dn line is required.'; +$lang['missing_uploaded_file'] = 'Missing uploaded file.'; +$lang['no_ldif_file_specified'] = 'No LDIF file specified. Please try again.'; +$lang['ldif_file_empty'] = 'Uploaded LDIF file is empty.'; +$lang['empty'] = 'empty'; +$lang['file'] = 'File'; +$lang['number_bytes'] = '%s bytes'; -$lang['failed'] = 'failed'; +$lang['failed'] = 'Failed'; $lang['ldif_parse_error'] = 'LDIF Parse Error'; $lang['ldif_could_not_add_object'] = 'Could not add object:'; $lang['ldif_could_not_rename_object'] = 'Could not rename object:'; @@ -354,4 +501,174 @@ $lang['ldif_could_not_delete_object'] = 'Could not delete object:'; $lang['ldif_could_not_modify_object'] = 'Could not modify object:'; $lang['ldif_line_number'] = 'Line Number:'; $lang['ldif_line'] = 'Line:'; + +// Exports +$lang['export_format'] = 'Export format'; +$lang['line_ends'] = 'Line ends'; +$lang['must_choose_export_format'] = 'You must choose an export format.'; +$lang['invalid_export_format'] = 'Invalid export format'; +$lang['no_exporter_found'] = 'No available exporter found.'; +$lang['error_performing_search'] = 'Encountered an error while performing search.'; +$lang['showing_results_x_through_y'] = 'Showing results %s through %s.'; +$lang['searching'] = 'Searching...'; +$lang['size_limit_exceeded'] = 'Notice, search size limit exceeded.'; +$lang['entry'] = 'Entry'; +$lang['ldif_export_for_dn'] = 'LDIF Export for: %s'; +$lang['generated_on_date'] = 'Generated by phpLDAPadmin ( http://www.phpldapadmin.com/ ) on %s'; +$lang['total_entries'] = 'Total Entries'; +$lang['dsml_export_for_dn'] = 'DSLM Export for: %s'; +$lang['include_system_attrs'] = 'Include system attributes'; +$lang['csv_spreadsheet'] = 'CSV (Spreadsheet)'; + +// logins +$lang['could_not_find_user'] = 'Could not find a user "%s"'; +$lang['password_blank'] = 'You left the password blank.'; +$lang['login_cancelled'] = 'Login cancelled.'; +$lang['no_one_logged_in'] = 'No one is logged in to that server.'; +$lang['could_not_logout'] = 'Could not logout.'; +$lang['unknown_auth_type'] = 'Unknown auth_type: %s'; +$lang['logged_out_successfully'] = 'Logged out successfully from server %s'; +$lang['authenticate_to_server'] = 'Authenticate to server %s'; +$lang['warning_this_web_connection_is_unencrypted'] = 'Warning: This web connection is unencrypted.'; +$lang['not_using_https'] = 'You are not using \'https\'. Web browser will transmit login information in clear text.'; +$lang['login_dn'] = 'Login DN'; +$lang['user_name'] = 'User name'; +$lang['password'] = 'Password'; +$lang['authenticate'] = 'Authenticate'; + +// Entry browser +$lang['entry_chooser_title'] = 'Entry Chooser'; + +// Index page +$lang['need_to_configure'] = 'You need to configure phpLDAPadmin. Edit the file \'config.php\' to do so. An example config file is provided in \'config.php.example\''; + +// Mass deletes +$lang['no_deletes_in_read_only'] = 'Deletes not allowed in read only mode.'; +$lang['error_calling_mass_delete'] = 'Error calling mass_delete.php. Missing mass_delete in POST vars.'; +$lang['mass_delete_not_array'] = 'mass_delete POST var is not an array.'; +$lang['mass_delete_not_enabled'] = 'Mass deletion is not enabled. Please enable it in config.php before proceeding.'; +$lang['search_attrs_wrong_count'] = 'Your config.php has an error. The number of attributes in $search_attributes and $search_attributes_display is different'; +$lang['mass_deleting'] = 'Mass Deleting'; +$lang['mass_delete_progress'] = 'Deletion progress on server "%s"'; +$lang['malformed_mass_delete_array'] = 'Malformed mass_delete array.'; +$lang['no_entries_to_delete'] = 'You did not select any entries to delete.'; +$lang['deleting_dn'] = 'Deleting %s'; +$lang['total_entries_failed'] = '%s of %s entries failed to be deleted.'; +$lang['all_entries_successful'] = 'All entries deleted successfully.'; +$lang['confirm_mass_delete'] = 'Confirm mass delete of %s entries on server %s'; +$lang['yes_delete'] = 'Yes, delete!'; + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'You cannot rename an entry which has children entries (eg, the rename operation is not allowed on non-leaf entries)'; +$lang['no_rdn_change'] = 'You did not change the RDN'; +$lang['invalid_rdn'] = 'Invalid RDN value'; +$lang['could_not_rename'] = 'Could not rename the entry'; + +// General errors +$lang['php5_unsupported'] = 'phpLDAPadmin does not yet support PHP 5. You will likely encounter many weird problems if you continue.'; +$lang['mismatched_search_attr_config'] = 'Your configuration has an error. $search_attributes must have the same number of attributes as $search_attributes_display.'; + +// Password checker +$lang['passwords_match'] = 'Passwords match!'; +$lang['passwords_do_not_match'] = 'Passwords do not match!'; +$lang['password_checker_tool'] = 'Password Checker Tool'; +$lang['compare'] = 'Compare'; +$lang['to'] = 'To'; + +// Templates +$lang['using'] = 'Using the'; +$lang['template'] = 'template'; +$lang['switch_to'] = 'You may switch to the '; +$lang['default_template'] = 'default template'; + +// template_config +$lang['user_account'] = 'User Account (posixAccount)'; +$lang['address_book_inet'] = 'Address Book Entry (inetOrgPerson)'; +$lang['address_book_moz'] = 'Address Book Entry (mozillaOrgPerson)'; +$lang['kolab_user'] = 'Kolab User Entry'; +$lang['organizational_unit'] = 'Organizational Unit'; +$lang['organizational_role'] = 'Organizational Role'; +$lang['posix_group'] = 'Posix Group'; +$lang['samba_machine'] = 'Samba NT Machine'; +$lang['samba3_machine'] = 'Samba 3 NT Machine'; +$lang['samba_user'] = 'Samba User'; +$lang['samba3_user'] = 'Samba 3 User'; +$lang['samba3_group'] = 'Samba 3 Group Mapping'; +$lang['dns_entry'] = 'DNS Entry'; +$lang['simple_sec_object'] = 'Simple Security Object'; +$lang['courier_mail_account'] = 'Courier Mail Account'; +$lang['courier_mail_alias'] = 'Courier Mail Alias'; +$lang['ldap_alias'] = 'LDAP Alias'; +$lang['sendmail_cluster'] = 'Sendmail Cluster'; +$lang['sendmail_domain'] = 'Sendmail Domain'; +$lang['sendmail_alias'] = 'Sendmail Alias'; +$lang['sendmail_virt_dom'] = 'Sendmail Virtual Domain'; +$lang['sendmail_virt_users'] = 'Sendmail Virtual Users'; +$lang['sendmail_relays'] = 'Sendmail Relays'; +$lang['custom'] = 'Custom'; +$lang['samba_domain_name'] = 'My Samba domain Name'; +$lang['administrators'] = 'Administrators'; +$lang['users'] = 'Users'; +$lang['guests'] = 'Guests'; +$lang['power_users'] = 'Power Users'; +$lang['account_ops'] = 'Account Operators'; +$lang['server_ops'] = 'Server Operators'; +$lang['print_ops'] = 'Print Operators'; +$lang['backup_ops'] = 'Backup Operators'; +$lang['replicator'] = 'Replicator'; +$lang['unable_smb_passwords'] = ' Unable to create the Samba passwords. Please, check the configuration in template_config.php'; +$lang['err_smb_conf'] = 'Error: You have an error in your samba confguration.'; +$lang['err_smb_no_name_sid'] = 'Error: A name and a sid for your samba domain need to be provided.'; +$lang['err_smb_no_name'] = 'Error: No name provided for samba domain.'; +$lang['err_smb_no_sid'] = 'Error: No sid provided for samba domain.'; + +// Samba Account Template +$lang['samba_account'] = 'Samba Account'; +$lang['samba_account_lcase'] = 'samba account'; + +// New User (Posix) Account +$lang['t_new_user_account'] = 'New User Account'; +$lang['t_hint_customize'] = 'Hint: To customize this template, edit the file templates/creation/new_user_template.php'; +$lang['t_name'] = 'Name'; +$lang['t_first_name'] = 'First name'; +$lang['t_last_name'] = 'Last name'; +$lang['t_first'] = 'first'; +$lang['t_last'] = 'last'; +$lang['t_common_name'] = 'Common name'; +$lang['t_user_name'] = 'User Name'; +$lang['t_password'] = 'Password'; +$lang['t_encryption'] = 'Encryption'; +$lang['t_login_shell'] = 'Login Shell'; +$lang['t_home_dir'] = 'Home Directory'; +$lang['t_uid_number'] = 'UID Number'; +$lang['t_auto_det'] = '(automatically determined)'; +$lang['t_group'] = 'Group'; +$lang['t_gid_number'] = 'GID Number'; +$lang['t_err_passwords'] = 'Your passwords don\'t match. Please go back and try again.'; +$lang['t_err_field_blank'] = 'You cannot leave the %s blank. Please go back and try again.'; +$lang['t_err_field_num'] = 'You can only enter numeric values for the %s field. Please go back and try again.'; +$lang['t_err_bad_container'] = 'The container you specified (%s) does not exist. Please go back and try again.'; +$lang['t_confirm_account_creation'] = 'Confirm account creation'; +$lang['t_secret'] = '[secret]'; +$lang['t_create_account'] = 'Create Account'; + +// New Address Template +$lang['t_new_address'] = 'New Address Book Entry'; +$lang['t_organization'] = 'Organization'; +$lang['t_address'] = 'Address'; +$lang['t_city'] = 'City'; +$lang['t_postal_code'] = 'Postal code'; +$lang['t_street'] = 'Street'; +$lang['t_work_phone'] = 'Work phone'; +$lang['t_fax'] = 'Fax'; +$lang['t_mobile'] = 'Mobile'; +$lang['t_email'] = 'Email'; +$lang['t_container'] = 'Container'; +$lang['t_err_cn_blank'] = 'You cannot leave the Common Name blank. Please go back and try again.'; +$lang['t_confim_creation'] = 'Confirm entry creation:'; +$lang['t_create_address'] = 'Create Address'; + +// default template +$lang['t_check_pass'] = 'Check password...'; + ?> diff --git a/lang/recoded/es.php b/lang/recoded/es.php index 5bc9cb3..7bb0db5 100644 --- a/lang/recoded/es.php +++ b/lang/recoded/es.php @@ -1,4 +1,6 @@ Descripción: (no hay descripción)< $lang['ferror_submit_bug'] = 'Es un error del phpLDAPadmin? Si así es, por favor dínoslo.'; $lang['ferror_unrecognized_num'] = 'Número de error desconocido: '; $lang['ferror_nonfatil_bug'] = '
+ Has encontrado un error menor del phpLDAPadmin!
- Has encontrado un error fatal del phpLDAPadmin!
Error:%s (%s)
Archivo:
Error:%s (%s)
Archivo: %s línea %s, caller %s
Versiones:PLA: %s, PHP: %s, SAPI: %s
Servidor Web:%s
Envía este error haciendo click aquí.

'; diff --git a/lang/recoded/fr.php b/lang/recoded/fr.php index 7707bf8..546dd2e 100644 --- a/lang/recoded/fr.php +++ b/lang/recoded/fr.php @@ -1,5 +1,5 @@ Pour effacer un attribut, laissez le champs vide et cliquez pour sauvegarder.'; -$lang['attr_schema_hint'] = 'Note: Pour voir le schéma pour un attribut, cliquer sur le nom de l\'attribut.'; -$lang['attrs_modified'] = 'Certains attributs (%s) ont été mdoifiés et sont mis en évidence ci-dessous.'; -$lang['attr_modified'] = 'Un attribut (%s) a été modifié et est mis en évidence ci-dessous.'; -$lang['viewing_read_only'] = 'Voir une entrée en lecture seule.'; -$lang['change_entry_rdn'] = 'Changer le RDN de cette entrée'; -$lang['no_new_attrs_available'] = 'plus d\'attributs disponibles pour cette entrée'; +$lang['refresh_this_entry'] = 'Rafraîchir cette entrée'; +$lang['delete_hint'] = 'Note: Pour effacer un attribut, laissez le champs vide et cliquez pour sauvegarder.'; +$lang['attr_schema_hint'] = 'Note: Pour voir le schéma pour un attribut, cliquer sur le nom de l\'attribut.'; +$lang['attrs_modified'] = 'Certains attributs (%s) ont été modifiés et sont mis en évidence ci-dessous.'; +$lang['attr_modified'] = 'Un attribut (%s) a été modifié et est mis en évidence ci-dessous.'; +$lang['viewing_read_only'] = 'Voir une entrée en lecture seule.'; +$lang['no_new_attrs_available'] = 'plus d\'attributs disponibles pour cette entrée'; +$lang['no_new_binary_attrs_available'] = 'plus d\' attributs binaires disponibles pour cette entréé'; $lang['binary_value'] = 'Valeur de type binaire'; $lang['add_new_binary_attr'] = 'Ajouter un nouvel attribut de type binaire'; -$lang['add_new_binary_attr_tooltip'] = 'Ajouter un nouvel attribut à partir d\'un fichier'; $lang['alias_for'] = 'Alias pour'; -$lang['download_value'] = 'Télécharger le contenu'; +$lang['download_value'] = 'Télécharger le contenu'; $lang['delete_attribute'] = 'Supprimer l\'attribut'; $lang['true'] = 'vrai'; $lang['false'] = 'faux'; $lang['none_remove_value'] = 'aucun, suppression de la valeur'; $lang['really_delete_attribute'] = 'Voulez-vous vraiment supprimer l\'attribut'; +$lang['add_new_value'] = 'Ajouter une nouvelle valeur'; // Schema browser -$lang['the_following_objectclasses'] = 'Les classes d\'objets (objectClasses) suivantes sont supportés par ce serveur LDAP.'; -$lang['the_following_attributes'] = 'Les types d\'attributs (attributesTypes) suivants sont supportés par ce serveur LDAP.'; -$lang['the_following_matching'] = 'Les opérateurs (matching rules) suivants sont supportés par ce serveur LDAP.'; -$lang['the_following_syntaxes'] = 'Les syntaxes suivantes sont supportés par ce serveur LDAP.'; -$lang['jump_to_objectclass'] = 'Aller à une classe d\'objet'; -$lang['jump_to_attr'] = 'Aller à un attribut'; +$lang['the_following_objectclasses'] = 'Les classes d\'objets (objectClasses) suivantes sont supportés par ce serveur LDAP.'; +$lang['the_following_attributes'] = 'Les types d\'attributs (attributesTypes) suivants sont supportés par ce serveur LDAP.'; +$lang['the_following_matching'] = 'Les opérateurs (matching rules) suivants sont supportés par ce serveur LDAP.'; +$lang['the_following_syntaxes'] = 'Les syntaxes suivantes sont supportés par ce serveur LDAP.'; +$lang['schema_retrieve_error_1']='Le serveur ne supporte pas entièrement le protocol LDAP.'; +$lang['schema_retrieve_error_2']='Votre version de PHP ne permet pas d\'exécute correctement la requête.'; +$lang['schema_retrieve_error_3']='Ou tout du moins, phpLDAPadmin ne sait pas comment récupérer le schéma pour votre serveur.'; +$lang['jump_to_objectclass'] = 'Aller à une classe d\'objet'; +$lang['jump_to_attr'] = 'Aller à un attribut'; +$lang['jump_to_matching_rule'] = 'Aller à une règle d\'égalité'; $lang['schema_for_server'] = 'Schema pour le serveur'; $lang['required_attrs'] = 'Attributs obligatoires'; -$lang['optional_attrs'] = 'Attributs facultatifs'; +$lang['optional_attrs'] = 'Attributs optionnels'; +$lang['optional_binary_attrs'] = 'Attributs binaires optionnels'; $lang['OID'] = 'OID'; +$lang['aliases']='Alias'; $lang['desc'] = 'Description'; +$lang['no_description']='aucune description'; $lang['name'] = 'Nom'; -$lang['is_obsolete'] = 'Cette classe d\'objet est obsolete'; -$lang['inherits'] = 'hérite'; -$lang['jump_to_this_oclass'] = 'Aller à la définition de cette classe d\'objet'; -$lang['matching_rule_oid'] = 'OID de l\'opérateur'; +$lang['equality']='Egalité'; +$lang['is_obsolete'] = 'Cette classe d\'objet est obsolete'; +$lang['inherits'] = 'hérite'; +$lang['inherited_from']='hérite de'; +$lang['jump_to_this_oclass'] = 'Aller à la définition de cette classe d\'objet'; +$lang['matching_rule_oid'] = 'OID de l\'opérateur'; $lang['syntax_oid'] = 'OID de la syntaxe'; $lang['not_applicable'] = 'not applicable'; -$lang['not_specified'] = 'non spécifié'; +$lang['not_specified'] = 'non spécifié'; +$lang['character']='caractère'; +$lang['characters']='caractères'; +$lang['used_by_objectclasses']='Utilisé par les objectClasses'; +$lang['used_by_attributes']='Utilisé par les attributes'; +$lang['maximum_length']='Maximum Length'; +$lang['attributes']='Types d\'attribut'; +$lang['syntaxes']='Syntaxes'; +$lang['objectclasses']='objectClasses'; +$lang['matchingrules']='Règles d\'égalité'; +$lang['oid']='OID'; +$lang['obsolete']='Obsolète'; +$lang['ordering']='Ordonné'; +$lang['substring_rule']='Substring Rule'; +$lang['single_valued']='Valeur Unique'; +$lang['collective']='Collective'; +$lang['user_modification']='Modification Utilisateur'; +$lang['usage']='Usage'; +$lang['maximum_length']='Longueur maximale'; +$lang['could_not_retrieve_schema_from']='Impossible de récupérer le schéma de'; +$lang['type']='Type'; // Deleting entries -$lang['entry_deleted_successfully'] = 'Suppression de l\'entrée \'%s\' réussie.'; -$lang['you_must_specify_a_dn'] = 'Un DN doit être spécifié'; -$lang['could_not_delete_entry'] = 'Impossible de supprimer l\'entrée: %s'; +$lang['entry_deleted_successfully'] = 'Suppression de l\'entrée \'%s\' réussie.'; +$lang['you_must_specify_a_dn'] = 'Un DN doit être spécifié'; +$lang['could_not_delete_entry'] = 'Impossible de supprimer l\'entrée: %s'; +$lang['no_such_entry'] = 'Aucune entrée de ce type: %s'; +$lang['delete_dn'] = 'Delete %s'; +$lang['permanently_delete_children'] = 'Effacer également les sous-entrées?'; +$lang['entry_is_root_sub_tree'] = 'Cette entrée est la racine d\'une arborescence contenant %s entrées.'; +$lang['view_entries'] = 'voir les entrées'; +$lang['confirm_recursive_delete'] = 'phpLDAPadmin peut supprimer cette entrées ainsi que les %s noeuds enfants de façon récursive. Voir ci-dessous pour une liste des entrées que cette action suprimera. Voulez-vous continuer?'; +$lang['confirm_recursive_delete_note'] = 'Note: ceci est potentiellement très dangereux and vous faîtes cela à vos propres risques. Cette opération ne peut être annulée. Prenez en considération les alias ainsi que d\'autres choses qui pourraient causer des problèmes.'; +$lang['delete_all_x_objects'] = 'Suppressions des %s objets'; +$lang['recursive_delete_progress'] = 'Progression de la suppression récursive'; +$lang['entry_and_sub_tree_deleted_successfully'] = 'L\'entrée %s ainsi que la sous-arborescence de ce noeud ont été supprimés avec succès.'; +$lang['failed_to_delete_entry'] = 'Echec lors de la suppression de l\'entrée %s'; +$lang['list_of_entries_to_be_deleted'] = 'Liste des entrées à supprimer:'; +$lang['sure_permanent_delete_object']='Etes-vous certain de vouloir supprimer définitivement cet objet?'; +$lang['dn'] = 'DN'; + +// Deleting attributes +$lang['attr_is_read_only'] = 'L\'attribut "%s" est marqué comme étant en lecture seule dans la configuration de phpLDAPadmin.'; +$lang['no_attr_specified'] = 'Aucun nom d\'attributs spécifié.'; +$lang['no_dn_specified'] = 'Aucun DN specifié'; + +// Adding attributes +$lang['left_attr_blank'] = 'Vous avez laisser la valeur de l\'attribut vide. Veuillez s\'il vous plaît retourner à la page précédente et recommencer.'; +$lang['failed_to_add_attr'] = 'Echec lors de l\'ajout de l\'attribut.'; + +// Updating values +$lang['modification_successful'] = 'Modification réussie!'; +$lang['change_password_new_login'] = 'Votre mot de passe ayant été changé, vous devez maintenant vous logger avec votre nouveau mot de passe.'; // Adding objectClass form $lang['new_required_attrs'] = 'Nouveaux Attributs Obligatoires'; -$lang['requires_to_add'] = 'Cette action nécessite d\'ajouter'; +$lang['requires_to_add'] = 'Cette action nécessite d\'ajouter'; $lang['new_attributes'] = 'nouveaux attributs'; -$lang['new_required_attrs_instructions'] = 'Instructions: Afin d\'ajouter cette classe d\'objet, vous devez spécifier'; +$lang['new_required_attrs_instructions'] = 'Instructions: Afin d\'ajouter cette classe d\'objet, vous devez spécifier'; $lang['that_this_oclass_requires'] = 'dont cette classe d\'objet a besoin. Vous pouvez le faire avec ce formulaire.'; $lang['add_oclass_and_attrs'] = 'Ajout d\' ObjectClass et d\'attributs'; // General -$lang['chooser_link_tooltip'] = 'Cliquer pour choisir un entré(DN)'; -$lang['no_updates_in_read_only_mode'] = 'Vous ne pouvez effectuer des mises à jour si le serveur est en lecture seule'; +$lang['chooser_link_tooltip'] = 'Cliquer pour choisir un entré(DN)'; +$lang['no_updates_in_read_only_mode'] = 'Vous ne pouvez effectuer des mises à jour si le serveur est en lecture seule'; $lang['bad_server_id'] = 'Id de serveur invalide'; -$lang['not_enough_login_info'] = 'Informations insuffisantes pour se logguer au serveur. Veuillez, s\'il vous plaî, vérifier votre configuration.'; +$lang['not_enough_login_info'] = 'Informations insuffisantes pour se logguer au serveur. Veuillez, s\'il vous plaî, vérifier votre configuration.'; $lang['could_not_connect'] = 'Impossible de se connecter au serveur LDAP.'; -$lang['could_not_perform_ldap_mod_add'] = 'Echec lors de l\'opération ldap_mod_add.'; +$lang['could_not_connect_to_host_on_port'] = 'Impossible de se connecter à "%s" sur le port "%s"'; +$lang['could_not_perform_ldap_mod_add'] = 'Echec lors de l\'opération ldap_mod_add.'; $lang['bad_server_id_underline'] = 'serveur_id invalide: '; -$lang['success'] = 'Succès'; +$lang['success'] = 'Succès'; $lang['server_colon_pare'] = 'Serveur: '; $lang['look_in'] = 'Recherche dans: '; -$lang['missing_server_id_in_query_string'] = 'Aucun serveur ID spécifié dans la ligne de requête !'; -$lang['missing_dn_in_query_string'] = 'Aucun DN spécifié dans la ligne de requête !'; +$lang['missing_server_id_in_query_string'] = 'Aucun serveur ID spécifié dans la ligne de requête !'; +$lang['missing_dn_in_query_string'] = 'Aucun DN spécifié dans la ligne de requête !'; $lang['back_up_p'] = 'Retour...'; -$lang['no_entries'] = 'aucune entrée'; -$lang['not_logged_in'] = 'Vous n\'ê pas loggué'; -$lang['could_not_det_base_dn'] = 'Impossible de déterminer le DN de base'; +$lang['no_entries'] = 'aucune entrée'; +$lang['not_logged_in'] = 'Vous n\'êtes pas loggué'; +$lang['could_not_det_base_dn'] = 'Impossible de déterminer le DN de base'; +$lang['please_report_this_as_a_bug']='Veuillez s\'il-vous-plaît rapporter ceci comme un bogue.'; +$lang['reasons_for_error']='Ceci peut arriver pour plusieurs raisons, les plus probables sont:'; +$lang['yes']='Oui'; +$lang['no']='Non'; +$lang['go']='Go'; +$lang['delete']='Suppression'; +$lang['back']='Back'; +$lang['object']='object'; +$lang['delete_all']='Tous les supprimer'; +$lang['url_bug_report']='https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; +$lang['hint'] = 'Astuce'; +$lang['bug'] = 'bogue'; +$lang['warning'] = 'Avertissement'; +$lang['light'] = 'lumière'; // the word 'light' from 'light bulb' +$lang['proceed_gt'] = 'Continuer >>'; + // Add value form $lang['add_new'] = 'Ajout d\'une nouvelle valeur '; @@ -174,151 +239,182 @@ $lang['distinguished_name'] = 'Distinguished Name'; $lang['current_list_of'] = 'Liste actuelle de'; $lang['values_for_attribute'] = 'valeur(s) pour l\' attribut'; $lang['inappropriate_matching_note'] = 'Note: Vous obtiendrez une erreur de type "inappropriate matching" si vous n\'avez pas
' . - 'défini une règle EQUALITY pour cet attribut auprès du serveur LDAP.'; + 'défini une règle "EQUALITY" pour cet attribut auprès du serveur LDAP.'; $lang['enter_value_to_add'] = 'Entrez la valeur que vous voulez ajouter:'; -$lang['new_required_attrs_note'] = 'Note: vous aurez peut-être besoin d\'introduire de nouveaux attributs requis pour cette classe d\'objet'; +$lang['new_required_attrs_note'] = 'Note: vous aurez peut-êre besoin d\'introduire de nouveaux attributs requis pour cette classe d\'objet'; $lang['syntax'] = 'Syntaxe'; //Copy.php -$lang['copy_server_read_only'] = 'Des mises à jours ne peuvent pas être effectuées si le serveur est en lecture seule'; -$lang['copy_dest_dn_blank'] = 'Vous avez laissé le DN de destination vide.'; -$lang['copy_dest_already_exists'] = 'L\'entrée de destination (%s) existe déjà.'; +$lang['copy_server_read_only'] = 'Des mises à jours ne peuvent pas être effectuées si le serveur est en lecture seule'; +$lang['copy_dest_dn_blank'] = 'Vous avez laissé le DN de destination vide.'; +$lang['copy_dest_already_exists'] = 'L\'entrée de destination (%s) existe déjà.'; $lang['copy_dest_container_does_not_exist'] = 'Le conteneur de destination (%s) n\'existe pas.'; $lang['copy_source_dest_dn_same'] = 'Le DN d\'origine et le DN de destination sont identiques.'; $lang['copy_copying'] = 'Copie '; -$lang['copy_recursive_copy_progress'] = 'Progression de la copie récursive'; -$lang['copy_building_snapshot'] = 'Construction de l\'image de l\'arborscence à copier... '; -$lang['copy_successful_like_to'] = 'Copie réussite! Voulez-vous '; -$lang['copy_view_new_entry'] = 'éditer cette nouvelle entrée'; +$lang['copy_recursive_copy_progress'] = 'Progression de la copie récursive'; +$lang['copy_building_snapshot'] = 'Construction de l\'image de l\'arborscence à copier... '; +$lang['copy_successful_like_to'] = 'Copie réussite! Voulez-vous '; +$lang['copy_view_new_entry'] = 'éditer cette nouvelle entrée'; $lang['copy_failed'] = 'Echec lors de la copie de: '; //edit.php -$lang['missing_template_file'] = 'Avertissement: le fichier modèle est manquant, '; -$lang['using_default'] = 'Utilisation du modèle par défaut.'; +$lang['missing_template_file'] = 'Avertissement: le fichier modèle est manquant, '; +$lang['using_default'] = 'Utilisation du modèle par défaut.'; +$lang['template'] = 'Modèle'; +$lang['must_choose_template'] = 'Vous devez choisir un modèle'; +$lang['invalid_template'] = '%s est un modèle non valide'; +$lang['using_template'] = 'Utilisation du modèle'; +$lang['go_to_dn'] = 'Aller à %s'; + + + //copy_form.php $lang['copyf_title_copy'] = 'Copie de '; $lang['copyf_to_new_object'] = 'vers un nouvel objet'; $lang['copyf_dest_dn'] = 'DN de destination'; -$lang['copyf_dest_dn_tooltip'] = 'Le DN de la nouvelle entrée à créer lors de la copie de l\'entrée source'; +$lang['copyf_dest_dn_tooltip'] = 'Le DN de la nouvelle entrée à créer lors de la copie de l\'entrée source'; $lang['copyf_dest_server'] = 'Destination Serveur'; -$lang['copyf_note'] = 'Note: La copie entre différents serveurs fonctionne seulement si il n\'y a pas de violation de schéma'; -$lang['copyf_recursive_copy'] = 'Copier récursivement les sous-entrées de cet object.'; +$lang['copyf_note'] = 'Note: La copie entre différents serveurs fonctionne seulement si il n\'y a pas de violation de schéma'; +$lang['copyf_recursive_copy'] = 'Copier récursivement les sous-entrées de cet object.'; +$lang['recursive_copy'] = 'Copie récursive'; +$lang['filter'] = 'Filtre'; +$lang['filter_tooltip'] = 'Lors d\'une copie récursive, seuls les entrées correspondant à ce filtre seront copiés'; //create.php -$lang['create_required_attribute'] = 'Une valeur n\'a pas été spécifiée pour l\'attribut requis %s.'; -$lang['create_redirecting'] = 'Redirection'; -$lang['create_here'] = 'ici'; -$lang['create_could_not_add'] = 'L\'ajout de l\'objet au serveur LDAP n\'a pu être effectuée.'; +$lang['create_required_attribute'] = 'Une valeur n\'a pas été spécifiée pour l\'attribut requis %s.'; +$lang['redirecting'] = 'Redirection'; +$lang['here'] = 'ici'; +$lang['create_could_not_add'] = 'L\'ajout de l\'objet au serveur LDAP n\'a pu être effectuée.'; +$lang['rdn_field_blank'] = 'Vous avez laisser le champ du RDN vide.'; +$lang['container_does_not_exist'] = 'Le containeur que vous avez spécifié (%s) n\'existe pas. Veuillez, s\'il vous plaît recommencer.'; +$lang['no_objectclasses_selected'] = 'Vous n\'avez sélectionner aucun ObjectClasses pour cet objet. Veuillez s\'il vous plaît retourner à la page précédente et le faire.'; +$lang['hint_structural_oclass'] = 'Note: Vous devez choisir au moins une classe d\'objet de type structural'; //create_form.php $lang['createf_create_object'] = 'Creation d\'un objet'; -$lang['createf_choose_temp'] = 'Choix d\'un modèle'; -$lang['createf_select_temp'] = 'Selectionner un modèle pour la procédure de création'; +$lang['createf_choose_temp'] = 'Choix d\'un modèle'; +$lang['createf_select_temp'] = 'Selectionner un modèle pour la procédure de création'; $lang['createf_proceed'] = 'Continuer'; +$lang['relative_distinguished_name'] = 'Relative Distinguished Name'; +$lang['rdn'] = 'RDN'; +$lang['rdn_example'] = '(exemple: cn=MyNewPerson)'; +$lang['container'] = 'Containeur'; +$lang['alias_for'] = 'Alias pour %s'; + //creation_template.php $lang['ctemplate_on_server'] = 'Sur le serveur'; -$lang['ctemplate_no_template'] = 'Aucun modèle spécifié dans les variables POST.'; -$lang['ctemplate_config_handler'] = 'Votre configuration scécifie un gestionnaire de'; -$lang['ctemplate_handler_does_not_exist'] = 'pour ce modèle. Cependant, ce gestionnaire n\'existe pas dans le répertoire \'templates/creation\'.'; - +$lang['ctemplate_no_template'] = 'Aucun modèle spécifié dans les variables POST.'; +$lang['ctemplate_config_handler'] = 'Votre configuration scécifie un gestionnaire de'; +$lang['ctemplate_handler_does_not_exist'] = 'pour ce modèle. Cependant, ce gestionnaire n\'existe pas dans le répertoire \'templates/creation\'.'; +$lang['create_step1'] = 'Etape 1 de 2: Nom et classes d\'objet'; +$lang['create_step2'] = 'Etape 2 de 2: Définition des attributs et de leurs valeurs'; //search.php -$lang['you_have_not_logged_into_server'] = 'Vous ne vous êtes pas encore loggé auprès du serveur sélectionné. Vous ne pouvez y effectuer des recherches.'; +$lang['you_have_not_logged_into_server'] = 'Vous ne vous êtes pas encore loggé auprès du serveur sélectionné. Vous ne pouvez y effectuer des recherches.'; $lang['click_to_go_to_login_form'] = 'Cliquer ici pour vous rendre au formulaire de login'; -$lang['unrecognized_criteria_option'] = 'Critère non reconnu: '; -$lang['if_you_want_to_add_criteria'] = 'Si vous voulez ajouter vos propres critère à la liste, soyez cetain d\'éditer search.php afin de pouvoir les gérer.'; -$lang['entries_found'] = 'Entrées trouvée: '; -$lang['filter_performed'] = 'Filtre utilisé: '; -$lang['search_duration'] = 'Recherche effectuée par phpLDAPadmin en'; +$lang['unrecognized_criteria_option'] = 'Critère non reconnu: '; +$lang['if_you_want_to_add_criteria'] = 'Si vous voulez ajouter vos propres critère à la liste, soyez cetain d\'éditer search.php afin de pouvoir les gérer.'; +$lang['entries_found'] = 'Entrées trouvées: '; +$lang['filter_performed'] = 'Filtre utilisé: '; +$lang['search_duration'] = 'Recherche effectuée par phpLDAPadmin en'; $lang['seconds'] = 'secondes'; // search_form_advanced.php -$lang['scope_in_which_to_search'] = 'Portée de la recherche'; +$lang['scope_in_which_to_search'] = 'Portée de la recherche'; $lang['scope_sub'] = 'Sub (le sous-arbre)'; $lang['scope_one'] = 'One (un niveau sous la base)'; $lang['scope_base'] = 'Base (le dn de base)'; $lang['standard_ldap_search_filter'] = 'Un filtre standard de recherche LDAP. Exemple: (&(sn=Smith)(givenname=David))'; $lang['search_filter'] = 'Filtre pour la recherche'; -$lang['list_of_attrs_to_display_in_results'] = 'Une liste des attributs à afficher dans les résultats(séparés par des virgules)'; -$lang['show_attributes'] = 'Attributs à afficher'; +$lang['list_of_attrs_to_display_in_results'] = 'Une liste des attributs à afficher dans les résultats(séparés par des virgules)'; +$lang['show_attributes'] = 'Attributs à afficher'; // search_form_simple.php -$lang['search_for_entries_whose'] = 'Chercher les entrées dont:'; +$lang['search_for_entries_whose'] = 'Chercher les entrées dont:'; $lang['equals'] = 'est egal à;'; $lang['starts with'] = 'commence par'; $lang['contains'] = 'contient'; $lang['ends with'] = 'se termine par'; -$lang['sounds like'] = 'ressemble à'; +$lang['sounds like'] = 'ressemble à'; // server_info.php -$lang['could_not_fetch_server_info'] = 'Impossible de récupérer les informations concernant le serveur Ldap'; +$lang['could_not_fetch_server_info'] = 'Impossible de récupérer les informations concernant le serveur Ldap'; $lang['server_info_for'] = 'Informations pour le serveur: '; -$lang['server_reports_following'] = 'Le serveur a rapporté les informations suivantes'; +$lang['server_reports_following'] = 'Le serveur a rapporté les informations suivantes'; $lang['nothing_to_report'] = 'Ce serveur n\'a aucunes informations a rapporter.'; //update.php -$lang['update_array_malformed'] = 'update_array n\'est pas bien formé. Ceci est peut-être un bogue de phpLDAPadmin. Pourriez-vous effectuer un rapport de bogue, s\'il vous plaît.'; -$lang['could_not_perform_ldap_modify'] = 'L\'opération ldap_modify n\'a pu être effectuée.'; +$lang['update_array_malformed'] = 'update_array n\'est pas bien formé. Ceci est peut-être un bogue de phpLDAPadmin. Pourriez-vous effectuer un rapport de bogue, s\'il vous plaît.'; +$lang['could_not_perform_ldap_modify'] = 'L\'opération ldap_modify n\'a pu être effectuée.'; // update_confirm.php $lang['do_you_want_to_make_these_changes'] = 'Voulez-vous effectuer ces changements?'; $lang['attribute'] = 'Attribut'; $lang['old_value'] = 'Ancienne Valeur'; $lang['new_value'] = 'Nouvelle Valeur'; -$lang['attr_deleted'] = '[attribut supprimé]'; +$lang['attr_deleted'] = '[attribut supprimé]'; $lang['commit'] = 'Valider'; $lang['cancel'] = 'Annuler'; -$lang['you_made_no_changes'] = 'Aucun changement n\'a été effectué'; +$lang['you_made_no_changes'] = 'Aucun changement n\'a été effectué'; $lang['go_back'] = 'Retour'; // welcome.php $lang['welcome_note'] = 'Utilisez le menu de gauche pour la navigation'; +$lang['credits'] = 'Crédits'; +$lang['changelog'] = 'ChangeLog'; +$lang['donate'] = 'Donation'; // view_jpeg_photo.php $lang['unsafe_file_name'] = 'Nom de fichier non sûr: '; -$lang['no_such_file'] = 'Aucun fichier trouvé: '; +$lang['no_such_file'] = 'Aucun fichier trouvé: '; //function.php -$lang['auto_update_not_setup'] = 'auto_uid_numbers a été activé pour %s dans votre configuration, - mais vous n\'avez pas spécifié l\' auto_uid_number_mechanism. Veuiller corriger - ce problème.'; -$lang['uidpool_not_set'] = 'Vous avez spécifié lauto_uid_number_mechanism comme uidpool - dans la configuration du serveur %s, mais vous n\'avez pas spécifié de valeur pour - auto_uid_number_uid_pool_dn. Veuillez le spécifier avant de continuer.'; -$lang['uidpool_not_exist'] = 'Le uidPool que vous avez spécifié dans votre configuration (%s) +$lang['auto_update_not_setup'] = '"auto_uid_numbers" a été activé pour %s dans votre configuration, + mais vous n\'avez pas spécifié le mécanisme "auto_uid_number_mechanism". Veuiller corriger + ce problème.'; +$lang['uidpool_not_set'] = 'Vous avez spécifié lauto_uid_number_mechanism comme uidpool + dans la configuration du serveur %s, mais vous n\'avez pas spécifié de valeur pour + auto_uid_number_uid_pool_dn. Veuillez le spécifier avant de continuer.'; +$lang['uidpool_not_exist'] = 'Le uidPool que vous avez spécifié dans votre configuration (%s) n\'existe pas.'; -$lang['specified_uidpool'] = 'L\'auto_uid_number_mechanism a été défini à search dans votre - configuration pour le serveur %s, mais vous n\'avez pas défini - auto_uid_number_search_base. Veuillez le spécifier avant de continuer.'; -$lang['auto_uid_invalid_value'] = 'Une valeur non valide a été spécifiée pour auto_uid_number_mechanism (%s) +$lang['specified_uidpool'] = 'Le méchanisme "auto_uid_number_mechanism" a été défini à search dans votre + configuration pour le serveur %s, mais la directive "auto_uid_number_search_base" n\'est pad définie. Veuillez le spécifier avant de continuer.'; +$lang['auto_uid_invalid_credential'] = 'Impossible d\'effectuer un "bind" à %s avec vos droits pour "auto_uid". Veuillez S\'il vous plaît vérifier votre fichier de configuration.'; +$lang['bad_auto_uid_search_base'] = 'Votre fichier de configuration spécifie un invalide auto_uid_search_base pour le serveur %s'; +$lang['auto_uid_invalid_value'] = 'Une valeur non valide a été spécifiée pour le méchaninsme "auto_uid_number_mechanism" (%s) dans votre configuration. Seul uidpool et search sont valides. - Veuillez corriger ce problème.'; + Veuillez corriger ce problème.'; $lang['error_auth_type_config'] = 'Erreur: Vous avez une erreur dans votre fichier de configuration.Les valeurs - supportées pour \'auth_type\' sont \'config\' et \'form\' dans la section $servers. - Vous avez mis \'%s\', ce qui n\'est pas autorisé.'; + supportées pour \'auth_type\' sont \'config\' et \'form\' dans la section $servers. + Vous avez mis \'%s\', ce qui n\'est pas autorisé.'; $lang['php_install_not_supports_tls'] = 'Votre installation PHP ne supporte pas TLS.'; -$lang['could_not_start_tls'] = 'Impossible de démarrer TLS.
Veuillez,s\'il vous plaît, vérifier la configuration de votre serveur LDAP.'; -$lang['auth_type_not_valid'] = 'Vous avez une erreur dans votre fichier de configuration. auth_type %s n\'est pas valide.'; +$lang['could_not_start_tls'] = 'Impossible de démarrer TLS.
Veuillez,s\'il vous plaît, vérifier la configuration de votre serveur LDAP.'; +$lang['could_not_bind_anon'] = 'Impossible d\'effectuer un "bind" anonyme.'; +$lang['anonymous_bind'] = 'Bind Anonyme'; +$lang['bad_user_name_or_password'] = 'Mauvais nom d\'utilisateur ou mot de passe. Veuillez recommencer s\'il vous plaît.'; +$lang['redirecting_click_if_nothing_happens'] = 'Redirection... Cliquez ici si rien ne se passe.'; +$lang['successfully_logged_in_to_server'] = 'Login réussi sur le serveur %s'; +$lang['could_not_set_cookie'] = 'Impossible d\'activer les cookies.'; $lang['ldap_said'] = 'LDAP said: %s

'; $lang['ferror_error'] = 'Erreur'; $lang['fbrowse'] = 'naviguer'; $lang['delete_photo'] = 'Supprimer la photo'; $lang['install_not_support_blowfish'] = 'Votre installation PHP ne support pas l\'encryption blowfish.'; -$lang['install_no_mash'] = 'Votre installation PHP ne supporte pas la fonction mhash(). Impossible de créer un hash SHA.'; +$lang['install_no_mash'] = 'Votre installation PHP ne supporte pas la fonction mhash(). Impossible de créer un hash SHA.'; $lang['jpeg_contains_errors'] = 'jpegPhoto contient des erreurs
'; -$lang['ferror_number'] = 'Numéro de l\'erreur: %s (%s)

'; +$lang['ferror_number'] = 'Numéro de l\'erreur: %s (%s)

'; $lang['ferror_discription'] = 'Description: %s

'; -$lang['ferror_number_short'] = 'Numé de l\'erreur: %s

'; +$lang['ferror_number_short'] = 'Numé de l\'erreur: %s

'; $lang['ferror_discription_short'] = 'Description: (pas de description disponible)
'; -$lang['ferror_submit_bug'] = 'Est-ce un bogue de phpLDAPadmin? Si c\'est le cas,veuillez s\'il vous plaît le rapporter.'; -$lang['ferror_unrecognized_num'] = 'Numéro de l\'erreur non reconnu: '; +$lang['ferror_submit_bug'] = 'Est-ce un bogue de phpLDAPadmin? Si c\'est le cas,veuillez s\'il vous plaît le rapporter.'; +$lang['ferror_unrecognized_num'] = 'Numéro de l\'erreur non reconnu: '; $lang['ferror_nonfatil_bug'] = '
+ Vous avez trouvé un bogue non fatal dans phpLDAPAdmin!
- Vous avez trouvé un bogue non fatal dans phpLDAPAdmin!
Erreur:%s (%s)
Fichier:
Erreur:%s (%s)
Fichier: %s ligne %s, origine de l\'appel %s
Versions:PLA: %s, PHP: %s, SAPI: %s
Serveur Web:%s
- S\'il vous plaît, veuillez rapporter ce bogue en cliquant ici.

'; -$lang['ferror_congrats_found_bug'] = 'Félicitations! Vous avez trouvé un bogue dans phpLDAPadmin.

+ S\'il vous plaît, veuillez rapporter ce bogue en cliquant ici.

'; +$lang['ferror_congrats_found_bug'] = 'Félicitations! Vous avez trouvé un bogue dans phpLDAPadmin.

@@ -331,11 +427,11 @@ $lang['ferror_congrats_found_bug'] = 'Félicitations! Vous avez trouv&eacu
Erreur:%s
Niveau:%s
Serveur Webr:%s

- S\'il vous plaît, veuillez rapporter ce bogue en cliquant ici!'; + S\'il vous plaît, veuillez rapporter ce bogue en cliquant ici!'; //ldif_import_form $lang['import_ldif_file_title'] = 'Import de fichier LDIF'; -$lang['select_ldif_file'] = 'Sélectionner un fichier LDIF:'; +$lang['select_ldif_file'] = 'Sélectionner un fichier LDIF:'; $lang['select_ldif_file_proceed'] = 'Continuer >>'; //lldif_import @@ -343,13 +439,88 @@ $lang['add_action'] = 'Ajout de...'; $lang['delete_action'] = 'Supression de...'; $lang['rename_action'] = 'Renommage de...'; $lang['modify_action'] = 'Modification de...'; -$lang['failed'] = 'échec'; +$lang['warning_no_ldif_version_found'] = 'Aucun numéro de version trouvé. Version 1 supposé.'; +$lang['valid_dn_line_required'] = 'Une ligne avec un dn valide est requis.'; +$lang['valid_dn_line_required'] = 'A valid dn line is required.'; +$lang['missing_uploaded_file'] = 'Le fichier est manquant.'; +$lang['no_ldif_file_specified.'] = 'Aucun fichier LDIFspécifié. Veuillez réessayer, s\'il vous plaît.'; +$lang['ldif_file_empty'] = 'Le fichier LDIF est vide.'; +$lang['file'] = 'Fichier'; +$lang['number_bytes'] = '%s bytes'; + +$lang['failed'] = 'échec'; $lang['ldif_parse_error'] = 'Erreur lors de l\'analyse du fichier LDIF'; $lang['ldif_could_not_add_object'] = 'Impossible d\'ajouter l\'objet:'; $lang['ldif_could_not_rename_object'] = 'Impossible de renommer l\'objet:'; $lang['ldif_could_not_delete_object'] = 'Impossible de supprimer l\'objet:'; $lang['ldif_could_not_modify_object'] = 'Impossible de modifier l\'objet:'; -$lang['ldif_line_number'] = 'Numéro de ligne'; +$lang['ldif_line_number'] = 'Numéro de ligne'; $lang['ldif_line'] = 'Ligne'; +//delete_form +$lang['sure_permanent_delete_object']='Etes-vous certain de vouloir supprimer définitivement cet objet?'; +$lang['list_of_entries_to_be_deleted'] = 'Liste des entrées à supprimer:'; +$lang['dn'] = 'DN'; + +// Exports +$lang['export_format'] = 'Format'; +$lang['line_ends'] = 'Fin de ligne'; +$lang['must_choose_export_format'] = 'Vous devez sélectionner un format pour l\'exportation.'; +$lang['invalid_export_format'] = 'Format d\'exportation invalide'; +$lang['no_exporter_found'] = 'Aucun exporteur trouvé.'; +$lang['error_performing_search'] = 'Une erreur a eu lieu lors de la recherche.'; +$lang['showing_results_x_through_y'] = 'Affichage de %s à %s des résultats.'; +$lang['searching'] = 'Recherche...'; +$lang['size_limit_exceeded'] = 'Notice, la limite de taille pour la recherche est atteinte.'; +$lang['entry'] = 'Entrée'; +$lang['ldif_export_for_dn'] = 'Export LDIF pour: %s'; +$lang['generated_on_date'] = 'Generé par phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) le %s'; +$lang['total_entries'] = 'Nombre d\'entrées'; +$lang['dsml_export_for_dn'] = 'Export DSML pour: %s'; + + +// logins +$lang['could_not_find_user'] = 'Impossible de trouver l\'utilisateur "%s"'; +$lang['password_blank'] = 'Le champ pour le mot de passe est vide.'; +$lang['login_cancelled'] = 'Login interrompu.'; +$lang['no_one_logged_in'] = 'Personne n\'est loggé à ce serveur.'; +$lang['could_not_logout'] = 'Impossible de se déconnecter.'; +$lang['unknown_auth_type'] = 'auth_type inconnu: %s'; +$lang['logged_out_successfully'] = 'Déconnection réussie du serveur %s'; +$lang['authenticate_to_server'] = 'Authentification au serveur %s'; +$lang['warning_this_web_connection_is_unencrypted'] = 'Attention: Cette connection web n\'est pas cryptée.'; +$lang['not_using_https'] = 'Vous n\'utilisez pas \'https\'. Le navigateur web transmettra les informations de login en clair.'; +$lang['login_dn'] = 'Login DN'; +$lang['user_name'] = 'Nom de l\'utilisateur'; +$lang['password'] = 'Mot de passe'; +$lang['authenticate'] = 'Authentification'; + +// Entry browser +$lang['entry_chooser_title'] = 'Sélection de l\'entrée'; + +// Index page +$lang['need_to_configure'] = 'phpLDAPadmin a besoin d\'être configuré.Pour cela, éditer le fichier \'config.php\' . Un exemple de fichier de configuration est fourni dans \'config.php.example\''; + +// Mass deletes +$lang['no_deletes_in_read_only'] = 'Les suppressions ne sont pas permises en mode lecure seule.'; +$lang['error_calling_mass_delete'] = 'Erreur lors de l\'appel à mass_delete.php. mass_delete est manquant dans les variables POST.'; +$lang['mass_delete_not_array'] = 'La variable POST mass_delete \'est pas un tableau.'; +$lang['mass_delete_not_enabled'] = 'La suppression de masse n\'est pas disponible. Veuillez l\'activer dans config.php avant de continuer.'; +$lang['mass_deleting'] = 'Suppression en masse'; +$lang['mass_delete_progress'] = 'Progrès de la suppression sur le serveur "%s"'; +$lang['malformed_mass_delete_array'] = 'Le tableau mass_delete n\'est pas bien formé.'; +$lang['no_entries_to_delete'] = 'Vous n\'avez sélectionné aucune entrées à effacer.'; +$lang['deleting_dn'] = 'Deleting %s'; +$lang['total_entries_failed'] = '%s des %s entrées n\'ont pu être supprimées.'; +$lang['all_entries_successful'] = 'Toutes les entrées ont été supprimées avec succès.'; +$lang['confirm_mass_delete'] = 'Confirmation de la suppression en masse de %s entrées sur le serveur %s'; +$lang['yes_delete'] = 'Oui, supprimer!'; + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'Vous ne pouvez pas renommer une entrée qui a des sous-entrées'; +$lang['no_rdn_change'] = 'Le RDN n\'a pas été modifié'; +$lang['invalid_rdn'] = 'Valeur invalide du RDN'; +$lang['could_not_rename'] = 'Impossible de renommer l\'entrée'; + + ?> diff --git a/lang/recoded/hu.php b/lang/recoded/hu.php new file mode 100644 index 0000000..6f0ee89 --- /dev/null +++ b/lang/recoded/hu.php @@ -0,0 +1,556 @@ + + * with help from SIPOS Agnes + * $Header: /cvsroot/phpldapadmin/phpldapadmin/lang/recoded/hu.php,v 1.1 2004/05/23 21:12:04 i18phpldapadmin Exp $ + */ + +/* --- INSTRUCTIONS FOR TRANSLATORS --- + * + * If you want to write a new language file for your language, + * please submit the file on SourceForge: + * + * https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498548 + * + * Use the option "Check to Upload and Attach a File" at the bottom + * + * Thank you! + * + */ + +/* + * The $lang array contains all the strings that phpLDAPadmin uses. + * Each language file simply defines this aray with strings in its + * language. + */ + +// Search form +$lang['simple_search_form_str'] = 'Egyszerű keresési űrlap'; // 'Simple Search Form'; +$lang['advanced_search_form_str'] = 'Részletes keresési űrlap'; //'Advanced Search Form'; +$lang['server'] = 'Kiszolgáló'; //'Server'; +$lang['search_for_entries_whose'] = 'Bejegyzések keresése ahol'; //'Search for entries whose'; +$lang['base_dn'] = 'Alap-DN'; //'Base DN'; +$lang['search_scope'] = 'A keresés hatásköre'; //'Search Scope'; +$lang['show_attributes'] = 'MegjelenítendÅ‘ attribútumok'; //'Show Attributtes'; +$lang['Search'] = 'Keresés'; //'Search'; +$lang['predefined_search_str'] = 'ElÅ‘re definiált keresés kiválasztása'; //'Select a predefined search'; +$lang['predefined_searches'] = 'ElÅ‘re definiált keresések'; //'Predefined Searches'; +$lang['no_predefined_queries'] = 'Nincs keresés definiálva a config.php-ben.'; //'No queries have been defined in config.php.'; + +// Tree browser +$lang['request_new_feature'] = 'Új tulajdonság kérése'; //'Request a new feature'; +$lang['report_bug'] = 'Hiba jelentése'; //'Report a bug'; +$lang['schema'] = 'séma'; //'schema'; +$lang['search'] = 'keresés'; //'search'; +$lang['create'] = 'létrehozás'; //'create'; +$lang['info'] = 'infó'; //'info'; +$lang['import'] = 'import'; //'import'; +$lang['refresh'] = 'frissítés'; //'refresh'; +$lang['logout'] = 'kilépés'; //'logout'; +$lang['create_new'] = 'Új bejegyzés'; //'Create New'; +$lang['view_schema_for'] = 'Séma megtekintése:'; //'View schema for'; +$lang['refresh_expanded_containers'] = 'Az összes kiterjesztett tároló frissítése:'; //'Refresh all expanded containers for'; +$lang['create_new_entry_on'] = 'Új bejegyzés létrehozása:'; //'Create a new entry on'; +$lang['new'] = 'új'; //'new'; +$lang['view_server_info'] = 'A kiszolgáló információinak megtekintése'; //'View server-supplied information'; +$lang['import_from_ldif'] = 'LDIF-állományból bejegyzések importálása'; //'Import entries from an LDIF file'; +$lang['logout_of_this_server'] = 'Kilépés ebbÅ‘l a kiszolgálóból'; //'Logout of this server'; +$lang['logged_in_as'] = 'Belépve mint'; //'Logged in as: '; +$lang['read_only'] = 'csak olvasható'; //'read only'; +$lang['read_only_tooltip'] = 'A phpLDAPadmin adminisztrátora ezt az attribútumot csak olvashatóra állította'; //'This attribute has been flagged as read only by the phpLDAPadmin administrator'; +$lang['could_not_determine_root'] = 'Nem tudom megállapítani az LDAP-fa gyökerét.'; //'Could not determine the root of your LDAP tree.'; +$lang['ldap_refuses_to_give_root'] = 'Az LDAP-kiszolgálót úgy konfigurálták, hogy ne fedje föl az LDAP-fa gyökerét.'; //'It appears that the LDAP server has been configured to not reveal its root.'; +$lang['please_specify_in_config'] = 'Kérem adja meg a config.php-ban'; //'Please specify it in config.php'; +$lang['create_new_entry_in'] = 'Új bejegyzés létrehozása:'; //'Create a new entry in'; +$lang['login_link'] = 'Belépés...'; //'Login...'; +$lang['login'] = 'belépés'; //'login'; + +// Entry display +$lang['delete_this_entry'] = 'A bejegyzés törlése'; //'Delete this entry'; +$lang['delete_this_entry_tooltip'] = 'Ezt a döntést majd még meg kell erÅ‘síteni'; //'You will be prompted to confirm this decision'; +$lang['copy_this_entry'] = 'A bejegyzés másolása'; //'Copy this entry'; +$lang['copy_this_entry_tooltip'] = 'Az objektum másolása más helyre új DN-nel és/vagy másik kiszolgálóra'; //'Copy this object to another location, a new DN, or another server'; +$lang['export'] = 'Exportálás'; //'Export'; +$lang['export_tooltip'] = 'Az objektum kiírása'; //'Save a dump of this object'; +$lang['export_subtree_tooltip'] = 'Az objektum és az összes gyermekének kiírása'; //'Save a dump of this object and all of its children'; +$lang['export_subtree'] = 'Részfa exportálása'; //'Export subtree'; +$lang['create_a_child_entry'] = 'Gyermekbejegyzés létrehozása'; //'Create a child entry'; +$lang['rename_entry'] = 'A bejegyzés átnevezése'; 'Rename Entry'; +$lang['rename'] = 'Ãtnevezés'; //'Rename'; +$lang['add'] = 'Hozzáadás'; //'Add'; +$lang['view'] = 'Megtekintés'; //'View'; +$lang['view_one_child'] = 'A gyermek megtekintése (1 darab)'; //'View 1 child'; +$lang['view_children'] = 'A gyermekek megtekintése (%s darab)'; //'View %s children'; +$lang['add_new_attribute'] = 'Új attribútum hozzáadása'; //'Add new attribute'; +$lang['add_new_objectclass'] = 'Új objektumosztály hozzáadása'; //'Add new ObjectClass'; +$lang['hide_internal_attrs'] = 'BelsÅ‘ attribútumok elrejtése'; //'Hide internal attributes'; +$lang['show_internal_attrs'] = 'BelsÅ‘ attribútumok megjelenítése'; //'Show internal attributes'; +$lang['attr_name_tooltip'] = 'Kattintással megjelenik a(z) %s attribútumtípus sémabeli definíciója'; //'Click to view the schema defintion for attribute type \'%s\''; +$lang['none'] = 'nincs'; //'none'; +$lang['no_internal_attributes'] = 'Nincs belsÅ‘ attribútum'; //'No internal attributes'; +$lang['no_attributes'] = 'A bejegyzésnek nincs attribútuma'; //'This entry has no attributes'; +$lang['save_changes'] = 'Változások mentése'; //'Save Changes'; +$lang['add_value'] = 'érték hozzáadása'; //'add value'; +$lang['add_value_tooltip'] = 'Érték hozzáadása a(z) %s attribútumhoz'; //'Add an additional value to attribute \'%s\''; +$lang['refresh_entry'] = 'Frissítés'; //'Refresh'; +$lang['refresh_this_entry'] = 'Bejegyzés frissítése'; //'Refresh this entry'; +$lang['delete_hint'] = 'Tipp: Az attribútum törléséhez elÅ‘bb törölje a mezÅ‘t, majd kattintson a változtatások mentésére.'; //'Hint: To delete an attribute, empty the text field and click save.'; +$lang['attr_schema_hint'] = 'Tipp: Az attribútum sémájának megtekintéséhez kattintson az attribútum nevére.'; //'Hint: To view the schema for an attribute, click the attribute name.'; +$lang['attrs_modified'] = 'Módosult néhány attribútum (%s), s ezek kiemelve szerepelnek az alábbiakban.'; //'Some attributes (%s) were modified and are highlighted below.'; +$lang['attr_modified'] = 'Módosult egy attribútum (%s), s ez kiemelve szerepel az alábbiakban. '; //'An attribute (%s) was modified and is highlighted below.'; +$lang['viewing_read_only'] = 'A bejegyzés megtekintése csak olvasható üzemmódban.'; //'Viewing entry in read-only mode.'; +$lang['no_new_attrs_available'] = 'a bejegyzéshez nem tartozik új attribútum'; //'no new attributes available for this entry'; +$lang['no_new_binary_attrs_available'] = 'a bejegyzéshez nem tartozik új bináris attribútum'; //'no new binary attributes available for this entry'; +$lang['binary_value'] = 'Bináris érték'; //'Binary value'; +$lang['add_new_binary_attr'] = 'Új bináris attribútum hozzáadása'; //'Add new binary attribute'; +$lang['alias_for'] = 'Megj.: A(z) %s egy álneve (aliasa) a(z) %s attribútumnak'; //'Note: \'%s\' is an alias for \'%s\''; +$lang['download_value'] = 'érték letöltése'; //'download value'; +$lang['delete_attribute'] = 'attribútum törlése'; //'delete attribute'; +$lang['true'] = 'igaz'; //'true'; +$lang['false'] = 'hamis'; //'false'; +$lang['none_remove_value'] = 'nincs, érték törése'; //'none, remove value'; +$lang['really_delete_attribute'] = 'Attribútum tényleges törlése'; //'Really delete attribute'; +$lang['add_new_value'] = 'Új érték hozzáadása'; //'Add New Value'; + +// Schema browser +$lang['the_following_objectclasses'] = 'A következÅ‘ objektumosztályokat (objectClass) támogatja ez a kiszolgáló.'; //'The following objectClasses are supported by this LDAP server.'; +$lang['the_following_attributes'] = 'A következÅ‘ attribútumtípusokat (attributeType) támogatja ez a kiszolgáló.'; //'The following attributeTypes are supported by this LDAP server.'; +$lang['the_following_matching'] = 'A következÅ‘ illesztÅ‘szabályokat (matching rule) támogatja ez a kiszolgáló.'; //'The following matching rules are supported by this LDAP server.'; +$lang['the_following_syntaxes'] = 'A következÅ‘ szintaxisokat (syntax) támogatja ez a kiszolgáló.'; //'The following syntaxes are supported by this LDAP server.'; +$lang['schema_retrieve_error_1']= 'A kiszolgáló nem beszéli elég jól az LDAP-protokollt'; //'The server does not fully support the LDAP protocol.'; +$lang['schema_retrieve_error_2']= 'Ez a PHP-verzió nem tudja szabályosan végrehajtani a keresést.'; //'Your version of PHP does not correctly perform the query.'; +$lang['schema_retrieve_error_3']= 'Vagy végül is a phpLDAPadmin nem tudja hogyan kell a sémát letölteni errÅ‘l a kiszolgálóról.'; //'Or lastly, phpLDAPadmin doesn\'t know how to fetch the schema for your server.'; +$lang['jump_to_objectclass'] = 'Ugrás az objektumosztályhoz'; //'Jump to an objectClass'; +$lang['jump_to_attr'] = 'Ugrás az attribútumtípushoz'; //'Jump to an attribute type'; +$lang['jump_to_matching_rule'] = 'Ugrás az illesztÅ‘szabályhoz'; //'Jump to a matching rule'; +$lang['schema_for_server'] = 'Séma:'; //'Schema for server'; +$lang['required_attrs'] = 'KötelezÅ‘ attribútumok'; //'Required Attributes'; +$lang['optional_attrs'] = 'Opcionális attribútumok'; //'Optional Attributes'; +$lang['optional_binary_attrs'] = 'Opcionális bináris attribútumok'; //'Optional Binary Attributes'; +$lang['OID'] = 'OID'; //'OID'; +$lang['aliases']='Ãlnevek (alias)'; //'Aliases'; +$lang['desc'] = 'Leírás'; //'Description'; +$lang['no_description'] = 'nincs leírás'; //'no description'; +$lang['name'] = 'Név'; //'Name'; +$lang['equality']='EgyenlÅ‘ség'; //'Equality'; +$lang['is_obsolete'] = 'Ez az objektumosztály maradi'; //'This objectClass is obsolete.'; +$lang['inherits'] = 'KitÅ‘l öröklÅ‘dik'; //'Inherits from'; +$lang['inherited_from'] = 'KitÅ‘l örökölte:'; //'Inherited from'; +$lang['parent_to'] = 'Kinek a szülÅ‘je'; //'Parent to'; +$lang['jump_to_this_oclass'] = 'Ugrás ehhez az objektumosztály-definícióhoz'; //'Jump to this objectClass definition'; +$lang['matching_rule_oid'] = 'IllesztÅ‘szabály-OID'; //'Matching Rule OID'; +$lang['syntax_oid'] = 'Szintaxis-OID'; //'Syntax OID'; +$lang['not_applicable'] = 'nem alkalmazható'; //'not applicable'; +$lang['not_specified'] = 'nincs megadva'; //'not specified'; +$lang['character'] = 'karakter'; //'character'; +$lang['characters'] = 'karakter'; //'characters'; +$lang['used_by_objectclasses'] = 'Mely osztályok használják'; //'Used by objectClasses'; +$lang['used_by_attributes'] = 'Mely attribútumok használják'; //'Used by Attributes'; +$lang['maximum_length'] = 'Maximális hossz'; //'Maximum Length'; +$lang['attributes'] = 'Attribútumtípusok';//'Attribute Types'; +$lang['syntaxes'] = 'Szintaxisok'; //'Syntaxes'; +$lang['matchingrules'] = 'IllesztÅ‘szabályok'; //'Matching Rules'; +$lang['oid'] = 'OID'; //'OID'; +$lang['obsolete'] = 'Maradi'; //'Obsolete'; +$lang['ordering'] = 'Sorbarendezés'; //'Ordering'; +$lang['substring_rule'] = 'Alfüzér-szabály'; //'Substring Rule'; +$lang['single_valued'] = 'Egyértékű'; //'Single Valued'; +$lang['collective'] = 'Kollektív'; //'Collective'; +$lang['user_modification'] = 'Felhasználó-módosítás'; //'User Modification'; +$lang['usage'] = 'Használat'; //'Usage'; +$lang['could_not_retrieve_schema_from'] = 'Nem tudom a sémát elérni,'; //'Could not retrieve schema from'; +$lang['type']='Típus'; //'Type'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'A(z) %s bejegyzés sikeresen törölve.'; //'Entry %s deleted successfully.'; +$lang['you_must_specify_a_dn'] = 'A DN-t meg kell adni'; //'You must specify a DN'; +$lang['could_not_delete_entry'] = 'Nem tudom a(z) %s bejegyzést törölni'; //'Could not delete the entry: %s'; +$lang['no_such_entry'] = 'Nincs ilyen bejegyzés: %s'; //'No such entry: %s'; +$lang['delete_dn'] = 'A(z) %s törlése'; //'Delete %s'; +$lang['permanently_delete_children'] = 'Az összes gyermeket is töröljem?'; //'Permanently delete all children also?'; +$lang['entry_is_root_sub_tree'] = 'Ez a bejegyzés egy %s bejegyzést tartalmazó részfa gyökere.'; //'This entry is the root of a sub-tree containing %s entries.'; +$lang['view_entries'] = 'bejegyzések megtekintése'; //'view entries'; +$lang['confirm_recursive_delete'] = 'Rekurzív módon törölhetem ezt a bejegyzést, és mind a(z) %s gyermekét. Lásd alul a bejegyzéseket, amelyeket törölnék. Óhajtja törölni?'; //'phpLDAPadmin can recursively delete this entry and all %s of its children. See below for a list of all the entries that this action will delete. Do you want to do this?'; +$lang['confirm_recursive_delete_note'] = 'Megj.: Ez a törlés veszélyes lehet. A műveletet nem lehet visszavonni!'; //'Note: this is potentially very dangerous and you do this at your own risk. This operation cannot be undone. Take into consideration aliases, referrals, and other things that may cause problems.'; +$lang['delete_all_x_objects'] = 'Mind a(z) %s objektum törlése'; //'Delete all %s objects'; +$lang['recursive_delete_progress'] = 'A rekurzív törlés folyamatban'; //'Recursive delete progress'; +$lang['entry_and_sub_tree_deleted_successfully'] = 'A(z) %s bejegyzés és a részfa sikeresen törölve.'; //'Entry %s and sub-tree deleted successfully.'; +$lang['failed_to_delete_entry'] = 'A(z) %s bejegyzés törlése sikertelen'; //'Failed to delete entry %s'; +$lang['list_of_entries_to_be_deleted'] = 'A törlendÅ‘ bejegyzések listája:'; //'List of entries to be deleted:'; +$lang['sure_permanent_delete_object']='Biztos törölni óhajtja ezt az objektumot?'; //'Are you sure you want to permanently delete this object?'; +$lang['dn'] = 'DN'; //'DN'; + +// Deleting attributes +$lang['attr_is_read_only'] = 'A(z) %s attribútum csak olvasható a phpLDAPadmin konfigurációja szerint.'; //'The attribute "%s" is flagged as read-only in the phpLDAPadmin configuration.'; +$lang['no_attr_specified'] = 'Nincs megadva az attribútumnév.'; //'No attribute name specified.'; +$lang['no_dn_specified'] = 'Nincs megadva a DN'; //'No DN specified'; + +// Adding attributes +$lang['left_attr_blank'] = 'Az attribútumértéket üresen hagyta. Kérem lépjen vissza és próbálja újra.'; //'You left the attribute value blank. Please go back and try again.'; +$lang['failed_to_add_attr'] = 'Nem tudtam az attribútumot hozzáadni.'; //'Failed to add the attribute.'; +$lang['file_empty'] = 'A kiválasztott állomány vagy üres, vagy nem létezik. Kérem lépjen vissza és próbálja újra.'; //'The file you chose is either empty or does not exist. Please go back and try again.'; +$lang['invalid_file'] = 'Biztonsági hiba: a feltöltendÅ‘ állomány veszélyes elemeket tartalmazhat.'; //'Security error: The file being uploaded may be malicious.'; +$lang['warning_file_uploads_disabled'] = 'A PHP-konfiguráció tiltja az állományok feltöltését. Kérem ellenÅ‘rizze a php.ini állományt.'; //'Your PHP configuration has disabled file uploads. Please check php.ini before proceeding.'; +$lang['uploaded_file_too_big'] = 'A feltöltött állomány túl nagy. Kérem ellenÅ‘rizze a php.ini állományban a upload_max_size beállítást.'; //'The file you uploaded is too large. Please check php.ini, upload_max_size setting'; +$lang['uploaded_file_partial'] = 'A kiválasztott állomány csak részben töltÅ‘dött föl valószínűleg hálózati hiba miatt.'; //'The file you selected was only partially uploaded, likley due to a network error.'; +$lang['max_file_size'] = 'Maximális állományméret: %s'; //'Maximum file size: %s'; + +// Updating values +$lang['modification_successful'] = 'A módosítás sikerült!'; //'Modification successful!'; +$lang['change_password_new_login'] = 'Mivel megváltoztatta a jelszót most újra be kell jelentkeznie az új jelszóval.'; //'Since you changed your password, you must now login again with your new password.'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'Új kötelezÅ‘ attribútumok'; //'New Required Attributes'; +$lang['requires_to_add'] = 'Ez a művelet megközeveteli hogy hozzáadjon'; //'This action requires you to add'; +$lang['new_attributes'] = 'új attribútumo(ka)t'; //'new attributes'; +$lang['new_required_attrs_instructions'] = 'Az új objektumosztály hozzáadásához'; //'Instructions: In order to add this objectClass to this entry, you must specify'; +$lang['that_this_oclass_requires'] = 'kell megadni ezen az űrlapon.'; //'that this objectClass requires. You can do so in this form.'; +$lang['add_oclass_and_attrs'] = 'Objektumosztály és attribútumok hozzáadása'; //'Add ObjectClass and Attributes'; +$lang['objectclasses'] = 'Objektumosztályok'; //'ObjectClasses'; + +// General +$lang['chooser_link_tooltip'] = 'Kattintásra egy új ablak jön föl, amelyben egy bejegyzést választhat a DN alapján.'; //'Click to popup a dialog to select an entry (DN) graphically'; +$lang['no_updates_in_read_only_mode'] = 'Nem lehet módosítani mikor a kiszolgáló csak olvasható üzemmódban van'; //'You cannot perform updates while server is in read-only mode'; +$lang['bad_server_id'] = 'Hibás kiszolgáló-azonosító'; //'Bad server id'; +$lang['not_enough_login_info'] = 'Kevés az adat a belépéshez. Kérem ellenÅ‘rizze a konfigurációt.'; //'Not enough information to login to server. Please check your configuration.'; +$lang['could_not_connect'] = 'Nem tudok csatlakozni az LDAP-kiszolgálóhoz.'; //'Could not connect to LDAP server.'; +$lang['could_not_connect_to_host_on_port'] = 'Nem tudok csatlakozni a(z) %s géphez a(z) %s porton.'; //'Could not connect to "%s" on port "%s"'; +$lang['could_not_perform_ldap_mod_add'] = 'Nem tudom végrehajtani az ldap_mod_add műveletet.'; //'Could not perform ldap_mod_add operation.'; +$lang['bad_server_id_underline'] = 'Hibás kiszolgáló-azonosító: '; //'Bad server_id: '; +$lang['success'] = 'Siker'; //'Success'; +$lang['server_colon_pare'] = 'Kiszolgáló: '; //'Server: '; +$lang['look_in'] = 'Keresés itt: '; //'Looking in: '; +$lang['missing_server_id_in_query_string'] = 'Nincs megadva a kiszolgáló-azonosító a keresési füzérben!'; //'No server ID specified in query string!'; +$lang['missing_dn_in_query_string'] = 'Nincs megadva a DN a keresési füzérben!'; //'No DN specified in query string!'; +$lang['back_up_p'] = 'Vissza...'; //'Back Up...'; +$lang['no_entries'] = 'nics bejegyzés'; //'no entries'; +$lang['not_logged_in'] = 'Nincs belépve'; //'Not logged in'; +$lang['could_not_det_base_dn'] = 'Nem tudom az alap-DN-t meghatározni'; //'Could not determine base DN'; +$lang['please_report_this_as_a_bug'] = 'Kérjük jelentse ezt a hibát.'; //'Please report this as a bug.'; +$lang['reasons_for_error'] = 'Ez több dolog miatt történhet, például:'; //'This could happen for several reasons, the most probable of which are:'; +$lang['yes'] = 'Igen'; //'Yes'; +$lang['no'] = 'Nem'; //'No'; +$lang['go'] = 'Mehet'; //'Go'; +$lang['delete'] = 'Törlés'; //'Delete'; +$lang['back'] = 'Vissza'; //'Back'; +$lang['object'] = 'objektum'; //'object'; +$lang['delete_all'] = 'Minden törlése'; //'Delete all'; +$lang['url_bug_report'] = 'https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; //'https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; +$lang['hint'] = 'tipp'; //'hint'; +$lang['bug'] = 'hiba'; //'bug'; +$lang['warning'] = 'figyelmeztetés'; //'warning'; +$lang['light'] = 'lámpa'; // the word 'light' from 'light bulb' +$lang['proceed_gt'] = 'Tovább >>'; //'Proceed >>'; + + +// Add value form +$lang['add_new'] = 'Új'; //'Add new'; +$lang['value_to'] = 'érték, RDN:'; //'value to'; +$lang['distinguished_name'] = 'MegkülönböztetÅ‘ név (DN)'; //'Distinguished Name'; +$lang['current_list_of'] = 'Az aktuális lista'; //'Current list of'; +$lang['values_for_attribute'] = 'értéket tartalmaz. Attribútum:'; //'values for attribute'; +$lang['inappropriate_matching_note'] = 'Megj.: Ha nincs beállítva EGYENLÅSÉG-szabály ehhez az attribútumhoz a kiszolgáló az ún. inappropriate matching hibát adja vissza.'; //'Note: You will get an "inappropriate matching" error if you have not setup an EQUALITY rule on your LDAP server for this attribute.'; +$lang['enter_value_to_add'] = 'Adja meg a kívánt értéket:'; //'Enter the value you would like to add:'; +$lang['new_required_attrs_note'] = 'Megj.: Lehet hogy új kötelezÅ‘ attribútumokat kell bevinnie ehhez az objektumosztályhoz'; //'Note: you may be required to enter new attributes that this objectClass requires'; +$lang['syntax'] = 'Szintaxis'; //'Syntax'; + +//copy.php +$lang['copy_server_read_only'] = 'Nem lehet módosítást eszközölni amíg a kiszolgáló csak olvasható üzemmódban van'; //'You cannot perform updates while server is in read-only mode'; +$lang['copy_dest_dn_blank'] = 'Ãœresen hagyta a cél-DN mezejét'; //'You left the destination DN blank.'; +$lang['copy_dest_already_exists'] = 'A célbejegyzés (%s) már létezik.'; //'The destination entry (%s) already exists.'; +$lang['copy_dest_container_does_not_exist'] = 'A cél-tároló (%s) nem létezik.'; //'The destination container (%s) does not exist.'; +$lang['copy_source_dest_dn_same'] = 'A forrás- és cél-DN ugyanaz.'; //'The source and destination DN are the same.'; +$lang['copy_copying'] = 'Másolás: '; //'Copying '; +$lang['copy_recursive_copy_progress'] = 'Rekurzív másolás folyamatban'; //'Recursive copy progress'; +$lang['copy_building_snapshot'] = 'A fáról készítek egy pillanatfelvételt a másoláshoz... '; //'Building snapshot of tree to copy... '; +$lang['copy_successful_like_to'] = 'A másolás sikerült! Szeretné-e '; //'Copy successful! Would you like to '; +$lang['copy_view_new_entry'] = 'megtekinteni az új bejegyzést'; //'view the new entry'; +$lang['copy_failed'] = 'A DN másolása nem sikerült: '; //'Failed to copy DN: '; + +//edit.php +$lang['missing_template_file'] = 'Figyelem: hiányzik a mintaállomány.'; //'Warning: missing template file, '; +$lang['using_default'] = 'Az alapértelmezés használata.'; //'Using default.'; +$lang['template'] = 'Minta'; //'Template'; +$lang['must_choose_template'] = 'Választania kell egy mintát.'; //'You must choose a template'; +$lang['invalid_template'] = 'A(z) %s hibás minta.'; //'%s is an invalid template'; +$lang['using_template'] = 'használt minta:'; //'using template'; +$lang['go_to_dn'] = 'Menj a(z) %s DN-hez'; //'Go to %s'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Másolás: '; //'Copy '; +$lang['copyf_to_new_object'] = '; az új objektum'; //'to a new object'; +$lang['copyf_dest_dn'] = 'Cél-DN'; //'Destination DN'; +$lang['copyf_dest_dn_tooltip'] = 'A másolással létrejövÅ‘ új bejegyzés teljes DN-je'; //'The full DN of the new entry to be created when copying the source entry'; +$lang['copyf_dest_server'] = 'Célkiszolgáló'; //'Destination Server'; +$lang['copyf_note'] = 'Tipp: A kiszolgálók közötti másolás csak akkor működik, ha nincs séma-sértés'; //'Hint: Copying between different servers only works if there are no schema violations'; +$lang['copyf_recursive_copy'] = 'Az objektum összes gyermekeinek rekurzív másolása.'; //'Recursively copy all children of this object as well.'; +$lang['recursive_copy'] = 'Rekurzív másolás'; //'Recursive copy'; +$lang['filter'] = 'SzűrÅ‘'; //'Filter'; +$lang['filter_tooltip'] = 'Rekurzív másolásnál csak azokat másolja le, amelyekre illik ez a szűrÅ‘'; //'When performing a recursive copy, only copy those entries which match this filter'; + +//create.php +$lang['create_required_attribute'] = 'A(z) %s kötelezÅ‘ attribútum értékét üresen hagyta.'; //'You left the value blank for required attribute (%s).'; +$lang['redirecting'] = 'Ãtirányítás...'; //'Redirecting...'; +$lang['here'] = 'ide'; //'here'; +$lang['create_could_not_add'] = 'Nem tudom az objektumot létrehozni a kiszolgálón.'; //'Could not add the object to the LDAP server.'; + +//create_form.php +$lang['createf_create_object'] = 'Objektum létrehozása'; //'Create Object'; +$lang['createf_choose_temp'] = 'Válasszon mintát'; //'Choose a template'; +$lang['createf_select_temp'] = 'Válasszon mintát a létrehozási folyamathoz'; //'Select a template for the creation process'; +$lang['createf_proceed'] = 'Tovább'; //'Proceed'; +$lang['rdn_field_blank'] = 'Az RDN-mezÅ‘t üresen hagyta'; //'You left the RDN field blank.'; +$lang['container_does_not_exist'] = 'A(z) %s tároló nem létezik. Kérem próbálja újra.'; //'The container you specified (%s) does not exist. Please try again.'; +$lang['no_objectclasses_selected'] = 'Nem választott objektumosztályt ehhez az objektumhoz. Kérem lépjen vissza és válasszon egyet.'; //'You did not select any ObjectClasses for this object. Please go back and do so.'; +$lang['hint_structural_oclass'] = 'Tipp: Legalább egy strukturális objektumosztályt kell választania'; //'Hint: You must choose at least one structural objectClass'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'Kiszolgáló:'; //'On server'; +$lang['ctemplate_no_template'] = 'Nincs megadva a minta a POST-változóban.'; //'No template specified in POST variables.'; +$lang['ctemplate_config_handler'] = 'A konfiguráció egy kezelÅ‘t ad meg:'; //'Your config specifies a handler of'; +$lang['ctemplate_handler_does_not_exist'] = 'ehhez a mintához. De ez a kezelÅ‘ nincs a mintakönyvtárban.'; //'for this template. But, this handler does not exist in the templates/creation directory.'; +$lang['create_step1'] = 'ElsÅ‘ lépés: Név és objektumosztály(ok)'; //'Step 1 of 2: Name and ObjectClass(es)'; +$lang['create_step2'] = 'Második lépés: Adja meg az attribútumokat és értékeiket'; //'Step 2 of 2: Specify attributes and values'; +$lang['relative_distinguished_name'] = 'Viszonylagos megkülönböztetÅ‘ név (RDN)'; //'Relative Distinguished Name'; +$lang['rdn'] = 'RDN'; //'RDN'; +$lang['rdn_example'] = '(példa: cn=ÚjEmber)'; //'(example: cn=MyNewPerson)'; +$lang['container'] = 'Tároló'; //'Container'; +$lang['alias_for'] = 'A(z) %s álneve a(z) %s attribútumnévnek'; //'Alias for %s'; + +// search.php +$lang['you_have_not_logged_into_server'] = 'Nem lépett be a kiválasztott kiszolgálóba, s így nem tudok keresni.'; //'You have not logged into the selected server yet, so you cannot perform searches on it.'; +$lang['click_to_go_to_login_form'] = 'Kattintson ide a belépési űrlap eléréséhez'; //'Click here to go to the login form'; +$lang['unrecognized_criteria_option'] = 'Ismeretlen kritérium-opció: '; //'Unrecognized criteria option: '; +$lang['if_you_want_to_add_criteria'] = 'Ha kritériumot kíván adni a listához szerkessze meg a search.php-t, hogy kezelje le azokat. Most kilépek.'; //'If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting.'; +$lang['entries_found'] = 'A megtalált bejegyzések: '; //'Entries found: '; +$lang['filter_performed'] = 'Használt szűrÅ‘: '; //'Filter performed: '; +$lang['search_duration'] = 'A phpLDAPadmin'; //'Search performed by phpLDAPadmin in'; +$lang['seconds'] = 's alatt hajtotta végre a keresést'; //'seconds'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'A keresés hatásköre'; //'The scope in which to search'; +$lang['scope_sub'] = 'Az egész részfa'; //'Sub (entire subtree)'; +$lang['scope_one'] = 'Egy szint az alap-DN alatt'; //'One (one level beneath base)'; +$lang['scope_base'] = 'Csak az alap-DN'; //'Base (base dn only)'; +$lang['standard_ldap_search_filter'] = 'Szabványos LDAP-szűrÅ‘, pl. (&(sn=Kovács)(givenname=István))'; //'Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))'; +$lang['search_filter'] = 'KeresÅ‘szűrÅ‘'; //'Search Filter'; +$lang['list_of_attrs_to_display_in_results'] = 'A megjelenítendÅ‘ találatok attribútumainak vesszÅ‘vel elválasztott listája'; //'A list of attributes to display in the results (comma-separated)'; +$lang['show_attributes'] = 'Attribútumok megjelenítése'; //'Show Attributes'; + +// search_form_simple.php +$lang['search_for_entries_whose'] = 'Bejegyzések keresése, ahol:'; //'Search for entries whose:'; +$lang['equals'] = 'egyenlÅ‘'; //'equals'; +$lang['starts with'] = 'kezdet'; //'starts with'; +$lang['contains'] = 'tartalmaz'; //'contains'; +$lang['ends with'] = 'végzÅ‘dés'; //'ends with'; +$lang['sounds like'] = 'hangzás'; //'sounds like'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'Nem tudom az információt letölteni a kiszolgálóról'; //'Could not retrieve LDAP information from the server'; +$lang['server_info_for'] = 'Kiszolgáló-infó: '; //'Server info for: '; +$lang['server_reports_following'] = 'A kiszolgáló ezeket az információkat közölte önmagáról'; //'Server reports the following information about itself'; +$lang['nothing_to_report'] = 'A kiszolgálónak nincs mit elküldenie'; //'This server has nothing to report.'; + +//update.php +$lang['update_array_malformed'] = 'Az update_array hibés. Ez a phpLDAPadmin hibája lehet, kérem jelentse.'; //'update_array is malformed. This might be a phpLDAPadmin bug. Please report it.'; +$lang['could_not_perform_ldap_modify'] = 'Nem tudom elvégezni az ldap_modify műveletet.'; //'Could not perform ldap_modify operation.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Érvényesíteni kívánja a változásokat?'; //'Do you want to make these changes?'; +$lang['attribute'] = 'Attribútumok'; //'Attribute'; +$lang['old_value'] = 'Régi érték'; //'Old Value'; +$lang['new_value'] = 'Új érték'; //'New Value'; +$lang['attr_deleted'] = '[attribútum törölve]'; //'[attribute deleted]'; +$lang['commit'] = 'Érvényesítés'; //'Commit'; +$lang['cancel'] = 'Mégsem'; //'Cancel'; +$lang['you_made_no_changes'] = 'Nem történt változtatás'; //'You made no changes'; +$lang['go_back'] = 'Vissza'; //'Go back'; + +// welcome.php +$lang['welcome_note'] = 'A bal oldali menüvel tájékozódhat a programban'; //'Use the menu to the left to navigate'; +$lang['credits'] = 'Köszönetnyilvánítás'; //'Credits'; +$lang['changelog'] = 'Változtatások naplója'; //'ChangeLog'; +$lang['donate'] = 'Adományozzon'; //'Donate'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Nem biztonságos állománynév: '; //'Unsafe file name: '; +$lang['no_such_file'] = 'Nincs ilyen állomány: '; //'No such file: '; + +//function.php +$lang['auto_update_not_setup'] = 'Az auto_uid_numbers engedélyezett a konfigurációban a(z) %s kiszolgálóhoz, de az auto_uid_number_mechanism nincs megadva. Kérem írja be ezt az értéket.'; +//'You have enabled auto_uid_numbers for %s in your configuration, +// but you have not specified the auto_uid_number_mechanism. Please correct +// this problem.'; +$lang['uidpool_not_set'] = 'A konfigurációban az auto_uid_number_mechanism értéke uidpool a(z) %s kiszolgálóhoz, de nem adta meg az auto_uid_number_uid_pool_dn értékét. Kérem írja be ezt az értéket.'; +//'You specified the "auto_uid_number_mechanism" as "uidpool" +// in your configuration for server %s, but you did not specify the +// audo_uid_number_uid_pool_dn. Please specify it before proceeding.'; +$lang['uidpool_not_exist'] = 'A konfigurációban megadott uidPool nem létezik (%s).'; +//'It appears that the uidPool you specified in your configuration ("%s") +// does not exist.'; +$lang['specified_uidpool'] = 'A konfigurációban az auto_uid_number_mechanism értéke search a(z) %s kiszolgálóhoz, de nem adta meg az auto_uid_number_search_base értékét. Kérem írja be ezt az értéket.'; +//'You specified the "auto_uid_number_mechanism" as "search" in your +// configuration for server %s, but you did not specify the +// "auto_uid_number_search_base". Please specify it before proceeding.'; +$lang['auto_uid_invalid_credential'] = 'A bind művelet sikertelen a(z) %s kiszolgálóhoz az auto_uid használatával. Kérem ellenÅ‘rizze a konfigurációt. '; //'Unable to bind to %s with your with auto_uid credentials. Please check your configuration file.'; +$lang['bad_auto_uid_search_base'] = 'A konfigurációban érvénytelen auto_uid_search_base van megadva a(z) %s kiszolgálóhoz.'; //'Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s'; +$lang['auto_uid_invalid_value'] = 'Érvénytelen értéket adott meg a auto_uid_number_mechanism-nak (%s). Csak uidpool és search a megengedett érték.'; +//'You specified an invalid value for auto_uid_number_mechanism ("%s") +// in your configration. Only "uidpool" and "search" are valid. +// Please correct this problem.'; +$lang['error_auth_type_config'] = 'Csak a session, cookie és config a megengedett értékek az auth_type-nak a konfigurációban. A megadott helytelen érték: %s.'; +//'Error: You have an error in your config file. The only three allowed values +// for auth_type in the $servers section are \'session\', \'cookie\', and \'config\'. You entered \'%s\', +// which is not allowed. '; +$lang['php_install_not_supports_tls'] = 'Ez a PHP nem támogatja a TLS-t.'; //'Your PHP install does not support TLS.'; +$lang['could_not_start_tls'] = 'Nem tudom a TLS-t elindítani. Kérem ellenÅ‘rizze az LDAP-kiszolgálót és a konfigurációt.'; //'Could not start TLS. Please check your LDAP server configuration.'; +$lang['could_not_bind_anon'] = 'Az anonymous bind művelet nem sikerült.'; //'Could not bind anonymously to server.'; +$lang['could_not_bind'] = 'A bind művelet sikertelen az LDAP-kiszolgálóhoz.'; //'Could not bind to the LDAP server.'; +$lang['anonymous_bind'] = 'Anonymous bind'; //'Anonymous Bind'; +$lang['bad_user_name_or_password'] = 'Helytelen felhasználónév vagy jelszó. Kérem próbálja újra.'; //'Bad username or password. Please try again.'; +$lang['redirecting_click_if_nothing_happens'] = 'Ãtirányítás... kérem kattintson ide, ha semmi sem történik.'; //'Redirecting... Click here if nothing happens.'; +$lang['successfully_logged_in_to_server'] = 'A(z) %s kiszolgálóhoz sikeresen bejelentkezett.'; //'Successfully logged into server %s'; +$lang['could_not_set_cookie'] = 'Nem tudok sütit beállítani.'; //'Could not set cookie.'; +$lang['ldap_said'] = 'Az LDAP ezt mondta: %s'; //'LDAP said: %s'; +$lang['ferror_error'] = 'Hiba'; //'Error'; +$lang['fbrowse'] = 'böngészés'; //'browse'; +$lang['delete_photo'] = 'Fotó törlése'; //'Delete Photo'; +$lang['install_not_support_blowfish'] = 'Ez a PHP nem támogatja a blowfish titkosítást.'; //'Your PHP install does not support blowfish encryption.'; +$lang['install_not_support_md5crypt'] = 'Ez a PHP nem támogatja az md5crypt titkosítást.'; //'Your PHP install does not support md5crypt encryption.'; +$lang['install_no_mash'] = 'Ez a PHP nem tartalmazza az mhash() függvényt. Nem tudok SHA hash-eket kezelni.'; //'Your PHP install does not have the mhash() function. Cannot do SHA hashes.'; +$lang['jpeg_contains_errors'] = 'A jpegPhoto hibás
'; //'jpegPhoto contains errors
'; +$lang['ferror_number'] = 'Hibaszám: %s (%s)'; //'Error number: %s (%s)'; +$lang['ferror_discription'] = 'Leírás: %s

'; //'Description: %s

'; +$lang['ferror_number_short'] = 'Hibaszám: %s

'; //'Error number: %s

'; +$lang['ferror_discription_short'] = 'Leírás: (nincs leírás)
'; //'Description: (no description available)
'; +$lang['ferror_submit_bug'] = 'Ez a phpLDAPadmin hibája? Ha igen, kérem jelentse.'; //'Is this a phpLDAPadmin bug? If so, please report it.'; +$lang['ferror_unrecognized_num'] = 'Ismeretlen hibaszám: '; //'Unrecognized error number: '; +$lang['ferror_nonfatil_bug'] = '
+
+ Egy kisebb hibát talált a phpLDAPadmin-ban!
Hiba:%s (%s)
Ãllomány:%s. sor %s, hívó %s
Verziók:PLA: %s, PHP: %s, SAPI: %s +
Web-kiszolgáló:%s
+ Kérem jelentse a hibát, kattintson ide!.

'; +//'
+//
+// You found a non-fatal phpLDAPadmin bug!
Error:%s (%s)
File:%s line %s, caller %s
Versions:PLA: %s, PHP: %s, SAPI: %s +//
Web server:%s
+// Please report this bug by clicking here.

'; +$lang['ferror_congrats_found_bug'] = 'Gratulálunk! Hibát talált a phpLDAPadmin-ban.

+ + + + + + + + + + +
Hiba:%s
Szint:%s
Ãllomány:%s
Sor:%s
Hívó:%s
PLA Verzió:%s
PHP Verzió:%s
PHP SAPI:%s
Web-kiszolgáló:%s
+
+ Kérjük jelentse a hibát, kattintson alulra!'; +//'Congratulations! You found a bug in phpLDAPadmin.

+// +// +// +// +// +// +// +// +// +// +//
Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA Version:%s
PHP Version:%s
PHP SAPI:%s
Web server:%s
+//
+// Please report this bug by clicking below!'; + +//ldif_import_form +$lang['import_ldif_file_title'] = 'LDIF-állomány importálása'; //'Import LDIF File'; +$lang['select_ldif_file'] = 'LDIF-állomány kiválasztása'; //'Select an LDIF file:'; +$lang['select_ldif_file_proceed'] = 'Tovább >>'; //'Proceed >>'; +$lang['dont_stop_on_errors'] = 'Ne állj meg hiba esetén'; //'Don\'t stop on errors'; + +//ldif_import +$lang['add_action'] = 'Hozzáadás...'; //'Adding...'; +$lang['delete_action'] = 'Törlés...'; //'Deleting...'; +$lang['rename_action'] = 'Ãtnevezés'; //'Renaming...'; +$lang['modify_action'] = 'Módosítás...'; //'Modifying...'; +$lang['warning_no_ldif_version_found'] = 'Nem találtam verziószámot, feltételeztem, hogy 1-es.'; //'No version found. Assuming 1.'; +$lang['valid_dn_line_required'] = 'Érvényes DN-sor kell.'; //'A valid dn line is required.'; +$lang['missing_uploaded_file'] = 'A feltöltött állomány hiányzik.'; //'Missing uploaded file.'; +$lang['no_ldif_file_specified.'] = 'Nem adott meg LDIF-állományt. Kérem próbálja újra.'; //'No LDIF file specified. Please try again.'; +$lang['ldif_file_empty'] = 'A feltöltött LDIF-állomány üres.'; //'Uploaded LDIF file is empty.'; +$lang['empty'] = 'üres'; //'empty'; +$lang['file'] = 'Ãllomány'; //'File'; +$lang['number_bytes'] = '%s byte'; //'%s bytes'; + +$lang['failed'] = 'Sikertelen'; //'Failed'; +$lang['ldif_parse_error'] = 'LDIF-pásztázási hiba'; //'LDIF Parse Error'; +$lang['ldif_could_not_add_object'] = 'Nem tudom ezt az objektumot hozzáadni:'; //'Could not add object:'; +$lang['ldif_could_not_rename_object'] = 'Nem tudom ezt az objektumot átnevezni:'; //'Could not rename object:'; +$lang['ldif_could_not_delete_object'] = 'Nem tudom ezt az objektumot törölni:'; //'Could not delete object:'; +$lang['ldif_could_not_modify_object'] = 'Nem tudom ezt az objektumot módosítani:'; //'Could not modify object:'; +$lang['ldif_line_number'] = 'Sorszám:'; //'Line Number:'; +$lang['ldif_line'] = 'Sor:'; //'Line:'; + +// Exports +$lang['export_format'] = 'Export-formátum'; //'Export format'; +$lang['line_ends'] = 'Sorvégek'; //'Line ends'; +$lang['must_choose_export_format'] = 'Az export formátumát ki kell választani.'; //'You must choose an export format.'; +$lang['invalid_export_format'] = 'Az export formátuma érvénytelen'; //'Invalid export format'; +$lang['no_exporter_found'] = 'Nincs használható exportáló.'; //'No available exporter found.'; +$lang['error_performing_search'] = 'Keresés közben hibába akadtam.'; //'Encountered an error while performing search.'; +$lang['showing_results_x_through_y'] = 'A(z) %s és %s közé esÅ‘ találatok megjelenítése.'; //'Showing results %s through %s.'; +$lang['searching'] = 'Folyik a keresés...'; //'Searching...'; +$lang['size_limit_exceeded'] = 'Figyelem: a keresési méret korlátja túllépve.'; //'Notice, search size limit exceeded.'; +$lang['entry'] = 'Bejegyzés'; //'Entry'; +$lang['ldif_export_for_dn'] = 'A(z) %s LDIF exportja'; //'LDIF Export for: %s'; +$lang['generated_on_date'] = 'A phpLDAPadmin generálta, dátum: %s'; //'Generated by phpLDAPadmin on %s'; +$lang['total_entries'] = 'Bejegyzések száma összesen'; //'Total Entries'; +$lang['dsml_export_for_dn'] = 'A(z) %s DSLM exportja'; //'DSLM Export for: %s'; + +// logins +$lang['could_not_find_user'] = 'Nem találtam meg a(z) %s felhasználót'; //'Could not find a user "%s"'; +$lang['password_blank'] = 'A jelszó üresen maradt.'; //'You left the password blank.'; +$lang['login_cancelled'] = 'A bejelentkezést megszakították.'; //'Login cancelled.'; +$lang['no_one_logged_in'] = 'Arra a kiszolgálóra nincs bejelentkezve senki.'; //'No one is logged in to that server.'; +$lang['could_not_logout'] = 'Nem sikerült kilépni.'; //'Could not logout.'; +$lang['unknown_auth_type'] = 'Ismeretlen auth_type: %s'; //'Unknown auth_type: %s'; +$lang['logged_out_successfully'] = 'A kilépés sikerült a(z) %s kiszolgálóból'; //'Logged out successfully from server %s'; +$lang['authenticate_to_server'] = 'Azonosítsa magát a(z) %s kiszolgálón'; //'Authenticate to server %s'; +$lang['warning_this_web_connection_is_unencrypted'] = 'Figyelem: A kapcsolat a bögészÅ‘vel titkosítatlan.'; //'Warning: This web connection is unencrypted.'; +$lang['not_using_https'] = 'Nem https kapcsolatot használ. A böngészÅ‘ a bejelentkezés adatait sima szöveg formátumban fogja továbbítani'; //'You are not using \'https\'. Web browser will transmit login information in clear text.'; +$lang['login_dn'] = 'Bejelentkezési DN'; //'Login DN'; +$lang['user_name'] = 'A felhasználó neve'; //'User name'; +$lang['password'] = 'Jelszó'; //'Password'; +$lang['authenticate'] = 'Azonosítás'; //'Authenticate'; + +// Entry browser +$lang['entry_chooser_title'] = 'Bejegyzés kiválasztása'; //'Entry Chooser'; + +// Index page +$lang['need_to_configure'] = 'Konfigurálnia kell a phpLDAPadmint a config.php állomány szerkesztésével, amihez mintául a config.php.example szolgálhat.'; //'You need to configure phpLDAPadmin. Edit the file \'config.php\' to do so. An example config file is provided in \'config.php.example\''; + +// Mass deletes +$lang['no_deletes_in_read_only'] = 'Csak olvasható üzemmódban a törlés nem működik.'; //'Deletes not allowed in read only mode.'; +$lang['error_calling_mass_delete'] = 'Hiba a mass_delete.php hívásakor. A POST változók közül hiányzik a mass_delete.'; //'Error calling mass_delete.php. Missing mass_delete in POST vars.'; +$lang['mass_delete_not_array'] = 'A mass_delete POST változó nem tömb.'; //'mass_delete POST var is not an array.'; +$lang['mass_delete_not_enabled'] = 'A tömeges törlés nincs engedélyezve. MielÅ‘tt folytatná, állítsa át az enable_mass_delete értékét config.php állományban.'; //'Mass deletion is not enabled. Please enable it in config.php before proceeding.'; +$lang['mass_deleting'] = 'Tömeges törlés'; //'Mass Deleting'; +$lang['mass_delete_progress'] = 'A törlési művelet a(z) %s kiszolgálón'; //'Deletion progress on server "%s"'; +$lang['malformed_mass_delete_array'] = 'A tömeges törléshez megadott tömb formátuma helytelen'; //'Malformed mass_delete array.'; +$lang['no_entries_to_delete'] = 'Nem választotta ki a törlendÅ‘ bejegyzés(eke)t. '; //'You did not select any entries to delete.'; +$lang['deleting_dn'] = '%s törölve'; //'Deleting %s'; +$lang['total_entries_failed'] = '%s darab bejegyzés törlése nem sikerült a(z) %s darabból.'; //'%s of %s entries failed to be deleted.'; +$lang['all_entries_successful'] = 'Az összes bejegyzés törlése sikerült.'; //'All entries deleted successfully.'; +$lang['confirm_mass_delete'] = 'Hagyja jóvá a(z) %s bejegyzés tömeges törlését a(z) %s kiszolgálóról'; //'Confirm mass delete of %s entries on server %s'; +$lang['yes_delete'] = 'Igen, törlÅ‘djön'; //'Yes, delete!'; + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'Nem nevezhet át olyan bejegyzést aminek gyermekei vannak (azaz az átnevezés művelete csak levél-bejegyzéseken megengedett)'; //'You cannot rename an entry which has children entries (eg, the rename operation is not allowed on non-leaf entries)'; +$lang['no_rdn_change'] = 'Nem változtatta meg az RDN-t'; //'You did not change the RDN'; +$lang['invalid_rdn'] = 'Érvénytelen RDN érték'; //'Invalid RDN value'; +$lang['could_not_rename'] = 'A bejegyzést nem sikerült átnevezni'; //'Could not rename the entry'; + +?> diff --git a/lang/recoded/it.php b/lang/recoded/it.php index 088b54b..830638b 100644 --- a/lang/recoded/it.php +++ b/lang/recoded/it.php @@ -1,4 +1,6 @@ ä¸éƒ½åˆã«ã‚ˆã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。ã‚ã‚‹ã„ã¯ã€ã‚ãªãŸã® LDAP サーãƒãƒ¼ã¯ã€LDAP クライアント㌠RootDSE ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã®ã‚’防ãアクセス制御指定をã—ã¦ã„ã¾ã™ã€‚'; +$lang['server_info_for'] = 'Server info for: '; +$lang['server_reports_following'] = 'Server reports the following information about itself'; +$lang['nothing_to_report'] = 'ã“ã®ã‚µãƒ¼ãƒãƒ¼ã¯ãªã«ã‚‚報告ã™ã‚‹ã‚‚ã®ã¯ã‚ã‚Šã¾ã›ã‚“。'; + +//update.php +$lang['update_array_malformed'] = 'update_array ãŒã‚ªã‚«ã‚·ã‚¤ã§ã™ã€‚This might be a phpLDAPadmin bug. Please report it.'; +$lang['could_not_perform_ldap_modify'] = 'ldap_modify æ“作ãŒå®Ÿè¡Œã§ãã¾ã›ã‚“ã§ã—ãŸã€‚'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Do you want to make these changes?'; +$lang['attribute'] = '属性'; +$lang['old_value'] = 'å¤ã„値'; +$lang['new_value'] = 'æ–°ã—ã„値'; +$lang['attr_deleted'] = '[属性を削除ã—ã¾ã—ãŸ]'; +$lang['commit'] = 'コミット'; +$lang['cancel'] = 'å–り消ã—'; +$lang['you_made_no_changes'] = '変更ã¯ã‚ã‚Šã¾ã›ã‚“'; +$lang['go_back'] = 'Go back'; + +// welcome.php +$lang['welcome_note'] = 'å·¦ã¸ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’使用ã—ã¦æœæŸ»ã—ã¾ã™'; +$lang['credits'] = 'クレジット'; +$lang['changelog'] = '変更履歴'; +$lang['donate'] = '寄贈'; +$lang['pla_logo'] = 'phpLDAPadmin ロゴ'; + +// Donate.php +$lang['donation_instructions'] = 'phpLDAPadmin プロジェクトã«è³‡é‡‘を寄贈ã™ã‚‹ãŸã‚ã«ã¯ã€PayPal ボタンã®ã†ã¡ã® 1 ã¤ã‚’下ã«ä½¿ç”¨ã—ã¦ãã ã•ã„。'; +$lang['donate_amount'] = '%s を寄贈'; +$lang['wish_list_option'] = 'Or perhaps you would prefer to purchase an gift for a phpLDAPadmin developer.'; +$lang['wish_list'] = 'Dave\'s phpLDAPadmin ã®ã‚ã£ä¸»ãƒªã‚¹ãƒˆã‚’閲覧'; + +$lang['purge_cache'] = 'キャッシュ破棄'; +$lang['no_cache_to_purge'] = '破棄ã™ã‚‹ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã¯ã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚'; +$lang['done_purging_caches'] = '%s ãƒã‚¤ãƒˆã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’破棄ã—ã¾ã—ãŸã€‚'; +$lang['purge_cache_tooltip'] = 'サーãƒãƒ¼ã‚¹ã‚­ãƒ¼ãƒžã‚’å«ã‚€ã€phpLDAPadmin ã®ã™ã¹ã¦ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’破棄ã—ã¾ã—ãŸã€‚'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = '安全ã§ãªã„ファイルå: '; +$lang['no_such_file'] = 'ファイルãŒã‚ã‚Šã¾ã›ã‚“: '; + +//function.php +$lang['auto_update_not_setup'] = 'You have enabled auto_uid_numbers for %s in your configuration, + but you have not specified the auto_uid_number_mechanism. Please correct + this problem.'; +$lang['uidpool_not_set'] = 'You specified the "auto_uid_number_mechanism" as "uidpool" + in your configuration for server %s, but you did not specify the + audo_uid_number_uid_pool_dn. Please specify it before proceeding.'; +$lang['uidpool_not_exist'] = 'It appears that the uidPool you specified in your configuration ("%s") + does not exist.'; +$lang['specified_uidpool'] = 'You specified the "auto_uid_number_mechanism" as "search" in your + configuration for server %s, but you did not specify the + "auto_uid_number_search_base". Please specify it before proceeding.'; +$lang['auto_uid_invalid_credential'] = 'Unable to bind to %s with your with auto_uid credentials. Please check your configuration file.'; +$lang['bad_auto_uid_search_base'] = 'Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s'; +$lang['auto_uid_invalid_value'] = 'You specified an invalid value for auto_uid_number_mechanism ("%s") + in your configration. Only "uidpool" and "search" are valid. + Please correct this problem.'; +$lang['error_auth_type_config'] = 'Error: You have an error in your config file. The only three allowed values + for auth_type in the $servers section are \'session\', \'cookie\', and \'config\'. You entered \'%s\', + which is not allowed. '; +$lang['unique_attrs_invalid_credential'] = 'Unable to bind to %s with your with unique_attrs credentials. Please check your configuration file.'; +$lang['unique_attr_failed'] = 'Your attempt to add %s (%s) to
%s
is NOT allowed. That attribute/value belongs to another entry.

You might like to search for that entry.'; +$lang['php_install_not_supports_tls'] = 'インストールã•ã‚Œã¦ã„ã‚‹ PHP 㯠TLS をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。'; +$lang['could_not_start_tls'] = 'TLS を開始ã§ãã¾ã›ã‚“。LDAP サーãƒãƒ¼ã®è¨­å®šã‚’確èªã—ã¦ãã ã•ã„。'; +$lang['could_not_bind_anon'] = 'サーãƒãƒ¼ã«åŒ¿å接続ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚'; +$lang['could_not_bind'] = 'LDAP サーãƒãƒ¼ã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸã€‚'; +$lang['anonymous_bind'] = '匿å接続'; +$lang['bad_user_name_or_password'] = 'ユーザーåã‹ãƒ‘スワードãŒãŠã‹ã—ã„ã§ã™ã€‚ã‚‚ã†ä¸€åº¦è¡Œã£ã¦ãã ã•ã„。'; +$lang['redirecting_click_if_nothing_happens'] = 'Redirecting... Click here if nothing happens.'; +$lang['successfully_logged_in_to_server'] = 'サーãƒãƒ¼ %sã¸ã®ãƒ­ã‚°ã‚¤ãƒ³ã«æˆåŠŸã—ã¾ã—ãŸ'; +$lang['could_not_set_cookie'] = 'cookie を設定ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚'; +$lang['ldap_said'] = 'LDAP 回答: %s'; +$lang['ferror_error'] = 'エラー'; +$lang['fbrowse'] = '閲覧'; +$lang['delete_photo'] = '写真削除'; +$lang['install_not_support_blowfish'] = 'インストールã•ã‚ŒãŸ PHP 㯠blowfish æš—å·åŒ–をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。'; +$lang['install_not_support_md5crypt'] = 'インストールã•ã‚ŒãŸ PHP 㯠md5crypt æš—å·åŒ–をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。'; +$lang['install_no_mash'] = 'インストールã•ã‚ŒãŸ PHP 㯠mhash() をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。SHA ãƒãƒƒã‚·ãƒ¥ã‚’ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。'; +$lang['jpeg_contains_errors'] = 'jpegPhoto contains errors
'; +$lang['ferror_number'] = 'エラー番å·: %s (%s)'; +$lang['ferror_discription'] = '説明: %s

'; +$lang['ferror_number_short'] = 'エラー番å·: %s

'; +$lang['ferror_discription_short'] = '説明: (利用å¯èƒ½ãªèª¬æ˜ŽãŒã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸ)
'; +$lang['ferror_submit_bug'] = 'ã“れ㯠phpLDAPadmin ã®ä¸éƒ½åˆã§ã™ã‹? ã‚‚ã—ãã†ãªã‚‰ 報告 ã—ã¦ãã ã•ã„。'; +$lang['ferror_unrecognized_num'] = '未承èªã®ã‚¨ãƒ©ãƒ¼ç•ªå·: '; +$lang['ferror_nonfatil_bug'] = '

+
+ 致命的ã§ãªã„ phpLDAPadmin ã®ä¸éƒ½åˆã‚’発見ã—ã¾ã—ãŸ!
エラー:%s (%s)
ファイル:%s 行 %s, caller %s
ãƒãƒ¼ã‚¸ãƒ§ãƒ³:PLA: %s, PHP: %s, SAPI: %s +
ウェブサーãƒãƒ¼:%s
+ ã“ã“をクリックã—ã¦å€‹ã®ä¸éƒ½åˆã‚’報告ã—ã¦ãã ã•ã„。.

'; +$lang['ferror_congrats_found_bug'] = 'ãŠã‚ã§ã¨ã†ã”ã–ã„ã¾ã™! phpLDAPadmin ã§ä¸éƒ½åˆã‚’発見ã—ã¾ã—ãŸã€‚

+ + + + + + + + + + +
エラー:%s
レベル:%s
ファイル:%s
行:%s
Caller:%s
PLA ãƒãƒ¼ã‚¸ãƒ§ãƒ³:%s
PHP ãƒãƒ¼ã‚¸ãƒ§ãƒ³:%s
PHP SAPI:%s
Web サーãƒãƒ¼:%s
+
+ 下記をクリックã—ã¦ã“ã®ä¸éƒ½åˆã‚’報告ã—ã¦ãã ã•ã„!'; + +//ldif_import_form +$lang['import_ldif_file_title'] = 'LDIF ファイルインãƒãƒ¼ãƒˆ'; +$lang['select_ldif_file'] = 'LDIF ファイルをé¸æŠž:'; +$lang['dont_stop_on_errors'] = 'Don\'t stop on errors'; + +//ldif_import +$lang['add_action'] = '追加中...'; +$lang['delete_action'] = '削除中...'; +$lang['rename_action'] = 'å称変更中...'; +$lang['modify_action'] = '修正中...'; +$lang['warning_no_ldif_version_found'] = 'ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。1 ã¨ä»®å®šã—ã¾ã™ã€‚'; +$lang['valid_dn_line_required'] = '有効㪠dn è¡ŒãŒå¿…è¦ã§ã™ã€‚'; +$lang['missing_uploaded_file'] = 'アップロードファイルãŒè¦‹å½“ãŸã‚Šã¾ã›ã‚“。'; +$lang['no_ldif_file_specified'] = 'LDIF ファイルãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。もã†ä¸€åº¦è¡Œã£ã¦ãã ã•ã„。'; +$lang['ldif_file_empty'] = 'アップロードã•ã‚ŒãŸ LDIF ファイルãŒç©ºã§ã™ã€‚'; +$lang['empty'] = '空'; +$lang['file'] = 'ファイル'; +$lang['number_bytes'] = '%s ãƒã‚¤ãƒˆ'; + +$lang['failed'] = '失敗ã—ã¾ã—ãŸ'; +$lang['ldif_parse_error'] = 'LDIF 解æžã‚¨ãƒ©ãƒ¼'; +$lang['ldif_could_not_add_object'] = 'オブジェクトを追加ã§ãã¾ã›ã‚“ã§ã—ãŸ:'; +$lang['ldif_could_not_rename_object'] = 'オブジェクトをå称変更ã§ãã¾ã›ã‚“ã§ã—ãŸ:'; +$lang['ldif_could_not_delete_object'] = 'オブジェクトを削除ã§ãã¾ã›ã‚“ã§ã—ãŸ:'; +$lang['ldif_could_not_modify_object'] = 'オブジェクトを修正ã§ãã¾ã›ã‚“ã§ã—ãŸ:'; +$lang['ldif_line_number'] = '行番å·:'; +$lang['ldif_line'] = 'è¡Œ:'; + +// Exports +$lang['export_format'] = 'エクスãƒãƒ¼ãƒˆæ›¸å¼'; +$lang['line_ends'] = 'Line ends'; +$lang['must_choose_export_format'] = 'エクスãƒãƒ¼ãƒˆæ›¸å¼ã‚’é¸ã°ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。'; +$lang['invalid_export_format'] = '無効ãªã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆæ›¸å¼'; +$lang['no_exporter_found'] = 'No available exporter found.'; +$lang['error_performing_search'] = '検索実行中ã«ã‚¨ãƒ©ãƒ¼ã«é­é‡ã—ã¾ã—ãŸã€‚'; +$lang['showing_results_x_through_y'] = 'Showing results %s through %s.'; +$lang['searching'] = '検索中...'; +$lang['size_limit_exceeded'] = '通知ã§ã™ã€‚検索サイズãŒåˆ¶é™ã‚’越ãˆã¾ã—ãŸã€‚'; +$lang['entry'] = 'エントリ'; +$lang['ldif_export_for_dn'] = 'LDIF エクスãƒãƒ¼ãƒˆ: %s'; +$lang['generated_on_date'] = 'Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s'; +$lang['total_entries'] = 'ç·ã‚¨ãƒ³ãƒˆãƒª'; +$lang['dsml_export_for_dn'] = 'DSLM エクスãƒãƒ¼ãƒˆ: %s'; +$lang['include_system_attrs'] = 'システム属性をå«ã‚€'; +$lang['csv_spreadsheet'] = 'CSV (スプレッドシート)'; + +// logins +$lang['could_not_find_user'] = 'ユーザー "%s" ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“'; +$lang['password_blank'] = 'You left the password blank.'; +$lang['login_cancelled'] = 'ログインãŒå–り消ã•ã‚Œã¾ã—ãŸã€‚'; +$lang['no_one_logged_in'] = 'No one is logged in to that server.'; +$lang['could_not_logout'] = 'ログアウトã§ãã¾ã›ã‚“ã§ã—ãŸã€‚'; +$lang['unknown_auth_type'] = '未知㮠auth_type: %s'; +$lang['logged_out_successfully'] = 'サーãƒãƒ¼ %s ã‹ã‚‰ãƒ­ã‚°ã‚¢ã‚¦ãƒˆã«æˆåŠŸã—ã¾ã—ãŸ'; +$lang['authenticate_to_server'] = 'Authenticate to server %s'; +$lang['warning_this_web_connection_is_unencrypted'] = '警告: ã“ã®ã‚¦ã‚§ãƒ–接続ã¯æš—å·åŒ–ã•ã‚Œã¦ã„ã¾ã›ã‚“。'; +$lang['not_using_https'] = 'You are not using \'https\'. Web browser will transmit login information in clear text.'; +$lang['login_dn'] = 'ログイン DN'; +$lang['user_name'] = 'ユーザーå'; +$lang['password'] = 'パスワード'; +$lang['authenticate'] = 'Authenticate'; + +// Entry browser +$lang['entry_chooser_title'] = 'エントリé¸æŠž'; + +// Index page +$lang['need_to_configure'] = 'phpLDAPadmin ã®è¨­å®šã‚’å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ファイル \'config.php\' ã®å¤‰æ›´ã‚’ã—ã¦ãã ã•ã„。サンプル設定ファイルã¨ã—㦠\'config.php.example\' ã‚’æä¾›ã—ã¦ã„ã¾ã™ã€‚'; + +// Mass deletes +$lang['no_deletes_in_read_only'] = '読ã¿è¾¼ã¿å°‚用モードã§ã¯å‰Šé™¤ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“。'; +$lang['error_calling_mass_delete'] = 'mass_delete.php 呼ã³å‡ºã—中ã®ã‚¨ãƒ©ãƒ¼ã§ã™ã€‚POST 値ã‹ã‚‰ mass_delete ãŒè¦‹ã‹ã‚Šã¾ã›ã‚“。'; +$lang['mass_delete_not_array'] = 'mass_delete POST 辺りãŒé…列ã§ã¯ã‚ã‚Šã¾ã›ã‚“。'; +$lang['mass_delete_not_enabled'] = '一括削除ãŒæœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。次ã«é€²ã‚€å‰ã« config.php ã§ãれを有効ã«ã—ã¦ãã ã•ã„。'; +$lang['search_attrs_wrong_count'] = 'config.php ã«ã‚¨ãƒ©ãƒ¼ãŒã‚ã‚Šã¾ã™ã€‚The number of attributes in $search_attributes and $search_attributes_display is different'; +$lang['mass_deleting'] = '一括削除中'; +$lang['mass_delete_progress'] = 'サーãƒãƒ¼ "%s" ã‹ã‚‰å‰Šé™¤ä¸­'; +$lang['malformed_mass_delete_array'] = 'ãŠã‹ã—ã„ mass_delete é…列ã§ã™ã€‚'; +$lang['no_entries_to_delete'] = '削除ã™ã‚‹ã‚¨ãƒ³ãƒˆãƒªãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“。'; +$lang['deleting_dn'] = '%s 削除中'; +$lang['total_entries_failed'] = '%s 個ã®ã‚¨ãƒ³ãƒˆãƒªãŒ %s 個ã®ã‚¨ãƒ³ãƒˆãƒªä¸­ã§å‰Šé™¤ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚'; +$lang['all_entries_successful'] = 'ã™ã¹ã¦ã®ã‚¨ãƒ³ãƒˆãƒªã®å‰Šé™¤ã«æˆåŠŸã—ã¾ã—ãŸã€‚'; +$lang['confirm_mass_delete'] = '%s エントリをサーãƒãƒ¼ %s ã‹ã‚‰ä¸€æ‹¬å‰Šé™¤ã®ç¢ºèª'; +$lang['yes_delete'] = 'ã¯ã„, 削除ã—ã¾ã™!'; + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'å­ã‚¨ãƒ³ãƒˆãƒªã‚’æŒã¤ã‚¨ãƒ³ãƒˆãƒªã¯å称変更ã§ãã¾ã›ã‚“ (eg, the rename operation is not allowed on non-leaf entries)'; +$lang['no_rdn_change'] = 'RDN を変更ã—ã¾ã›ã‚“ã§ã—ãŸ'; +$lang['invalid_rdn'] = '無効㪠RDN 値'; +$lang['could_not_rename'] = 'エントリã®å称変更ãŒå‡ºæ¥ã¾ã›ã‚“ã§ã—ãŸ'; + +// General errors +$lang['php5_unsupported'] = 'phpLDAPadmin 㯠PHP 5 をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。You will likely encounter many weird problems if you continue.'; +$lang['mismatched_search_attr_config'] = '設定ã«ã‚¨ãƒ©ãƒ¼ãŒã‚ã‚Šã¾ã™ã€‚$search_attributes must have the same number of attributes as $search_attributes_display.'; + +// Password checker +$lang['passwords_match'] = 'パスワードãŒä¸€è‡´ã—ã¾ã—ãŸ!'; +$lang['passwords_do_not_match'] = 'パスワードãŒä¸€è‡´ã—ã¾ã›ã‚“!'; +$lang['password_checker_tool'] = 'パスワードãƒã‚§ãƒƒã‚¯ãƒ„ール'; +$lang['compare'] = '比較'; +$lang['to'] = 'To'; + +?> diff --git a/lang/recoded/nl.php b/lang/recoded/nl.php index 123b547..a116c5c 100644 --- a/lang/recoded/nl.php +++ b/lang/recoded/nl.php @@ -1,8 +1,10 @@ - * Uwe Ebel + * Vertaling door Richard Lucassen + * Commentaar gaarne naar bovenstaand adres sturen a.u.b. */ // Search form @@ -56,9 +58,9 @@ $lang['export_to_ldif'] = 'exporteren naar LDIF';//'Export to LDIF'; $lang['export_to_ldif_tooltip'] = 'maak LDIF dump van dit object';//'Save an LDIF dump of this object'; $lang['export_subtree_to_ldif_tooltip'] = 'maak LDIF dump van dit object plus alle onderliggende objecten';//'Save an LDIF dump of this object and all of its children'; $lang['export_subtree_to_ldif'] = 'exporteer deze subvelden naar LDIF';//'Export subtree to LDIF'; -$lang['export_to_ldif_mac'] = 'Macintosh regeleinden';//'Macintosh style line ends'; -$lang['export_to_ldif_win'] = 'Windows regeleinden';//'Windows style line ends'; -$lang['export_to_ldif_unix'] = 'Unix regeleinden';//'Unix style line ends'; +$lang['export_mac'] = 'Macintosh regeleinden';//'Macintosh style line ends'; +$lang['export_win'] = 'Windows regeleinden';//'Windows style line ends'; +$lang['export_unix'] = 'Unix regeleinden';//'Unix style line ends'; $lang['create_a_child_entry'] = 'subveld aanmaken';//'Create a child entry'; $lang['add_a_jpeg_photo'] = 'jpeg foto toevoegen';//'Add a jpegPhoto'; $lang['rename_entry'] = 'veld hernoemen';//'Rename Entry'; @@ -239,6 +241,7 @@ $lang['starts with'] = 'begint met';//'starts with'; $lang['contains'] = 'bevat';//'contains'; $lang['ends with'] = 'eindigt met';//'ends with'; $lang['sounds like'] = 'klinkt als';//'sounds like'; +$lang['predefined_search_str'] = 'of een van deze lijst uitlezen';//'or select a predefined search'; // server_info.php $lang['could_not_fetch_server_info'] = 'kan geen LDAP van de server krijgen';//'Could not retrieve LDAP information from the server'; @@ -326,4 +329,9 @@ $lang['ldif_could_not_modify_object'] = 'Kan object niet wijzigen'; $lang['ldif_line_number'] = 'regelnummer: '; $lang['ldif_line'] = 'regel: '; +$lang['credits'] = 'Credits';//'Credits'; +$lang['changelog'] = 'Changelog';//'ChangeLog'; +$lang['documentation'] = 'Documentatie';// 'Documentation'; + + ?> diff --git a/lang/recoded/pl.php b/lang/recoded/pl.php new file mode 100644 index 0000000..b99c111 --- /dev/null +++ b/lang/recoded/pl.php @@ -0,0 +1,617 @@ + Czy na pewno chcesz to zrobić ?'; +$lang['confirm_recursive_delete_note'] = 'Uwaga: ta operacja jest potencjalnie bardzo niebezpieczna i wykonujesz jÄ… na wÅ‚asne ryzyko. Ta akcja nie może zostać cofniÄ™ta. Weź pod uwagÄ™ aliasy, owoÅ‚ania i inne rzeczy, które mogÄ… spowodować problemy.'; +$lang['delete_all_x_objects'] = 'UsuÅ„ wszystkie %s obiekty/ów'; +$lang['recursive_delete_progress'] = 'PostÄ™p rekursywnego usuwania'; +$lang['entry_and_sub_tree_deleted_successfully'] = 'Wpis %s oraz poddrzewo zostaÅ‚y pomyÅ›lnie usuniÄ™te.'; +$lang['failed_to_delete_entry'] = 'BÅ‚Ä…d podczas usuwania wpisu %s'; + +// Deleting attributes +$lang['attr_is_read_only'] = 'Atrybut "%s" jest oznaczony jako tylko-do-odczytu w konfiguracji phpLDAPadmin.'; +$lang['no_attr_specified'] = 'Nie okreÅ›lono nazwy atrybutu.'; +$lang['no_dn_specified'] = 'Nie okreÅ›lono DN'; + +// Adding attributes +$lang['left_attr_blank'] = 'PozostawiÅ‚eÅ›/aÅ› pustÄ… wartość atrybutu. ProszÄ™ wrócić i spróbować ponownie.'; +$lang['failed_to_add_attr'] = 'BÅ‚Ä…d podczas dodawania atrybutu.'; +$lang['file_empty'] = 'Wybrany plik jest pusty lub nie istnieje. Wróć i spróbuj ponownie.'; +$lang['invalid_file'] = 'BÅ‚Ä…d bezpieczeÅ„stwa: ZaÅ‚adowany plik może stanowić zagrożenie.'; +$lang['warning_file_uploads_disabled'] = 'Twoja konfiguracja PHP uniemożliwia zaÅ‚adowanie plików. ProszÄ™ sprawdzić php.ini przed kontynuacjÄ….'; +$lang['uploaded_file_too_big'] = 'ZaÅ‚adowany plik jest zbyt duży. ProszÄ™ sprawdzić ustawienie upload_max_size w php.ini'; +$lang['uploaded_file_partial'] = 'Wybrany plik zostaÅ‚ tylko częściowo zaÅ‚adowany, prawdopodobnie wystÄ…piÅ‚ bÅ‚Ä…d w sieci.'; +$lang['max_file_size'] = 'Maksymalny rozmiar pliku: %s'; + +// Updating values +$lang['modification_successful'] = 'Modyfikacja zakoÅ„czona pomyÅ›lnie.'; +$lang['change_password_new_login'] = 'JeÅ›li zmieniÅ‚eÅ›/aÅ› hasÅ‚o, musisz siÄ™ zalogować ponownie z nowym hasÅ‚em.'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'Nowe atrybuty wymagane'; +$lang['requires_to_add'] = 'Ta akcja wymaga, abyÅ› dodaÅ‚/a'; +$lang['new_attributes'] = 'nowe atrybuty'; +$lang['new_required_attrs_instructions'] = 'Instrukcja: Aby dodać tÄ™ klasÄ™ obiektu do tego wpisu, musisz okreÅ›lić'; +$lang['that_this_oclass_requires'] = 'co ta klasa obiektu wymaga. Możesz zrobić to w tym formularzu.'; +$lang['add_oclass_and_attrs'] = 'Dodaj klasÄ™ obiektu i atrybuty'; + +// General +$lang['chooser_link_tooltip'] = 'Kliknij aby wywoÅ‚ać okno i wybrać wpis (DN) graficznie'; +$lang['no_updates_in_read_only_mode'] = 'Nie możesz wykonać modyfikacji dopóki serwer jest w trybie tylko-do-odczytu'; +$lang['bad_server_id'] = 'ZÅ‚y identyfikator (id) serwera'; +$lang['not_enough_login_info'] = 'Brak wystarczajÄ…cych informacji aby zalogować siÄ™ do serwera. ProszÄ™ sprawdzić konfiguracjÄ™.'; +$lang['could_not_connect'] = 'Nie można podÅ‚Ä…czyć siÄ™ do serwera LDAP.'; +$lang['could_not_connect_to_host_on_port'] = 'Nie można podÅ‚Ä…czyć siÄ™ do "%s" na port "%s"'; +$lang['could_not_perform_ldap_mod_add'] = 'Nie można dokonać operacji ldap_mod_add.'; +$lang['bad_server_id_underline'] = 'ZÅ‚y server_id: '; +$lang['success'] = 'Sukces'; +$lang['server_colon_pare'] = 'Serwer: '; +$lang['look_in'] = 'Szukam w: '; +$lang['missing_server_id_in_query_string'] = 'Nie okreÅ›lono ID serwera w zapytaniu !'; +$lang['missing_dn_in_query_string'] = 'Nie okreÅ›lono DN w zapytaniu !'; +$lang['back_up_p'] = 'Do góry...'; +$lang['no_entries'] = 'brak wpisów'; +$lang['not_logged_in'] = 'Nie zalogowany/a'; +$lang['could_not_det_base_dn'] = 'Nie można okreÅ›lić bazowego DN'; +$lang['please_report_this_as_a_bug']='ProszÄ™ zgÅ‚osić to jako bÅ‚Ä…d.'; +$lang['reasons_for_error']='To mogÅ‚o zdarzyć siÄ™ z kilku powodów, z których najbardziej prawdopodobne to:'; +$lang['yes']='Tak'; +$lang['no']='Nie'; +$lang['go']='Idź'; +$lang['delete']='UsuÅ„'; +$lang['back']='Powrót'; +$lang['object']='obiekt'; +$lang['delete_all']='UsuÅ„ wszystko'; +$lang['url_bug_report']='https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; +$lang['hint'] = 'wskazówka'; +$lang['bug'] = 'bÅ‚Ä…d (bug)'; +$lang['warning'] = 'ostrzeżenie'; +$lang['light'] = 'żarówka'; // the word 'light' from 'light bulb' +$lang['proceed_gt'] = 'Dalej >>'; + +// Add value form +$lang['add_new'] = 'Dodaj'; +$lang['value_to'] = 'wartość do'; +$lang['distinguished_name'] = 'Wyróżniona Nazwa (DN)'; +$lang['current_list_of'] = 'Aktualna lista'; +$lang['values_for_attribute'] = 'wartoÅ›ci dla atrybutu'; +$lang['inappropriate_matching_note'] = 'Uwaga: JeÅ›li nie ustawisz reguÅ‚y EQUALITY dla tego atrybutu na Twoim serwerze LDAP otrzymasz bÅ‚Ä…d "niewÅ‚aÅ›ciwe dopasowanie (inappropriate matching)"'; +$lang['enter_value_to_add'] = 'Wprowadź wartość, którÄ… chcesz dodać:'; +$lang['new_required_attrs_note'] = 'Uwaga: może być wymagane wprowadzenie nowych atrybutów wymaganych przez tÄ™ klasÄ™ obiektu'; +$lang['syntax'] = 'SkÅ‚adnia'; + +//copy.php +$lang['copy_server_read_only'] = 'Nie możesz dokonać modyfikacji dopóki serwer jest w trybie tylko-do-odczytu'; +$lang['copy_dest_dn_blank'] = 'Nie wypeÅ‚niono docelowej DN.'; +$lang['copy_dest_already_exists'] = 'Docelowy wpis (%s) już istnieje.'; +$lang['copy_dest_container_does_not_exist'] = 'Docelowy kontener (%s) nie istnieje.'; +$lang['copy_source_dest_dn_same'] = 'ŹródÅ‚owa i docelowa DN sÄ… takie same.'; +$lang['copy_copying'] = 'Kopiowanie '; +$lang['copy_recursive_copy_progress'] = 'PostÄ™p kopiowania rekursywnego'; +$lang['copy_building_snapshot'] = 'Budowanie migawki (snapshot) drzewa do skopiowania... '; +$lang['copy_successful_like_to'] = 'Kopiowanie zakoÅ„czone pomyÅ›lnie. Czy chcesz '; +$lang['copy_view_new_entry'] = 'zobaczyć nowy wpis '; +$lang['copy_failed'] = 'BÅ‚Ä…d podczas kopiowania DN: '; + +//edit.php +$lang['missing_template_file'] = 'Uwaga: brak pliku szablonu, '; +$lang['using_default'] = 'Używam domyÅ›lnego.'; +$lang['template'] = 'Szablon'; +$lang['must_choose_template'] = 'Musisz wybrać szablon'; +$lang['invalid_template'] = '%s nie jest prawidÅ‚owym szablonem'; +$lang['using_template'] = 'wykorzystujÄ…c szablon'; +$lang['go_to_dn'] = 'Idź do %s'; +$lang['structural_object_class_cannot_remove'] = 'To jest strukturalna klasa obiektu i nie może zostać usuniÄ™ta.'; +$lang['structural'] = 'strukturalna'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Kopiuj '; +$lang['copyf_to_new_object'] = 'do nowego obiektu'; +$lang['copyf_dest_dn'] = 'Docelowa DN'; +$lang['copyf_dest_dn_tooltip'] = 'PeÅ‚na DN nowego wpisu do utworzenia poprzez skopiowanie wpisu źródÅ‚owego'; +$lang['copyf_dest_server'] = 'Docelowy serwer'; +$lang['copyf_note'] = 'Wskazówka: Kopiowanie pomiÄ™dzy różnymi serwerami dziaÅ‚a wtedy, gdy nie wystÄ™puje naruszenie schematów'; +$lang['copyf_recursive_copy'] = 'Rekursywne kopiowanie wszystkich potomnych obiektów'; +$lang['recursive_copy'] = 'Kopia rekursywna'; +$lang['filter'] = 'Filtr'; +$lang['filter_tooltip'] = 'Podczas rekursywnego kopiowania, kopiowane sÄ… tylko wpisy pasujÄ…ce do filtra'; + +//create.php +$lang['create_required_attribute'] = 'Brak wartoÅ›ci dla wymaganego atrybutu (%s).'; +$lang['redirecting'] = 'PrzekierowujÄ™'; +$lang['here'] = 'tutaj'; +$lang['create_could_not_add'] = 'Nie można dodać obiektu do serwera LDAP.'; + +//create_form.php +$lang['createf_create_object'] = 'Utwórz obiekt'; +$lang['createf_choose_temp'] = 'Wybierz szablon'; +$lang['createf_select_temp'] = 'Wybierz szablon dla procesu tworzenia'; +$lang['createf_proceed'] = 'Dalej'; +$lang['rdn_field_blank'] = 'PozostawiÅ‚eÅ›/aÅ› puste pole RDN.'; +$lang['container_does_not_exist'] = 'Kontener który okreÅ›liÅ‚eÅ›/aÅ› (%s) nie istnieje. Spróbuj ponownie.'; +$lang['no_objectclasses_selected'] = 'Nie wybraÅ‚eÅ›/aÅ› żadnych Klas Obiektu dla tego obiektu. Wróć proszÄ™ i zrób to.'; +$lang['hint_structural_oclass'] = 'Wskazówka: Musisz wybrać co najmniej jednÄ… strukturalnÄ… klasÄ™ obiektu (wyróżnionÄ… pogrubieniem)'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'Na serwerze'; +$lang['ctemplate_no_template'] = 'Brak okreÅ›lenia szablonu w zmiennych POST.'; +$lang['ctemplate_config_handler'] = 'Twoja konfiguracja okreÅ›la handler'; +$lang['ctemplate_handler_does_not_exist'] = 'dla tego szablonu. Ale, ten handler nie istnieje w szablonach/tworzonym katalogu'; +$lang['create_step1'] = 'Krok 1 z 2: Nazwa i klasa/y obiektu'; +$lang['create_step2'] = 'Krok 2 z 2: OkreÅ›lenie atrybutów i wartoÅ›ci'; +$lang['relative_distinguished_name'] = 'Relatywna Wyróżniona Nazwa (RDN)'; +$lang['rdn'] = 'RDN'; +$lang['rdn_example'] = '(przykÅ‚ad: cn=MyNewPerson)'; +$lang['container'] = 'Kontener'; + +// search.php +$lang['you_have_not_logged_into_server'] = 'Nie zalogowaÅ‚eÅ›/aÅ› siÄ™ jeszcze do wybranego serwera, wiÄ™c nie możesz go przeszukiwać.'; +$lang['click_to_go_to_login_form'] = 'Kliknij tutaj aby przejść do formularza logowania'; +$lang['unrecognized_criteria_option'] = 'Nierozpoznane kryterium opcji: '; +$lang['if_you_want_to_add_criteria'] = 'JeÅ›li chcesz dodać wÅ‚asne kryteria do listy, zmodyfikuj plik search.php aby to obsÅ‚użyć.'; +$lang['entries_found'] = 'Znaleziono wpisów: '; +$lang['filter_performed'] = 'Zastosowano filtr: '; +$lang['search_duration'] = 'Wyszukiwanie wykonane przez phpLDAPadmin w'; +$lang['seconds'] = 'sekund(y)'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'Przeszukiwany zakres'; +$lang['scope_sub'] = 'Sub (caÅ‚e poddrzewo)'; +$lang['scope_one'] = 'One (jeden poziom poniżej bazowej)'; +$lang['scope_base'] = 'Base (tylko bazowa dn)'; +$lang['standard_ldap_search_filter'] = 'Standardowy filtr dla LDAP. Na przykÅ‚ad: (&(sn=Kowalski)(givenname=Jan))'; +$lang['search_filter'] = 'Filtr wyszukiwania'; +$lang['list_of_attrs_to_display_in_results'] = 'Lista atrybutów do wyÅ›wietlenia rezultatów (rozdzielona przecinkami)'; + +// search_form_simple.php +$lang['starts with'] = 'zaczyna siÄ™ od'; +$lang['ends with'] = 'koÅ„czy siÄ™ na'; +$lang['sounds like'] = 'brzmi jak'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'Nie można uzyskać informacji od serwera LDAP'; +$lang['server_info_for'] = 'Informacja o serwerze: '; +$lang['server_reports_following'] = 'Serwer zwróciÅ‚ nastÄ™pujÄ…ce informacje o sobie'; +$lang['nothing_to_report'] = 'Ten serwer nie chce nic powiedzieć o sobie :).'; + +//update.php +$lang['update_array_malformed'] = 'tablica modyfikacji (update_array) jest znieksztaÅ‚cona. To może być bÅ‚Ä…d (bug) w phpLDAPadmin. ProszÄ™ to zgÅ‚osić.'; +$lang['could_not_perform_ldap_modify'] = 'Nie można wykonać operacji modyfikacji (ldap_modify).'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Czy chcesz dokonać tych zmian ?'; +$lang['attribute'] = 'Atrybuty'; +$lang['old_value'] = 'Stara wartość'; +$lang['new_value'] = 'Nowa wartość'; +$lang['attr_deleted'] = '[atrybut usuniÄ™ty]'; +$lang['commit'] = 'Zatwierdź'; +$lang['cancel'] = 'Anuluj'; +$lang['you_made_no_changes'] = 'Nie dokonano żadnych zmian'; +$lang['go_back'] = 'Powrót'; + +// welcome.php +$lang['welcome_note'] = 'Użyj menu z lewej strony do nawigacji'; +$lang['credits'] = 'Lista pÅ‚ac'; +$lang['changelog'] = 'Historia zmian'; +$lang['donate'] = 'Wesprzyj projekt'; +$lang['purge_cache'] = 'Wyczyść pamięć podrÄ™cznÄ…'; +$lang['no_cache_to_purge'] = 'Nie ma czego czyÅ›cić.'; +$lang['done_purging_caches'] = 'Wyczyszczono %s bajtów pamiÄ™ci podrÄ™cznej.'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Niebezpieczna nazwa pliku: '; +$lang['no_such_file'] = 'Nie znaleziono pliku: '; + +//function.php +$lang['auto_update_not_setup'] = 'ZezwoliÅ‚eÅ›/aÅ› na automatyczne nadawanie uid (auto_uid_numbers) + dla %s w konfiguracji, ale nie okreÅ›liÅ‚eÅ›/aÅ› mechanizmu + (auto_uid_number_mechanism). ProszÄ™ skorygować ten problem.'; +$lang['uidpool_not_set'] = 'OkreÅ›liÅ‚eÅ›/aÅ› mechanizm autonumerowania uid "auto_uid_number_mechanism" jako "uidpool" w konfiguracji Twojego serwera %s, lecz nie okreÅ›liÅ‚eÅ›/aÅ› audo_uid_number_uid_pool_dn. ProszÄ™ okreÅ›l to zanim przejdziesz dalej.'; +$lang['uidpool_not_exist'] = 'WyglÄ…da na to, że uidPool, którÄ… okreÅ›liÅ‚eÅ›/aÅ› w Twojej konfiguracji ("%s") nie istnieje.'; +$lang['specified_uidpool'] = 'OkreÅ›liÅ‚eÅ›/aÅ› "auto_uid_number_mechanism" jako "search" w konfiguracji Twojego serwera %s, ale nie okreÅ›liÅ‚eÅ›/aÅ› bazy "auto_uid_number_search_base". Zrób to zanim przejdziesz dalej.'; +$lang['auto_uid_invalid_credential'] = 'Nie można podÅ‚Ä…czyć do %s z podanÄ… tożsamoÅ›ciÄ… auto_uid. ProszÄ™ sprawdzić swój plik konfiguracyjny.'; +$lang['bad_auto_uid_search_base'] = 'W Twojej konfiguracji phpLDAPadmin okreÅ›lona jest nieprawidÅ‚owa wartość auto_uid_search_base dla serwera %s'; +$lang['auto_uid_invalid_value'] = 'OkreÅ›liÅ‚eÅ›/aÅ› bÅ‚Ä™dnÄ… wartość dla auto_uid_number_mechanism ("%s") w konfiguracji. Tylko "uidpool" i "search" sÄ… poprawne. ProszÄ™ skorygować ten problem.'; +$lang['error_auth_type_config'] = 'BÅ‚Ä…d: Masz bÅ‚Ä…d w pliku konfiguracji. Trzy możliwe wartoÅ›ci dla auth_type w sekcji $servers to \'session\', \'cookie\' oraz \'config\'. Ty wpisaÅ‚eÅ›/aÅ› \'%s\', co jest niedozwolone. '; +$lang['unique_attrs_invalid_credential'] = 'Nie można podÅ‚Ä…czyć do %s z podanÄ… tożsamoÅ›ciÄ… unique_attrs. ProszÄ™ sprawdzić swój plik konfiguracyjny.'; +$lang['unique_attr_failed'] = 'Próba dodania %s (%s) do
%s
jest NIEDOZWOLONA. Ten atrybut/wartość należy do innego wpisu.

Jeśli chcesz, możesz poszukać tego wpisu.'; +$lang['php_install_not_supports_tls'] = 'Twoja instalacja PHP nie wspiera TLS.'; +$lang['could_not_start_tls'] = 'Nie można uruchomić TLS. Proszę sprawdzić konfigurację serwera LDAP.'; +$lang['could_not_bind_anon'] = 'Nie można anonimowo podłączyć do serwera.'; +$lang['could_not_bind'] = 'Nie można podłączyć się do serwera LDAP.'; +$lang['anonymous_bind'] = 'Podłączenie anonimowe'; +$lang['bad_user_name_or_password'] = 'Zła nazwa użytkownika lub hasło. Spróbuj ponownie.'; +$lang['redirecting_click_if_nothing_happens'] = 'Przekierowuję... Kliknij tutaj jeśli nic się nie dzieje.'; +$lang['successfully_logged_in_to_server'] = 'Pomyślnie zalogowano do serwera %s'; +$lang['could_not_set_cookie'] = 'Nie można ustawić ciasteczka (cookie).'; +$lang['ldap_said'] = 'LDAP odpowiedział: %s'; +$lang['ferror_error'] = 'Błąd'; +$lang['fbrowse'] = 'przeglądaj'; +$lang['delete_photo'] = 'Usuń fotografię'; +$lang['install_not_support_blowfish'] = 'Twoja instalacja PHP nie wspiera szyfrowania blowfish.'; +$lang['install_not_support_md5crypt'] = 'Twoja instalacja PHP nie wspiera szyfrowania md5crypt.'; +$lang['install_no_mash'] = 'Twoja instalacja PHP nie posiada funkcji mhash(). Nie mogę tworzyć haszy SHA.'; +$lang['jpeg_contains_errors'] = 'jpegPhoto zawiera błędy
'; +$lang['ferror_number'] = 'BÅ‚Ä…d numer: %s (%s)'; +$lang['ferror_discription'] = 'Opis: %s

'; +$lang['ferror_number_short'] = 'BÅ‚Ä…d numer: %s

'; +$lang['ferror_discription_short'] = 'Opis: (brak dostępnego opisu)
'; +$lang['ferror_submit_bug'] = 'Czy jest to błąd w phpLDAPadmin ? Jeśli tak, proszę go zgłosić.'; +$lang['ferror_unrecognized_num'] = 'Nierozpoznany numer błędu: '; +$lang['ferror_nonfatil_bug'] = '

+
+ Znalazłeś błąd w phpLDAPadmin (nie krytyczny) !
BÅ‚Ä…d:%s (%s)
Plik:%s linia %s, wywołane z %s
Wersje:PLA: %s, PHP: %s, SAPI: %s +
Serwer Web:%s
+ Proszę zgłoś ten błąd klikając tutaj.

'; +$lang['ferror_congrats_found_bug'] = 'Gratulacje ! Znalazłeś błąd w phpLDAPadmin.

+ + + + + + + + + + +
BÅ‚Ä…d:%s
Poziom:%s
Plik:%s
Linia:%s
Wywołane z:%s
Wersja PLA:%s
Wersja PHP:%s
PHP SAPI:%s
Serwer Web:%s
+
+ ProszÄ™ zgÅ‚oÅ› ten bÅ‚Ä…d klikajÄ…c poniżej !'; + +//ldif_import_form +$lang['import_ldif_file_title'] = 'Importuj plik LDIF'; +$lang['select_ldif_file'] = 'Wybierz plik LDIF:'; +$lang['select_ldif_file_proceed'] = 'Dalej >>'; +$lang['dont_stop_on_errors'] = 'Nie zatrzymuj siÄ™ po napotkaniu bÅ‚Ä™dów'; + +//ldif_import +$lang['add_action'] = 'Dodawanie...'; +$lang['delete_action'] = 'Usuwanie...'; +$lang['rename_action'] = 'Zmiana nazwy...'; +$lang['modify_action'] = 'Modyfikowanie...'; +$lang['warning_no_ldif_version_found'] = 'Nie znaleziono numeru wersji. PrzyjmujÄ™ 1.'; +$lang['valid_dn_line_required'] = 'Wymagana jest poprawna linia DN.'; +$lang['missing_uploaded_file'] = 'Brak wgrywanego pliku.'; +$lang['no_ldif_file_specified.'] = 'Nie okreÅ›lono pliku LDIF. Spróbuj ponownie.'; +$lang['ldif_file_empty'] = 'Wgrany plik LDIF jest pusty.'; +$lang['empty'] = 'pusty'; +$lang['file'] = 'Plik'; +$lang['number_bytes'] = '%s bajtów'; + +$lang['failed'] = 'Nieudane'; +$lang['ldif_parse_error'] = 'BÅ‚Ä…d przetwarzania LDIF (Parse Error)'; +$lang['ldif_could_not_add_object'] = 'Nie można dodać obiektu:'; +$lang['ldif_could_not_rename_object'] = 'Nie można zmienić nazwy obiektu:'; +$lang['ldif_could_not_delete_object'] = 'Nie można usunąć obiektu:'; +$lang['ldif_could_not_modify_object'] = 'Nie można zmodyfikować obiektu:'; +$lang['ldif_line_number'] = 'Linia numer:'; +$lang['ldif_line'] = 'Linia:'; + +//delete_form +$lang['sure_permanent_delete_object']='Czy na pewno trwale usunąć ten obiekt ?'; +$lang['list_of_entries_to_be_deleted'] = 'Lista wpisów do usuniÄ™cia:'; +$lang['dn'] = 'DN'; + +// Exports +$lang['export_format'] = 'Format eksportu'; +$lang['line_ends'] = 'ZakoÅ„czenie linii'; +$lang['must_choose_export_format'] = 'Musisz wybrać format eksportu.'; +$lang['invalid_export_format'] = 'BÅ‚Ä™dny format eksportu'; +$lang['no_exporter_found'] = 'Nie znaleziono dostÄ™pnego eksportera.'; +$lang['error_performing_search'] = 'Napotkano bÅ‚Ä…d podczas szukania.'; +$lang['showing_results_x_through_y'] = 'Pokazywanie rezultatów %s przez %s.'; +$lang['searching'] = 'Szukam...'; +$lang['size_limit_exceeded'] = 'Uwaga, przekroczono limit rozmiaru wyszukiwania.'; +$lang['entry'] = 'Wpis'; +$lang['ldif_export_for_dn'] = 'Eksport LDIF dla: %s'; +$lang['generated_on_date'] = 'Wygenerowane przez phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) na %s'; +$lang['total_entries'] = 'ÅÄ…cznie wpisów'; +$lang['dsml_export_for_dn'] = 'Eksport DSLM dla: %s'; +$lang['include_system_attrs'] = 'Zawiera atrybuty systemowe'; + +// logins +$lang['could_not_find_user'] = 'Nie można znaleźć użytkownika "%s"'; +$lang['password_blank'] = 'PozostawiÅ‚eÅ›/aÅ› puste hasÅ‚o.'; +$lang['login_cancelled'] = 'Logowanie anulowane.'; +$lang['no_one_logged_in'] = 'Nikt nie jest zalogowany do tego serwera.'; +$lang['could_not_logout'] = 'Nie można wylogować.'; +$lang['unknown_auth_type'] = 'Nieznany auth_type: %s'; +$lang['logged_out_successfully'] = 'PomyÅ›lnie wylogowano z serwera %s'; +$lang['authenticate_to_server'] = 'Uwierzytelnienie dla serwera %s'; +$lang['warning_this_web_connection_is_unencrypted'] = 'Uwaga: To poÅ‚Ä…czenie nie jest szyfrowane.'; +$lang['not_using_https'] = 'Nie używasz \'https\'. PrzeglÄ…darka bÄ™dzie transmitować informacjÄ™ logowania czystym tekstem (clear text).'; +$lang['login_dn'] = 'Login DN'; +$lang['user_name'] = 'Nazwa użytkownika'; +$lang['password'] = 'HasÅ‚o'; +$lang['authenticate'] = 'Zaloguj'; + +// Entry browser +$lang['entry_chooser_title'] = 'Wybór wpisu'; + +// Index page +$lang['need_to_configure'] = 'Musisz skonfigurować phpLDAPadmin. Wyedytuj plik \'config.php\' aby to zrobić. PrzykÅ‚ad pliku konfiguracji znajduje siÄ™ w \'config.php.example\''; + +// Mass deletes +$lang['no_deletes_in_read_only'] = 'Usuwanie jest niedozwolone w trybie tylko-do-odczytu.'; +$lang['error_calling_mass_delete'] = 'BÅ‚Ä…d podczas wywoÅ‚ania mass_delete.php. BrakujÄ…ca mass_delete w zmiennych POST.'; +$lang['mass_delete_not_array'] = 'zmienna POST mass_delete nie jest w tablicÄ….'; +$lang['mass_delete_not_enabled'] = 'Masowe usuwanie nie jest dozwolone. Odblokuj to proszÄ™ w config.php przed kontynuacjÄ….'; +$lang['search_attrs_wrong_count'] = 'Twój config.php zawiera bÅ‚Ä…d. Ilość atrybutów w $search_attributes i$search_attributes_display jest różna'; +$lang['mass_deleting'] = 'Masowe usuwanie'; +$lang['mass_delete_progress'] = 'PostÄ™p usuwania na serwerze "%s"'; +$lang['malformed_mass_delete_array'] = 'ZnieksztaÅ‚cona tablica mass_delete.'; +$lang['no_entries_to_delete'] = 'Nie wybrano żadnegych wpisów do usuniÄ™cia.'; +$lang['deleting_dn'] = 'Usuwanie %s'; +$lang['total_entries_failed'] = '%s z %s wpisów nie zostaÅ‚o usuniÄ™tych.'; +$lang['all_entries_successful'] = 'Wszystkie wpisy pomyÅ›lnie usunieto.'; +$lang['confirm_mass_delete'] = 'Potwierdź masowe usuniÄ™cie %s wpisów na serwerze %s'; +$lang['yes_delete'] = 'Tak, usuÅ„ !'; + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'Nie możesz zmienić nazwy wpisu, posiadajÄ…cego wpisy potomne (np. operacja zmiany nazwy nie jest dozwolona na wpisach nie bÄ™dÄ…cych liÅ›cmi).'; +$lang['no_rdn_change'] = 'Nie zmieniÅ‚eÅ›/aÅ› RDN'; +$lang['invalid_rdn'] = 'BÅ‚Ä™dna wartość RDN'; +$lang['could_not_rename'] = 'Nie można zmienić nazwy wpisu'; + +// Templates +$lang['using'] = 'UżywajÄ…c'; +$lang['template'] = 'szablonu'; +$lang['switch_to'] = 'Możesz przeÅ‚Ä…czyć siÄ™ do '; +$lang['default_template'] = 'domyÅ›lnego szablonu'; + +// template_config +$lang['user_account'] = 'Konto Użytkownika (posixAccount)'; +$lang['address_book'] = 'Wpis Książki Adresowej (inetOrgPerson)'; +$lang['kolab_user'] = 'Wpis Użytkownika Kolab'; +$lang['organizational_unit'] = 'Jednostka Organizacyjna'; +$lang['organizational_role'] = 'Rola w Organizacji'; +$lang['posix_group'] = 'Grupa Posix'; +$lang['samba_machine'] = 'Maszyna Samba NT'; +$lang['samba3_machine'] = 'Maszyna Samba 3 NT'; +$lang['samba_user'] = 'Użytkownik Samba'; +$lang['samba3_user'] = 'Użytkownik Samba 3'; +$lang['samba3_group'] = 'Przypisanie grupy Samba 3'; +$lang['dns_entry'] = 'Wpis DNS'; +$lang['simple_sec_object'] = 'Prosty obiekt bezpieczeÅ„stwa (SSO)'; +$lang['courier_mail_account'] = 'Konto Pocztowe w Courier'; +$lang['courier_mail_alias'] = 'Alias Pocztowy w Courier'; +$lang['ldap_alias'] = 'Alias w LDAP'; +$lang['custom'] = 'Ogólne'; +$lang['samba_domain_name'] = 'Moja nazwa domeny w Samba'; +$lang['administrators'] = 'Administratorzy'; +$lang['users'] = 'Użytkownicy'; +$lang['guests'] = 'GoÅ›cie'; +$lang['power_users'] = 'Użytkownicy zaawansowani'; +$lang['account_ops'] = 'Operatorzy kont'; +$lang['server_ops'] = 'Operatorzy serwera'; +$lang['print_ops'] = 'Operatorzy drukowania'; +$lang['backup_ops'] = 'Operatorzy archiwizacji danych'; +$lang['replicator'] = 'Replikator'; +$lang['unable_smb_passwords'] = ' Nie można utworzyć haseÅ‚ Samba. ProszÄ™ sprawdzić konfiguracjÄ™ w template_config.php'; + +// Samba Account Template +$lang['samba_account'] = 'Konto Samba'; +$lang['samba_account_lcase'] = 'konto samba'; + +// New User (Posix) Account +$lang['t_new_user_account'] = 'Nowe konto użytkownika'; +$lang['t_hint_customize'] = 'Wskazówka: Aby dostosować ten szablon, wyedytuj plik templates/creation/new_user_template.php'; +$lang['t_name'] = 'Nazwa/Nazwisko'; +$lang['t_first_name'] = 'ImiÄ™'; +$lang['t_last_name'] = 'Nazwisko'; +$lang['t_common_name'] = 'Nazwa'; +$lang['t_user_name'] = 'Nazwa użytkownika'; +$lang['t_password'] = 'HasÅ‚o'; +$lang['t_encryption'] = 'Szyfrowanie'; +$lang['t_login_shell'] = 'PowÅ‚oka (shell)'; +$lang['t_home_dir'] = 'Katalog domowy'; +$lang['t_uid_number'] = 'Numer UID'; +$lang['t_auto_det'] = '(automatycznie okreÅ›lony)'; +$lang['t_group'] = 'Grupa'; +$lang['t_gid_number'] = 'Numer GID'; +$lang['t_err_passwords'] = 'HasÅ‚a nie zgadzajÄ… siÄ™. Wróc i spróbuj ponownie.'; +$lang['t_err_field_blank'] = 'Nie możesz pozostawić pustego pola %s. Wróć i spróbuj ponownie.'; +$lang['t_err_field_num'] = 'Pole %s może zawierać tylko wartoÅ›ci numeryczne. Wróć i spróbuj ponownie.'; +$lang['t_err_bad_container'] = 'Kontener który wybraÅ‚eÅ›/aÅ› (%s) nie istnieje. Wróć i spróbuj ponownie.'; +$lang['t_confirm_account_creation'] = 'Potwierdź utworzenie konta'; +$lang['t_secret'] = '[tajne]'; +$lang['t_create_account'] = 'Utwórz konto'; + +// New Address Template +$lang['t_new_address'] = 'Nowy wpis w Książce Adresowej'; +$lang['t_organization'] = 'Organizacja'; +$lang['t_address'] = 'Adres'; +$lang['t_city'] = 'Miasto'; +$lang['t_postal_code'] = 'Kod pocztowy'; +$lang['t_street'] = 'Ulica'; +$lang['t_work_phone'] = 'Telefon sÅ‚użbowy'; +$lang['t_fax'] = 'Fax'; +$lang['t_mobile'] = 'Telefon komórkowy'; +$lang['t_email'] = 'E-mail'; +$lang['t_container'] = 'Kontener'; +$lang['t_err_cn_blank'] = 'Nie możesz pozostawić pustego pola Nazwa. Wróć i spróbuj ponownie.'; +$lang['t_confim_creation'] = 'Potwierdź utworzenie wpisu:'; +$lang['t_create_address'] = 'Utwórz adres'; + +?> diff --git a/lang/recoded/pt-br.php b/lang/recoded/pt-br.php new file mode 100644 index 0000000..05bc49a --- /dev/null +++ b/lang/recoded/pt-br.php @@ -0,0 +1,516 @@ +To delete an attribute, empty the text field and click save.'; +$lang['attr_schema_hint'] = 'Dica: Para ver o esquema de um atributo clique no nome do atributo.';//'Hint: To view the schema for an attribute, click the attribute name.'; +$lang['attrs_modified'] = 'Alguns atributos (%s) foram modificados e estão destacados abaixo.';//'Some attributes (%s) were modified and are highlighted below.'; +$lang['attr_modified'] = 'Um atributo (%s) foi modificado e está destacado abaixo';//'An attribute (%s) was modified and is highlighted below.'; +$lang['viewing_read_only'] = 'Vizualizando objeto em modo somente-leitura.';//'Viewing entry in read-only mode.'; +$lang['no_new_attrs_available'] = 'novos atributos não disponíveis para este objeto.';//'no new attributes available for this entry'; +$lang['no_new_binary_attrs_available'] = 'novos atributos binários não disponíveis para este objeto.';//'no new binary attributes available for this entry'; +$lang['binary_value'] = 'Valor binário';//'Binary value'; +$lang['add_new_binary_attr'] = 'Inserir novo atributo binário';//'Add New Binary Attribute'; +$lang['alias_for'] = 'Nota: \'%s\' é um alias para \'%s\'';//'Note: \'%s\' is an alias for \'%s\''; +$lang['download_value'] = 'download do valor';//'download value'; +$lang['delete_attribute'] = 'apagar atributo';//'delete attribute'; +$lang['true'] = 'verdadeiro';//'true'; +$lang['false'] = 'falso';//'false'; +$lang['none_remove_value'] = 'nenhum, remover valor';//?? //'none, remove value'; +$lang['really_delete_attribute'] = 'Deseja realmente apagar atributo';//'Really delete attribute'; +$lang['add_new_value'] = 'Inserir novo valor';//'Add New Value'; + +// Schema browser +$lang['the_following_objectclasses'] = 'As seguintes Classes de objetos são suportadas por este servidor LDAP.';//'The following objectClasses are supported by this LDAP server.'; +$lang['the_following_attributes'] = 'Os seguintes tipos de atributos são suportadas por este servidor LDAP.';//'The following attributeTypes are supported by this LDAP server.'; +$lang['the_following_matching'] = 'As seguintes regras de consistência são suportadas por este servidor LDAP.';//'The following matching rules are supported by this LDAP server.'; +$lang['the_following_syntaxes'] = 'As seguintes sintaxes são suportadas por este servidor LDAP.';//'The following syntaxes are supported by this LDAP server.'; +$lang['schema_retrieve_error_1']='O servidor não suporta o protocolo LDAP completamente.';//'The server does not fully support the LDAP protocol.'; +$lang['schema_retrieve_error_2']='Sua versão do PHP não executa a consulta corretamente.';//'Your version of PHP does not correctly perform the query.'; +$lang['schema_retrieve_error_3']='Ou, por fim, o phpLDAPadmin não sabe como buscar o esquema para o seu servidor.';//'Or lastly, phpLDAPadmin doesn\'t know how to fetch the schema for your server.'; +$lang['jump_to_objectclass'] = 'Ir para uma classe de objetos';//'Jump to an objectClass'; +$lang['jump_to_attr'] = 'Ir para um tipo de atributo';//'Jump to an attribute'; +$lang['jump_to_matching_rule'] = 'Ir para regras de consistência';//'Jump to a matching rule'; +$lang['schema_for_server'] = 'Esquema para servidor';//'Schema for server'; +$lang['required_attrs'] = 'Atributos Obrigatórios';//'Required Attributes'; +$lang['optional_attrs'] = 'Atributos Opcionais';//'Optional Attributes'; +$lang['optional_binary_attrs'] = 'Atributos Binários Opcionais';//'Optional Binary Attributes'; +$lang['OID'] = 'OID';//'OID'; +$lang['aliases']='Apelidos';//'Aliases'; +$lang['desc'] = 'Descrição';//'Description'; +$lang['no_description']='sem descrição';//'no description'; +$lang['name'] = 'Nome';//'Name'; +$lang['equality']='Igualdade';//'Equality'; +$lang['is_obsolete'] = 'Esta classe de objeto está obsoleta.';//'This objectClass is obsolete'; +$lang['inherits'] = 'Herda de';//'Inherits'; +$lang['inherited_from']='Herdado de';//inherited from'; +$lang['parent_to'] = 'Pai para';//'Parent to'; +$lang['jump_to_this_oclass'] = 'Ir para definição desta classe de objeto';//'Jump to this objectClass definition'; +$lang['matching_rule_oid'] = 'OID da Regra de consistência';//'Matching Rule OID'; +$lang['syntax_oid'] = 'OID da Sintaxe';//'Syntax OID'; +$lang['not_applicable'] = 'não aplicável';//'not applicable'; +$lang['not_specified'] = 'não especificado';//not specified'; +$lang['character']='caracter';//'character'; +$lang['characters']='caracteres';//'characters'; +$lang['used_by_objectclasses']='Usado por classes de objetos';//'Used by objectClasses'; +$lang['used_by_attributes']='Usado por Atributos';//'Used by Attributes'; +$lang['oid']='OID'; +$lang['obsolete']='Obsoleto';//'Obsolete'; +$lang['ordering']='Ordenando';//'Ordering'; +$lang['substring_rule']='Regra de substring';//'Substring Rule'; +$lang['single_valued']='Avaliado sozinho';//'Single Valued'; +$lang['collective']='Coletivo';//'Collective'; +$lang['user_modification']='Alteração do usuário';//'User Modification'; +$lang['usage']='Uso';//'Usage'; +$lang['maximum_length']='Tamanho Máximo';//'Maximum Length'; +$lang['attributes']='Tipos de Atriburos';//'Attributes Types'; +$lang['syntaxes']='Sintaxes';//'Syntaxes'; +$lang['objectclasses']='Classe de Objetos';//'objectClasses'; +$lang['matchingrules']='Regra de consistência';//'Matching Rules'; +$lang['could_not_retrieve_schema_from']='Não foi possível encontrar esquema de';//'Could not retrieve schema from'; +$lang['type']='Tipo';// 'Type'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'Objeto \'%s\' excluído com sucesso.';//'Entry \'%s\' deleted successfully.'; +$lang['you_must_specify_a_dn'] = 'Você deve especificar um DN';//'You must specify a DN'; +$lang['could_not_delete_entry'] = 'Não foi possível excluir o objeto: %s';//'Could not delete the entry: %s'; +$lang['no_such_entry'] = 'Objeto inexistente: %s';//'No such entry: %s'; +$lang['delete_dn'] = 'Excluir %s';//'Delete %s'; +$lang['entry_is_root_sub_tree'] = 'Este objeto é a raiz de uma sub-árvore e contém %s objetos.';//'This entry is the root of a sub-tree containing %s entries.'; +$lang['view_entries'] = 'Ver objetos';//'view entries'; +$lang['confirm_recursive_delete'] = 'o phpLDAPadmin pode excluir recursivamente este objeto e todos %s filhos. Veja abaixo uma lista de todos os objetos que esta ação vai excluir. Deseja fazer isso?';//'phpLDAPadmin can recursively delete this entry and all %s of its children. See below for a list of all the entries that this action will delete. Do you want to do this?'; +$lang['confirm_recursive_delete_note'] = 'Nota: isto é potencialmente muito perigoso, faça isso por sua conta e risco. Esta operação não pode ser desfeita. Leve em consideração apelidos, referências e outras coisas que podem causar problemas.';//'Note: this is potentially very dangerous and you do this at your own risk. This operation cannot be undone. Take into consideration aliases, referrals, and other things that may cause problems.'; +$lang['delete_all_x_objects'] = 'Excluir todos os %s objetos';//'Delete all %s objects'; +$lang['recursive_delete_progress'] = 'Progresso de exclusão recursiva';//'Recursive delete progress'; +$lang['entry_and_sub_tree_deleted_successfully'] = 'Objeto %s e sub-árvore excluído com sucesso.';// 'Entry %s and sub-tree deleted successfully.'; +$lang['failed_to_delete_entry'] = 'Falha ao excluir objeto %s';//'Failed to delete entry %s'; + +// Deleting attributes +$lang['attr_is_read_only'] = 'O atributo %s está marcado como somente leitura na configuração do phpLDAPadmin.';//'The attribute "%s" is flagged as read-only in the phpLDAPadmin configuration.'; +$lang['no_attr_specified'] = 'Nome de atributo não especificado.';//'No attribute name specified.'; +$lang['no_dn_specified'] = 'DN não especificado';//'No DN specified'; + +// Adding attributes +$lang['left_attr_blank'] = 'Você deixou o valor do atributo vazio. Por favor retorne e tente novamente.';//'You left the attribute value blank. Please go back and try again.'; +$lang['failed_to_add_attr'] = 'Falha ao inserir o atributo.';//'Failed to add the attribute.'; +$lang['file_empty'] = 'O arquivo que você escolheu está vazio ou não existe. Por favor retorne e tente novamente.';//'The file you chose is either empty or does not exist. Please go back and try again.'; +$lang['invalid_file'] = 'Erro de segurança: O arquivo que está sendo carregado pode ser malicioso.';//'Security error: The file being uploaded may be malicious.'; +$lang['warning_file_uploads_disabled'] = 'Sua configuração do PHP desabilitou o upload de arquivos. Por favor verifique o php.ini antes de continuar.';//'Your PHP configuration has disabled file uploads. Please check php.ini before proceeding.'; +$lang['uploaded_file_too_big'] = 'O arquivo que você carregou é muito grande. Por favor verifique a configuração do upload_max_size no php.ini';//'The file you uploaded is too large. Please check php.ini, upload_max_size setting'; +$lang['uploaded_file_partial'] = 'O arquivo que você selecionou foi carregado parcialmente, provavelmente por causa de um erro de rede.';//'The file you selected was only partially uploaded, likley due to a network error.'; +$lang['max_file_size'] = 'Tamanho máximo de arquivo: %s';//'Maximum file size: %s'; + +// Updating values +$lang['modification_successful'] = 'Alteração bem sucedida!';//'Modification successful!'; +$lang['change_password_new_login'] = 'Você alterou sua senha, você deve conectar novamente com a sua nova senha.'; //'Since you changed your password, you must now login again with your new password.'; + + +// Adding objectClass form +$lang['new_required_attrs'] = 'Novos Atributos Obrigatórios';//'New Required Attributes'; +$lang['requires_to_add'] = 'Esta ação requer que você insira';//'This action requires you to add'; +$lang['new_attributes'] = 'novos atributos';//'new attributes'; +$lang['new_required_attrs_instructions'] = 'Instruções: Para poder inserir esta Classe de Objetos a este objeto, você deve especificar';//'Instructions: In order to add this objectClass to this entry, you must specify'; +$lang['that_this_oclass_requires'] = 'que esta Classe de Objetos requer. Você pode fazê-lo no formulário abaixo:';//'that this objectClass requires. You can do so in this form.'; +$lang['add_oclass_and_attrs'] = 'Inserir Classe de Objetos e Atributos';//'Add ObjectClass and Attributes'; + +// General +$lang['chooser_link_tooltip'] = 'Clique para abrir uma janela e selecionar um objeto (DN) graficamente';//"Click to popup a dialog to select an entry (DN) graphically'; +$lang['no_updates_in_read_only_mode'] = 'Você não pode realizar atualizações enquanto o servidor estiver em modo somente leitura';//'You cannot perform updates while server is in read-only mode'; +$lang['bad_server_id'] = 'ID do servidor inválido';//'Bad server id'; +$lang['not_enough_login_info'] = 'Informações insuficientes para a conexão com o servidor. Por favor verifique sua configuração.';//'Not enough information to login to server. Please check your configuration.'; +$lang['could_not_connect'] = 'Não foi possível conectar com o servidor LDAP.';//'Could not connect to LDAP server.'; +$lang['could_not_connect_to_host_on_port'] = 'Não foi possível conectar em "%s" na porta "%s"';//'Could not connect to "%s" on port "%s"'; +$lang['could_not_perform_ldap_mod_add'] = 'Não foi possível executar operação ldap_mod_add.';//'Could not perform ldap_mod_add operation.'; +$lang['bad_server_id_underline'] = 'server_id inválido: ';//"Bad server_id: '; +$lang['success'] = 'Sucesso';//"Success'; +$lang['server_colon_pare'] = 'Servidor: ';//"Server: '; +$lang['look_in'] = 'Procurando em: ';//"Looking in: '; +$lang['missing_server_id_in_query_string'] = 'ID do servidor não especificado na consulta!';//'No server ID specified in query string!'; +$lang['missing_dn_in_query_string'] = 'DN não especificado na consulta!';//'No DN specified in query string!'; +$lang['back_up_p'] = 'Backup...';//"Back Up...'; +$lang['no_entries'] = 'nenhum objeto';//"no entries'; +$lang['not_logged_in'] = 'Não conectado';//"Not logged in'; +$lang['could_not_det_base_dn'] = 'Não foi possível determinar a base DN';//"Could not determine base DN'; +$lang['reasons_for_error']='Isso pode ter acontecido por vários motivos, os mais provável são:';//'This could happen for several reasons, the most probable of which are:'; +$lang['please_report_this_as_a_bug']='Por favor informe isso como bug.';//'Please report this as a bug.'; +$lang['yes']='Sim';//'Yes' +$lang['no']='Não';//'No' +$lang['go']='Ir';//'go' +$lang['delete']='Excluir';//'Delete'; +$lang['back']='Voltar';//'Back'; +$lang['object']='objeto';//'object'; +$lang['delete_all']='Excluir tudo';//'Delete all'; +$lang['url_bug_report']='https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; +$lang['hint'] = 'dica';//'hint'; +$lang['bug'] = 'bug';//'bug'; +$lang['warning'] = 'aviso';//'warning'; +$lang['light'] = 'a palavra "light" de "light bulb"'; // the word 'light' from 'light bulb' +$lang['proceed_gt'] = 'Continuar >>';//'Proceed >>'; + + +// Add value form +$lang['add_new'] = 'Inserir novo';//'Add new'; +$lang['value_to'] = 'valor para';//'value to'; +//also used in copy_form.php +$lang['distinguished_name'] = 'Nome Distinto';// 'Distinguished Name'; +$lang['current_list_of'] = 'Lista atual de';//'Current list of'; +$lang['values_for_attribute'] = 'valores para atributo';//'values for attribute'; +$lang['inappropriate_matching_note'] = 'Nota: Você vai receber um erro de "inappropriate matching" se você não configurar uma regra de IGUALDADE no seu servidor LDAP para este atributo.'; //'Note: You will get an "inappropriate matching" error if you have not
setup an EQUALITY rule on your LDAP server for this attribute.'; +$lang['enter_value_to_add'] = 'Entre com o valor que você quer inserir: ';//'Enter the value you would like to add:'; +$lang['new_required_attrs_note'] = 'Nota: talvez seja solicitado que você entre com os atributos necessários para esta classe de objetos';//'Note: you may be required to enter new attributes
that this objectClass requires.'; +$lang['syntax'] = 'Sintaxe';//'Syntax'; + +//Copy.php +$lang['copy_server_read_only'] = 'Você não pode realizar atualizações enquanto o servidor estiver em modo somente leitura';//"You cannot perform updates while server is in read-only mode'; +$lang['copy_dest_dn_blank'] = 'Você deixou o DN de destino vazio.';//"You left the destination DN blank.'; +$lang['copy_dest_already_exists'] = 'O objeto de destino (%s) já existe.';//"The destination entry (%s) already exists.'; +$lang['copy_dest_container_does_not_exist'] = 'O container de destino (%s) não existe.';//'The destination container (%s) does not exist.'; +$lang['copy_source_dest_dn_same'] = 'O DN de origem e destino são o mesmo.';//"The source and destination DN are the same.'; +$lang['copy_copying'] = 'Copiando ';//"Copying '; +$lang['copy_recursive_copy_progress'] = 'Progresso da cópia recursiva';//"Recursive copy progress'; +$lang['copy_building_snapshot'] = 'Construindo a imagem da árvore a ser copiada...';//"Building snapshot of tree to copy... '; +$lang['copy_successful_like_to'] = 'Copiado com sucesso! Você gostaria de ';//"Copy successful! Would you like to '; +$lang['copy_view_new_entry'] = 'ver o novo objeto';//"view the new entry'; +$lang['copy_failed'] = 'Falha ao copiar DN: ';//'Failed to copy DN: '; + + +//edit.php +$lang['missing_template_file'] = 'Aviso: arquivo modelo faltando, ';//'Warning: missing template file, '; +$lang['using_default'] = 'Usando o padrão.';//'Using default.'; +$lang['template'] = 'Modelo';//'Template'; +$lang['must_choose_template'] = 'Você deve escolher um modelo';//'You must choose a template'; +$lang['invalid_template'] = '%s é um modelo inválido';// '%s is an invalid template'; +$lang['using_template'] = 'usando o modelo';//'using template'; +$lang['go_to_dn'] = 'Ir para %s';//'Go to %s'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Copiar ';//"Copy '; +$lang['copyf_to_new_object'] = 'para um novo objeto';//"to a new object'; +$lang['copyf_dest_dn'] = 'DN de destino';//"Destination DN'; +$lang['copyf_dest_dn_tooltip'] = 'O DN completo do novo objeto que será criado a partir da cópia da origem';//'The full DN of the new entry to be created when copying the source entry'; +$lang['copyf_dest_server'] = 'Servidor de destino';//"Destination Server'; +$lang['copyf_note'] = 'Dica: Copiando entre diferentes servidores somente funciona se não houver violação de esquema';//"Note: Copying between different servers only works if there are no schema violations'; +$lang['copyf_recursive_copy'] = 'Copia recursivamente todos filhos deste objeto também.';//"Recursively copy all children of this object as well.'; +$lang['recursive_copy'] = 'Cópia Recursiva';//'Recursive copy'; +$lang['filter'] = 'Filtro';//'Filter'; +$lang['filter_tooltip'] = 'Quando executar uma cópia recursiva, copiar somente os objetos que atendem a este filtro';// 'When performing a recursive copy, only copy those entries which match this filter'; + + +//create.php +$lang['create_required_attribute'] = 'Você deixou vazio o valor de um atributo obrigatório (%s).';//"Error, you left the value blank for required attribute '; +$lang['redirecting'] = 'Redirecionando...';//"Redirecting'; moved from create_redirection -> redirection +$lang['here'] = 'aqui';//"here'; renamed vom create_here -> here +$lang['create_could_not_add'] = 'Não foi possível inserir o objeto no servidor LDAP.';//"Could not add the object to the LDAP server.'; + +//create_form.php +$lang['createf_create_object'] = 'Criar Objeto';//"Create Object'; +$lang['createf_choose_temp'] = 'Escolher um modelo';//"Choose a template'; +$lang['createf_select_temp'] = 'Selecionar um modelo para o processo de criação';//"Select a template for the creation process'; +$lang['createf_proceed'] = 'Prosseguir';//"Proceed >>'; +$lang['rdn_field_blank'] = 'Você deixou o campo RDN vazio.';//'You left the RDN field blank.'; +$lang['container_does_not_exist'] = 'O container que você especificou (%s) não existe. Por favor tente novamente.';// 'The container you specified (%s) does not exist. Please try again.'; +$lang['no_objectclasses_selected'] = 'Você não selecionou nenhuma Classe de Objetos para este objeto. Por favor volte e faça isso.';//'You did not select any ObjectClasses for this object. Please go back and do so.'; +$lang['hint_structural_oclass'] = 'Dica: Você deve escolher pelo menos uma Classe de Objetos estrutural';//'Hint: You must choose at least one structural objectClass'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'No servidor';//"On server'; +$lang['ctemplate_no_template'] = 'Nenhum modelo especificado.';//"No template specified in POST variables.'; +$lang['ctemplate_config_handler'] = 'Seu arquivo de configuração determina que o modelo';//"Your config specifies a handler of'; +$lang['ctemplate_handler_does_not_exist'] = 'é válido. Porém este modelo não existe no diretório "templates/creation".';//"for this template. But, this handler does not exist in the 'templates/creation' directory.'; +$lang['create_step1'] = 'Passo 1 de 2: Nome e Classe(s) de Objetos';//'Step 1 of 2: Name and ObjectClass(es)'; +$lang['create_step2'] = 'Passo 2 de 2: Especifica atributos e valores';//'Step 2 of 2: Specify attributes and values'; +$lang['relative_distinguished_name'] = 'Nome Distinto Relativo';//'Relative Distinguished Name'; +$lang['rdn'] = 'RDN';//'RDN'; +$lang['rdn_example'] = 'exemplo: cn=MinhaNovaPessoa';//'(example: cn=MyNewPerson)'; +$lang['container'] = 'Container';//'Container'; + + +// search.php +$lang['you_have_not_logged_into_server'] = 'Você não conectou no servidor selecionado ainda, assim, você não pode realizar buscas nele.';//'You have not logged into the selected server yet, so you cannot perform searches on it.'; +$lang['click_to_go_to_login_form'] = 'Clique aqui para conectar-se ao servidor';//'Click here to go to the login form'; +$lang['unrecognized_criteria_option'] = 'Critério desconhecido: ';// 'Unrecognized criteria option: '; +$lang['if_you_want_to_add_criteria'] = 'Se você quer inserir seus próprios critérios à lista. Certifique-se de editar o search.php para tratá-los. Saindo.';//'If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting.'; +$lang['entries_found'] = 'Objetos encontrados: ';//'Entries found: '; +$lang['filter_performed'] = 'Filtro aplicado: ';//'Filter performed: '; +$lang['search_duration'] = 'Busca realizada pelo phpLDAPadmin em';//'Search performed by phpLDAPadmin in'; +$lang['seconds'] = 'segundos';//'seconds'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'O escopo no qual procurar';//'The scope in which to search'; +$lang['scope_sub'] = 'Sub (toda a sub-árvore)';//'Sub (entire subtree)'; +$lang['scope_one'] = 'One (um nível de profundidade)';//'One (one level beneath base)'; +$lang['scope_base'] = 'Base (apenas a base dn)';//'Base (base dn only)'; +$lang['standard_ldap_search_filter'] = 'Filtro de busca LDAP padrão. Exemplo: (&(sn=Silva)(givenname=Pedro))';//'Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))'; +$lang['search_filter'] = 'Filtro de Busca';//'Search Filter'; +$lang['list_of_attrs_to_display_in_results'] = 'A lista de atributos que devem ser mostrados nos resultados (separados por vírgula)';//'A list of attributes to display in the results (comma-separated)'; + +// search_form_simple.php +$lang['starts with'] = 'inicia com';//'starts with'; +$lang['ends with'] = 'termina com';//'ends with'; +$lang['sounds like'] = 'é semelhante a';//'sounds like'; + + +// server_info.php +$lang['could_not_fetch_server_info'] = 'Não foi possível obter informação LDAP do servidor';//'Could not retrieve LDAP information from the server'; +$lang['server_info_for'] = 'Informações do servidor: ';//'Server info for: '; +$lang['server_reports_following'] = 'O servidor forneceu a seguinte informação sobre si mesmo';//'Server reports the following information about itself'; +$lang['nothing_to_report'] = 'Este servidor não tem nada a informar';//'This server has nothing to report.'; + +//update.php +$lang['update_array_malformed'] = 'update_array danificado. Isto pode ser um bug do phpLDAPadmin. Por favor informe.';//'update_array is malformed. This might be a phpLDAPadmin bug. Please report it.'; +$lang['could_not_perform_ldap_modify'] = 'Não foi possível realizar a operação ldap_modify.';//'Could not perform ldap_modify operation.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Você confirma estas alterações?';//'Do you want to make these changes?'; +$lang['attribute'] = 'Atributo';//'Attribute'; +$lang['old_value'] = 'Valor Antigo';//'Old Value'; +$lang['new_value'] = 'Valor Novo';//'New Value'; +$lang['attr_deleted'] = '[atributo excluído]';//'[attribute deleted]'; +$lang['commit'] = 'Confirmar';//'Commit'; +$lang['cancel'] = 'Cancelar';//'Cancel'; +$lang['you_made_no_changes'] = 'Você não fez alterações';//'You made no changes'; +$lang['go_back'] = 'Voltar';//'Go back'; + +// welcome.php +$lang['welcome_note'] = 'Use o menu à esquerda para navegar';//'Use the menu to the left to navigate'; +$lang['credits'] = 'Créditos';//'Credits'; +$lang['changelog'] = 'Log de Alterações';//'ChangeLog'; +$lang['donate'] = 'Contribuir';//'Donate'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Nome de arquivo inseguro: ';//'Unsafe file name: '; +$lang['no_such_file'] = 'Arquivo inexistente: ';//'No such file: '; + +//function.php +$lang['auto_update_not_setup'] = 'Você habilitou auto_uid_numbers para %s na sua configuração, mas você não especificou auto_uid_number_mechanism. Por favor corrija este problema.';//"You have enabled auto_uid_numbers for %s in your configuration, but you have not specified the auto_uid_number_mechanism. Please correct this problem.'; +$lang['uidpool_not_set'] = 'Você especificou o "auto_uid_number_mechanism" como "uidpool" na sua configuração para o servidor %s, mas você não especificou o audo_uid_number_uid_pool_dn. Por favor especifique-o antes de continuar.';//"You specified the auto_uid_number_mechanism as uidpool in your configuration for server %s, but you did not specify the audo_uid_number_uid_pool_dn. Please specify it before proceeding.'; +$lang['uidpool_not_exist'] = 'Parece que o uidPool que você especificou na sua configuração (%s) não existe.';//"It appears that the uidPool you specified in your configuration (%s) does not exist.'; +$lang['specified_uidpool'] = 'Você especificou o "auto_uid_number_mechanism" como "busca" na sua configuração para o servidor %s, mas você não especificou o "auto_uid_number_search_base". Por favor especifique-o antes de continuar.';//"You specified the auto_uid_number_mechanism as search in your configuration for server %s, but you did not specify the auto_uid_number_search_base. Please specify it before proceeding.'; +$lang['auto_uid_invalid_credential'] = 'Problema ao conectar ao %s com as suas credenciais auto_uid. Por favor verifique seu arquivo de configuração.';// 'Unable to bind to %s with your with auto_uid credentials. Please check your configuration file.'; +$lang['bad_auto_uid_search_base'] = 'Sua configuração do phpLDAPadmin especifica que o auto_uid_search_base é inválido para o servidor %s';//'Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s'; +$lang['auto_uid_invalid_value'] = 'Você especificou um valor inválido para auto_uid_number_mechanism ("%s") na sua configuração. Somente "uidpool" e "busca" são válidos. Por favor corrija este problema.';//"You specified an invalid value for auto_uid_number_mechanism (%s) in your configration. Only uidpool and search are valid. Please correct this problem.'; + +$lang['error_auth_type_config'] = 'Erro: Você tem um erro no seu arquivo de configuração. Os dois únicos valores permitidos para auth_type na seção $servers são \'config\' e \'form\'. Você entrou \'%s\', que não é permitido.';//"Error: You have an error in your config file. The only two allowed values for 'auth_type' in the $servers section are 'config' and 'form'. You entered '%s', which is not allowed. '; + +$lang['php_install_not_supports_tls'] = 'Sua instalação do PHP não suporta TLS';//"Your PHP install does not support TLS'; +$lang['could_not_start_tls'] = 'Impossível iniciar TLS. Por favor verifique a configuração do servidor LDAP.';//"Could not start TLS.
Please check your LDAP server configuration.'; +$lang['could_not_bind_anon'] = 'Não foi possível conectar ao servidor anonimamente.';//'Could not bind anonymously to server.'; +$lang['could_not_bind'] = 'Não foi possível conectar ao servidor LDAP.';//'Could not bind to the LDAP server.'; +$lang['anonymous_bind'] = 'Conexão anônima';//'Anonymous Bind'; +$lang['bad_user_name_or_password'] = 'Usuário ou senha inválido. Por favor tente novamente.';//'Bad username or password. Please try again.'; +$lang['redirecting_click_if_nothing_happens'] = 'Redirecionando... Clique aqui se nada acontecer.';//'Redirecting... Click here if nothing happens.'; +$lang['successfully_logged_in_to_server'] = 'Conexão estabelecida com sucesso no sevidor %s';//'Successfully logged into server %s'; +$lang['could_not_set_cookie'] = 'Não foi possível criar o cookie.';//'Could not set cookie.'; +$lang['ldap_said'] = 'O servidor LDAP respondeu: %s';//"LDAP said: %s

'; +$lang['ferror_error'] = 'Erro';//"Error'; +$lang['fbrowse'] = 'procurar';//"browse'; +$lang['delete_photo'] = 'Excluir imagem';//"Delete Photo'; +$lang['install_not_support_blowfish'] = 'Sua instalação do PHP não suporta codificação blowfish.';//"Your PHP install does not support blowfish encryption.'; +$lang['install_not_support_md5crypt'] = 'Sua instalação do PHP não suporta codificação md5crypt.';//'Your PHP install does not support md5crypt encryption.'; +$lang['install_no_mash'] = 'Sua instalação do PHP não tem a função mhash(). Impossível fazer transformações SHA.';// "Your PHP install does not have the mhash() function. Cannot do SHA hashes.'; +$lang['jpeg_contains_errors'] = 'Foto jpeg contém erros
';//"jpegPhoto contains errors
'; +$lang['ferror_number'] = 'Erro número: %s (%s)';//"Error number: %s (%s)

'; +$lang['ferror_discription'] ='Descrição: %s

';// "Description: %s

'; +$lang['ferror_number_short'] = 'Erro número: %s

';//"Error number: %s

'; +$lang['ferror_discription_short'] = 'Descrição: (descrição não disponível
';//"Description: (no description available)
'; +$lang['ferror_submit_bug'] = 'Isto é um bug do phpLDAPadmin? Se for, por favor informe.';//"Is this a phpLDAPadmin bug? If so, please report it.'; +$lang['ferror_unrecognized_num'] = 'Número do erro desconhecido: ';//"Unrecognized error number: '; + +$lang['ferror_nonfatil_bug'] = '
Você encontrou um bug não-fatal no phpLDAPadmin!
Erro:%s (%s)
Arquivo:%s linha %s, solicitante %s
Versão:PLA: %s, PHP: %s, SAPI: %s
Servidor Web:%s
Por favor informe este bug clicando aqui.

';//"
You found a non-fatal phpLDAPadmin bug!
Error:%s (%s)
File:%s line %s, caller %s
Versions:PLA: %s, PHP: %s, SAPI: %s
Web server:%s
Please report this bug by clicking here.

'; + +$lang['ferror_congrats_found_bug'] = 'Parabéns! Você encontrou um bug no phpLDAPadmin.

Erro:%s
Nível:%s
Arquivo:%s
Linha:%s
Caller:%s
PLA Vers&atile;o:%s
PHP Vers&atile;o:%s
PHP SAPI:%s
Servidor Web:%s

Por favor informe o bug clicando abaixo!';//"Congratulations! You found a bug in phpLDAPadmin.

Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA Version:%s
PHP Version:%s
PHP SAPI:%s
Web server:%s

Please report this bug by clicking below!'; + +//ldif_import_form +$lang['import_ldif_file_title'] = 'Importar arquivo LDIF';//'Import LDIF File'; +$lang['select_ldif_file'] = 'Selecionar um arquivo LDIF';//'Select an LDIF file:'; +$lang['select_ldif_file_proceed'] = 'Continuar >>';//'Proceed >>'; +$lang['dont_stop_on_errors'] = 'Não parar quando der erro';//'Don\'t stop on errors'; + +//ldif_import +$lang['add_action'] = 'Inserindo...';//'Adding...'; +$lang['delete_action'] = 'Deletando...';//'Deleting...'; +$lang['rename_action'] = 'Renomeando...';//'Renaming...'; +$lang['modify_action'] = 'Alterando...';//'Modifying...'; +$lang['warning_no_ldif_version_found'] = 'Nenhuma versão encontrada. Assumindo 1.';//'No version found. Assuming 1.'; +$lang['valid_dn_line_required'] = 'Uma linha dn válida é obrigatória.';//'A valid dn line is required.'; +$lang['missing_uploaded_file'] = 'Arquivo carregado perdido.';//'Missing uploaded file.'; +$lang['no_ldif_file_specified.'] = 'Nenhum arquivo LDIF especificado. Por favor tente novamente.';//'No LDIF file specified. Please try again.'; +$lang['ldif_file_empty'] = 'Arquivo LDIF carregado está vazio.';// 'Uploaded LDIF file is empty.'; +$lang['empty'] = 'vazio';//'empty'; +$lang['file'] = 'Arquivo';//'File'; +$lang['number_bytes'] = '%s bytes';//'%s bytes'; + +$lang['failed'] = 'Falhou';//'failed'; +$lang['ldif_parse_error'] = 'Erro Analisando Arquivo LDIF';//'LDIF Parse Error'; +$lang['ldif_could_not_add_object'] = 'Não foi possível inserir objeto:';//'Could not add object:'; +$lang['ldif_could_not_rename_object'] = 'Não foi possível renomear objeto:';//'Could not rename object:'; +$lang['ldif_could_not_delete_object'] = 'Não foi possível excluir objeto:';//'Could not delete object:'; +$lang['ldif_could_not_modify_object'] = 'Não foi possível alterar objeto:';//'Could not modify object:'; +$lang['ldif_line_number'] = 'Linha Número:';//'Line Number:'; +$lang['ldif_line'] = 'Linha:';//'Line:'; + +//delete_form +$lang['sure_permanent_delete_object']='Você tem certeza que deseja excluir este objeto permanentemente?';//'Are you sure you want to permanently delete this object?'; +$lang['permanently_delete_children']='Exluir permanentemente todos os objetos filho também?';//'Permanently delete all children also?'; + +$lang['list_of_entries_to_be_deleted'] = 'Lista de objetos a serem deletados: ';//'List of entries to be deleted:'; +$lang['dn'] = 'DN'; //'DN'; + +// Exports +$lang['export_format'] = 'Formato para exportar';// 'Export format'; +$lang['line_ends'] = 'Fins de linha'; //'Line ends'; +$lang['must_choose_export_format'] = 'Você deve especificar um formato para exportar';//'You must choose an export format.'; +$lang['invalid_export_format'] = 'Formato para exportação inválido';//'Invalid export format'; +$lang['no_exporter_found'] = 'Nenhum exportador de arquivos encontrado.';//'No available exporter found.'; +$lang['error_performing_search'] = 'Erro encontrado enquanto fazia a pesquisa.';//'Encountered an error while performing search.'; +$lang['showing_results_x_through_y'] = 'Mostrando resultados %s através %s.';//'Showing results %s through %s.'; +$lang['searching'] = 'Pesquisando...';//'Searching...'; +$lang['size_limit_exceeded'] = 'Aviso, limite da pesquisa excedido.';//'Notice, search size limit exceeded.'; +$lang['entry'] = 'Objeto';//'Entry'; +$lang['ldif_export_for_dn'] = 'Exportação LDIF para: %s'; //'LDIF Export for: %s'; +$lang['generated_on_date'] = 'Gerado pelo phpLDAPadmin no %s';//'Generated by phpLDAPadmin on %s'; +$lang['total_entries'] = 'Total de objetos';//'Total Entries'; +$lang['dsml_export_for_dn'] = 'Exportação DSLM para: %s';//'DSLM Export for: %s'; + +// logins +$lang['could_not_find_user'] = 'Não foi possível encontrar o usuário "%s"';//'Could not find a user "%s"'; +$lang['password_blank'] = 'Você deixou a senha vazia.';//'You left the password blank.'; +$lang['login_cancelled'] = 'Login cancelado.';//'Login cancelled.'; +$lang['no_one_logged_in'] = 'Ninguém está conectado neste servidor.';//'No one is logged in to that server.'; +$lang['could_not_logout'] = 'Não foi possível desconectar.';//'Could not logout.'; +$lang['unknown_auth_type'] = 'auth_type desconhecido: %s';//'Unknown auth_type: %s'; +$lang['logged_out_successfully'] = 'Desconectado com sucesso do servidor %s';//'Logged out successfully from server %s'; +$lang['authenticate_to_server'] = 'Autenticar no servidor %s';//'Authenticate to server %s'; +$lang['warning_this_web_connection_is_unencrypted'] = 'Aviso: Esta conexão NÃO é criptografada.';//'Warning: This web connection is unencrypted.'; +$lang['not_using_https'] = 'Você não está usando \'https\'. O navegador internet vai transmitir as informações de login sem criptografar.';// 'You are not use \'https\'. Web browser will transmit login information in clear text.'; +$lang['login_dn'] = 'Login DN';//'Login DN'; +$lang['user_name'] = 'Nome de usuário';//'User name'; +$lang['password'] = 'Senha';//'Password'; +$lang['authenticate'] = 'Autenticar';//'Authenticate'; + +// Entry browser +$lang['entry_chooser_title'] = 'Selecionador de objeto';//'Entry Chooser'; + +// Index page +$lang['need_to_configure'] = 'Você deve configurar o phpLDAPadmin. Faça isso editando o arquivo \'config.php\'. Um arquivo de exemplo é fornecido em \'config.php.example\'';// ';//'You need to configure phpLDAPadmin. Edit the file \'config.php\' to do so. An example config file is provided in \'config.php.example\''; + +// Mass deletes +$lang['no_deletes_in_read_only'] = 'Exclusões não permitidas no modo somente leitura.';//'Deletes not allowed in read only mode.'; +$lang['error_calling_mass_delete'] = 'Erro chamando mass_delete.php. Faltando mass_delete nas variáveis POST.';//'Error calling mass_delete.php. Missing mass_delete in POST vars.'; +$lang['mass_delete_not_array'] = 'a variável POST mass_delete não é um conjunto';//'mass_delete POST var is not an array.'; +$lang['mass_delete_not_enabled'] = 'Exclusão em massa não habilitada. Por favor habilite-a no arquivo config.php antes de continuar';//'Mass deletion is not enabled. Please enable it in config.php before proceeding.'; +$lang['mass_deleting'] = 'Exclusão em massa';//'Mass Deleting'; +$lang['mass_delete_progress'] = 'Progresso da exclusão no servidor "%s"';//'Deletion progress on server "%s"'; +$lang['malformed_mass_delete_array'] = 'Conjunto mass_delete danificado.';//'Malformed mass_delete array.'; +$lang['no_entries_to_delete'] = 'Você não selecionou nenhum objeto para excluir';//'You did not select any entries to delete.'; +$lang['deleting_dn'] = 'Excluindo %s';//'Deleting %s'; +$lang['total_entries_failed'] = '%s de %s objetos falharam na exclusão.';//'%s of %s entries failed to be deleted.'; +$lang['all_entries_successful'] = 'Todos objetos foram excluídos com sucesso.';//'All entries deleted successfully.'; +$lang['confirm_mass_delete'] = 'Confirme exclusão em massa de %s objetos no servidor %s';//'Confirm mass delete of %s entries on server %s'; +$lang['yes_delete'] = 'Sim, excluir!';//'Yes, delete!'; + + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'Você não pode renomear um objeto que tem objetos filhos (isto é, a operação de renomear não é permitida em objetos não-folha)';// 'You cannot rename an entry which has children entries (eg, the rename operation is not allowed on non-leaf entries)'; +$lang['no_rdn_change'] = 'Você não alterou o RDN';//'You did not change the RDN'; +$lang['invalid_rdn'] = 'Valor RDN inválido';//'Invalid RDN value'; +$lang['could_not_rename'] = 'Não foi possível renomear o objeto';//'Could not rename the entry'; + + +?> diff --git a/lang/recoded/ru.php b/lang/recoded/ru.php index 7b97d19..cf52b58 100644 --- a/lang/recoded/ru.php +++ b/lang/recoded/ru.php @@ -1,259 +1,535 @@ Удалить атрибут, очиÑтите текÑтовое поле и нажмите Ñохрнить.';//'Hint: To delete an attribute, empty the text field and click save.'; -$lang['viewing_read_only'] = 'ПроÑмотреть запиÑÑŒ в режиме только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ';//'Viewing entry in read-only mode.'; -$lang['change_entry_rdn'] = 'Change this entry\'s RDN'; -$lang['no_new_attrs_available'] = 'нет новых атрибутов Ð´Ð»Ñ Ñтой запиÑи';//'no new attributes available for this entry'; -$lang['binary_value'] = 'Бинарное значение';//'Binary value'; -$lang['add_new_binary_attr'] = 'Добавить новый бинарный атрибут';//'Add New Binary Attribute'; -$lang['add_new_binary_attr_tooltip'] = 'Добавить новый бинарный атрибут/значение Ñ Ñ„Ð°Ð¹Ð»Ð°';//'Add a new binary attribute/value from a file'; -$lang['alias_for'] = 'ÐÐ»Ð¸Ð°Ñ Ð´Ð»Ñ';//'Alias for'; -$lang['download_value'] = 'загрузить значение';//'download value'; -$lang['delete_attribute'] = 'удалить атрибут';//'delete attribute'; -$lang['true'] = 'да';//'true'; -$lang['false'] = 'нет';//'false'; -$lang['none_remove_value'] = 'нет, удалите значение';//'none, remove value'; -$lang['really_delete_attribute'] = 'Really delete attribute'; +$lang['delete_this_entry'] = 'Удалить Ñту запиÑÑŒ'; +$lang['delete_this_entry_tooltip'] = 'Ð’Ð°Ñ Ð¿Ð¾Ð¿Ñ€Ð¾ÑÑÑ‚ подтвердить Ваше решение'; +$lang['copy_this_entry'] = 'Скопировать Ñту запиÑÑŒ'; +$lang['copy_this_entry_tooltip'] = 'Скопировать Ñтот объект в другое меÑто, в новый DN или на другой Ñервер'; +$lang['export'] = 'ЭкÑпорт'; +$lang['export_tooltip'] = 'Сохранить дамп Ñтого объекта'; +$lang['export_subtree_tooltip'] = 'Сохранить дамп Ñтого объекта и вÑех его потомков'; +$lang['export_subtree'] = 'ЭкÑпортировать ветвь'; +$lang['create_a_child_entry'] = 'Создать потомка'; +$lang['rename_entry'] = 'Переименовать запиÑÑŒ'; +$lang['rename'] = 'Переименовать'; +$lang['add'] = 'Добавить'; +$lang['view'] = 'ПроÑмотреть'; +$lang['view_one_child'] = 'ПроÑмотреть 1 потомка'; +$lang['view_children'] = 'ПроÑмотреть %s потомков'; +$lang['add_new_attribute'] = 'Добавить новый атрибут'; +$lang['add_new_objectclass'] = 'Добавить новый объект'; +$lang['hide_internal_attrs'] = 'Скрыть внутренние атрибуты'; +$lang['show_internal_attrs'] = 'Показать внутренние атрибуты'; +$lang['attr_name_tooltip'] = 'Ðажмите чтобы проÑмотреть опиÑание Ñхемы Ð´Ð»Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° \'%s\''; +$lang['none'] = 'нет'; +$lang['no_internal_attributes'] = 'Ðет внутренних атрибутов'; +$lang['no_attributes'] = 'Эта запиÑÑŒ не имеет атрибутов'; +$lang['save_changes'] = 'Сохранить изменениÑ'; +$lang['add_value'] = 'добавить значение'; +$lang['add_value_tooltip'] = 'Добавить дополнительное значение Ð´Ð»Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° \'%s\''; +$lang['refresh_entry'] = 'Обновить'; +$lang['refresh_this_entry'] = 'Обновить Ñту запиÑÑŒ'; +$lang['delete_hint'] = 'ПодÑказка: Чтобы удалить атрибут - очиÑтите текÑтовое поле и нажмите "Ñохранить"'; +$lang['attr_schema_hint'] = 'ПодÑказка: Чтобы проÑмотреть Ñхему атрибута - нажмите на его названии.'; +$lang['attrs_modified'] = 'Ðекоторые атрибуты (%s) были модифицированы и теперь подÑвечены ниже.'; +$lang['attr_modified'] = 'Ðтрибут (%s) был модифицирован и теперь подÑвечен ниже.'; +$lang['viewing_read_only'] = 'ПроÑмотр запиÑи в режиме "только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ".'; +$lang['no_new_attrs_available'] = 'Ð´Ð»Ñ Ñтой запиÑи нет доÑтупных новых атрибутов'; +$lang['no_new_binary_attrs_available'] = 'Ð´Ð»Ñ Ñтой запиÑи нет доÑтупных новых бинарных атрибутов'; +$lang['binary_value'] = 'Бинарное значение'; +$lang['add_new_binary_attr'] = 'Добавить новый бинарный атрибут'; +$lang['alias_for'] = 'Внимание: \'%s\' - Ð°Ð»Ð¸Ð°Ñ Ð´Ð»Ñ \'%s\''; +$lang['download_value'] = 'загрузить значение'; +$lang['delete_attribute'] = 'удалить атрибут'; +$lang['true'] = 'правда'; +$lang['false'] = 'ложь'; +$lang['none_remove_value'] = 'пуÑто, удалите значение'; +$lang['really_delete_attribute'] = 'ДейÑтвительно удалить значение'; +$lang['add_new_value'] = 'Добавить новое значение'; // Schema browser -$lang['the_following_objectclasses'] = 'Следующий objectClasses поддерживаетьÑÑ Ñтим LDAP Ñервером.';;//'The following objectClasses are supported by this LDAP server.'; -$lang['the_following_attributes'] = 'Следующий attributeTypes поддерживаетьÑÑ Ñтим LDAP Ñевером.';//The following attributeTypes are supported by this LDAP server.'; -$lang['the_following_matching'] = 'Следующий matching rules поддерживаетьÑÑ Ñтим LDAP Ñевером.';//'The following matching rules are supported by this LDAP server.'; -$lang['the_following_syntaxes'] = 'Следующий syntaxes поддерживаетьÑÑ Ñтим LDAP Ñервером.';//'The following syntaxes are supported by this LDAP server.'; -$lang['jump_to_objectclass'] = 'Перейти к objectClass';//'Jump to an objectClass'; -$lang['jump_to_attr'] = 'Перейти к атрибутам';//'Jump to an attribute'; -$lang['schema_for_server'] = 'Схема Ð´Ð»Ñ Ñервера';//'Schema for server'; -$lang['required_attrs'] = 'Запрошеные атрибуты';//'Required Attributes'; -$lang['optional_attrs'] = 'Оптимальные отрибуты';//'Optional Attributes'; +$lang['the_following_objectclasses'] = 'Этот LDAP Ñервер поддерживает Ñледующие объекты.'; +$lang['the_following_attributes'] = 'Этот LDAP Ñервер поддерживает Ñледующие типы атрибутов.'; +$lang['the_following_matching'] = 'Этот LDAP Ñервер поддерживает Ñледующие правила ÑоответÑтвиÑ.'; +$lang['the_following_syntaxes'] = 'Этот LDAP Ñервер поддерживает Ñледующие ÑинтакÑиÑÑ‹.'; +$lang['schema_retrieve_error_1']='Этот Ñервер не полноÑтью поддерживает LDAP протокол.'; +$lang['schema_retrieve_error_2']='Ваша верÑÐ¸Ñ PHP неправильно обработала запроÑ.'; +$lang['schema_retrieve_error_3']='Или phpLDAPadmin не знает как получить Ñхему Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ Ñервера.'; +$lang['jump_to_objectclass'] = 'Перейти к объекту'; +$lang['jump_to_attr'] = 'Перейти к типам атрибутов'; +$lang['jump_to_matching_rule'] = 'Перейти к правилам ÑоответÑтвиÑ'; +$lang['schema_for_server'] = 'Схема Ð´Ð»Ñ Ñервера'; +$lang['required_attrs'] = 'Требуемые атрибуты'; +$lang['optional_attrs'] = 'ÐеобÑзательные атрибуты'; +$lang['optional_binary_attrs'] = 'ÐеобÑзательные бинарные атрибуты'; $lang['OID'] = 'OID'; -$lang['desc'] = 'ОпиÑание';//'Description'; -$lang['is_obsolete'] = 'Этот objectClass еÑÑ‚ÑŒ obsolete';//'This objectClass is obsolete'; -$lang['inherits'] = 'ÐаÑледование'; -$lang['jump_to_this_oclass'] = 'Перейти к Ñтому objectClass опиÑанию';//'Jump to this objectClass definition'; -$lang['matching_rule_oid'] = 'Matching Rule OID'; -$lang['syntax_oid'] = 'Syntax OID'; +$lang['aliases']='ÐлиаÑÑ‹'; +$lang['desc'] = 'ОпиÑание'; +$lang['no_description']='нет опиÑаниÑ'; +$lang['name'] = 'ИмÑ'; +$lang['equality']='РавенÑтво'; +$lang['is_obsolete'] = 'Этот объект уÑтарел.'; +$lang['inherits'] = 'ЗаимÑтвует из'; +$lang['inherited_from'] = 'ЗаимÑтвован из'; +$lang['parent_to'] = 'Родитель длÑ'; +$lang['jump_to_this_oclass'] = 'Перейти к определению Ñтого объекта'; +$lang['matching_rule_oid'] = 'OID правила ÑоответÑтвиÑ'; +$lang['syntax_oid'] = 'OID ÑинтакÑиÑа'; +$lang['not_applicable'] = 'неприменимый'; +$lang['not_specified'] = 'не указано'; +$lang['character']='Ñимвол'; +$lang['characters']='Ñимволы'; +$lang['used_by_objectclasses']='ИÑпользуетÑÑ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°Ð¼Ð¸'; +$lang['used_by_attributes']='ИÑпользован атрибутами'; +$lang['maximum_length']='МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð°'; +$lang['attributes']='Типы атрибутов'; +$lang['syntaxes']='СинтакÑиÑÑ‹'; +$lang['matchingrules']='Правила ÑоответÑтвиÑ'; +$lang['oid']='OID'; +$lang['obsolete']='УÑтаревший'; +$lang['ordering']='Сортировка'; +$lang['substring_rule']='Правило подÑтроки'; +$lang['single_valued']='Однозначный'; +$lang['collective']='СовмеÑтный'; +$lang['user_modification']='Изменение пользователем'; +$lang['usage']='ИÑпользование'; +$lang['could_not_retrieve_schema_from']='Ðе могу получить Ñхему из'; +$lang['type']='Тип'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'ЗапиÑÑŒ %s уÑпешно удалена.'; +$lang['you_must_specify_a_dn'] = 'Ð’Ñ‹ должны указать DN'; +$lang['could_not_delete_entry'] = 'Ðе удалоÑÑŒ удалить запиÑÑŒ: %s'; +$lang['no_such_entry'] = 'Ðет такой запиÑи: %s'; +$lang['delete_dn'] = 'Удалить %s'; +$lang['permanently_delete_children'] = 'Также окончательно удалить вÑех потомков?'; +$lang['entry_is_root_sub_tree'] = 'Эта запиÑÑŒ ÑвлÑетÑÑ ÐºÐ¾Ñ€Ð½ÐµÐ¼ дерева Ñодержащего %s запиÑей.'; +$lang['view_entries'] = 'проÑмотреть запиÑи'; +$lang['confirm_recursive_delete'] = 'phpLDAPadmin может рекурÑивно удалить Ñту запиÑÑŒ и %s его потомков. Ðиже ÑпиÑок вÑех запиÑей, которые будут удалены. Ð’Ñ‹ дейÑтвительно хотите Ñто Ñделать?'; +$lang['confirm_recursive_delete_note'] = 'Внимание: Ñто потенциально очень опаÑно и вы делаете Ñто на Ñвой ÑобÑтвенный риÑк. Эта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ может быть отменена. Примите во внимание алиаÑÑ‹, ÑÑылки и другие вещи, которые могум вызвать проблемы.'; +$lang['delete_all_x_objects'] = 'Удалить вÑе %s объектов'; +$lang['recursive_delete_progress'] = 'ПрогреÑÑ Ñ€ÐµÐºÑƒÑ€Ñивного удалениÑ'; +$lang['entry_and_sub_tree_deleted_successfully'] = 'ЗапиÑÑŒ %s и ее потомки уÑпешно удалены.'; +$lang['failed_to_delete_entry'] = 'Ðе удалоÑÑŒ удалить запиÑÑŒ %s'; +$lang['list_of_entries_to_be_deleted'] = 'СпиÑок запиÑей на удаление:'; +$lang['sure_permanent_delete_object']='Ð’Ñ‹ уверены, что хотите окончательно удалить Ñтот объект?'; +$lang['dn'] = 'DN'; + +// Deleting attributes +$lang['attr_is_read_only'] = 'Этот атрибут "%s" уÑтановлен "только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ" в конфигурации phpLDAPadmin.'; +$lang['no_attr_specified'] = 'Ðе указано Ð¸Ð¼Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð°.'; +$lang['no_dn_specified'] = 'Ðе указан DN'; + +// Adding attributes +$lang['left_attr_blank'] = 'Ð’Ñ‹ оÑтавили значение атрибута пуÑтым. ВернитеÑÑŒ и попробуйте еще раз.'; +$lang['failed_to_add_attr'] = 'Ðе удалоÑÑŒ добавить атрибут.'; +$lang['file_empty'] = 'Файл, который Ð’Ñ‹ выбрали или не ÑущеÑтвует или пуÑÑ‚. ПожалуйÑта вернитеÑÑŒ и попробуйте еще раз.'; +$lang['invalid_file'] = 'Ошибка безопаÑноÑти: Файл который Ð’Ñ‹ загрузили может иметь вредоноÑный код.'; +$lang['warning_file_uploads_disabled'] = 'Ваша ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ PHP запрещает загрузку файлов. Проверьте php.ini перед тем как продолжить.'; +$lang['uploaded_file_too_big'] = 'Файл, который Ð’Ñ‹ загрузили Ñлишком велик. Проверьте php.ini, опцию upload_max_size'; +$lang['uploaded_file_partial'] = 'Файл, который Ð’Ñ‹ выбрали был загружен только чаÑтично, вероÑтно из-за ошибки в Ñети.'; +$lang['max_file_size'] = 'МакÑимальный размер файла: %s'; + +// Updating values +$lang['modification_successful'] = 'Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑƒÑпешно произведены!'; +$lang['change_password_new_login'] = 'Т.к. Ð’Ñ‹ изменили Ñвой пароль, Ð’Ñ‹ должны войти заново, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñвой новый пароль.'; // Adding objectClass form -$lang['new_required_attrs'] = 'Ðовые запрошеные параметры';// 'New Required Attributes'; -$lang['requires_to_add'] = 'Это дейÑтвие запрошено вами к добавлению';//'This action requires you to add'; -$lang['new_attributes'] = 'новые атрибуты';//'new attributes'; -$lang['new_required_attrs_instructions'] = 'Instructions: In order to add this objectClass to this entry, you must specify'; -$lang['that_this_oclass_requires'] = 'that this objectClass requires. You can do so in this form.'; -$lang['add_oclass_and_attrs'] = 'И ObjectClass и Attributes';//'Add ObjectClass and Attributes'; +$lang['new_required_attrs'] = 'Ðовые требуемые атрибуты'; +$lang['requires_to_add'] = 'Это дейÑтвие требует добавить'; +$lang['new_attributes'] = 'новые атрибуты'; +$lang['new_required_attrs_instructions'] = 'ИнÑтрукциÑ: Чтобы добавить Ñтот объект к Ñтой запиÑи, Ð’Ñ‹ должны указать'; +$lang['that_this_oclass_requires'] = 'что требует Ñтот объект. Ð’Ñ‹ можете Ñто Ñделать в Ñтой форме.'; +$lang['add_oclass_and_attrs'] = 'Добавить объект и атрибуты'; +$lang['objectclasses'] = 'Объекты'; // General -$lang['chooser_link_tooltip'] = 'Click to popup a dialog to select an entry (DN) graphically'; -$lang['no_updates_in_read_only_mode'] = 'You cannot perform updates while server is in read-only mode'; -$lang['bad_server_id'] = 'Плохой Ñервера id';//'Bad server id'; -$lang['not_enough_login_info'] = 'Ðе доÑтаточно информации Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº Ñерверу. ПожалуÑта проверте Вашу конфигулацию.';//'Not enough information to login to server. Please check your configuration.'; -$lang['could_not_connect'] = 'Ðе могу подключитьÑÑ Ðº LDAP Ñервером';//'Could not connect to LDAP server.'; -$lang['could_not_perform_ldap_mod_add'] = 'Could not perform ldap_mod_add operation.'; +$lang['chooser_link_tooltip'] = 'Ðажмите чтобы вызвать диалог Ð´Ð»Ñ Ð²Ð¸Ð·ÑƒÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ выбора запиÑи(DN)'; +$lang['no_updates_in_read_only_mode'] = 'Ð’Ñ‹ не можете производить Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾ тех пор, пока Ñервер находитÑÑ Ð² режиме "только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ"'; +$lang['bad_server_id'] = 'Ðеправильный id Ñервера'; +$lang['not_enough_login_info'] = 'ÐедоÑтаточно информации чтобы подключитьÑÑ Ðº Ñерверу. Проверьте Вашу конфигурацию.'; +$lang['could_not_connect'] = 'Ðе могу подключитьÑÑ Ðº LDAP-Ñерверу.'; +$lang['could_not_connect_to_host_on_port'] = 'Ðе могу подключитьÑÑ Ðº "%s" на порт "%s"'; +$lang['could_not_perform_ldap_mod_add'] = 'Ðе удалоÑÑŒ произвеÑти операцию ldap_mod_add.'; +$lang['bad_server_id_underline'] = 'Ðеправильный server_id: '; +$lang['success'] = 'УÑпешно'; +$lang['server_colon_pare'] = 'Сервер: '; +$lang['look_in'] = 'Ищу в: '; +$lang['missing_server_id_in_query_string'] = 'Ðе указан ID Ñервера в Ñтроке запроÑа!'; +$lang['missing_dn_in_query_string'] = 'Ðе указан DN в Ñтроке запроÑа!'; +$lang['back_up_p'] = 'Back Up...'; +$lang['no_entries'] = 'нет запиÑей'; +$lang['not_logged_in'] = 'Ðе авторизовалиÑÑŒ'; +$lang['could_not_det_base_dn'] = 'Ðе могу выÑÑнить оÑновной DN'; +$lang['please_report_this_as_a_bug']='ПожалуйÑта Ñообщите об Ñтой ошибке.'; +$lang['reasons_for_error']='Это могло ÑлучитÑÑ Ð¿Ð¾ неÑкольким причинам, наиболее вероÑтные Ñто:'; +$lang['yes']='Да'; +$lang['no']='Ðет'; +$lang['go']='Перейти'; +$lang['delete']='Удалить'; +$lang['back']='Ðазад'; +$lang['object']='объект'; +$lang['delete_all']='Удалить вÑе'; +$lang['url_bug_report']='https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; +$lang['hint'] = 'подÑказка'; +$lang['bug'] = 'ошибка'; +$lang['warning'] = 'предупреждение'; +$lang['light'] = 'Ñвет'; // the word 'light' from 'light bulb' +$lang['proceed_gt'] = 'Далее >>'; + // Add value form -$lang['add_new'] = 'Добавить новый';//'Add new'; -$lang['value_to'] = 'Значение к';//'value to'; -$lang['server'] = 'Сервер';//'Server'; -$lang['distinguished_name'] = 'Distinguished Name'; -$lang['current_list_of'] = 'Текущий ÑпиÑок';//'Current list of'; -$lang['values_for_attribute'] = 'значение Ð´Ð»Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð°';//'values for attribute'; -$lang['inappropriate_matching_note'] = 'Note: You will get an "inappropriate matching" error if you have not
' . - 'setup an EQUALITY rule on your LDAP server for this attribute.'; -$lang['enter_value_to_add'] = 'Enter the value you would like to add:'; -$lang['new_required_attrs_note'] = 'Note: you may be required to enter new attributes
that this objectClass requires.'; -$lang['syntax'] = 'СинтакÑиÑ';//'Syntax'; +$lang['add_new'] = 'Добавить новый'; +$lang['value_to'] = 'значение длÑ'; +$lang['distinguished_name'] = 'Отличительное имÑ'; +$lang['current_list_of'] = 'Текущий ÑпиÑок'; +$lang['values_for_attribute'] = 'значений атрибутов'; +$lang['inappropriate_matching_note'] = 'Внимание: Ð’Ñ‹ получите ошибку "неподходÑщее ÑоответÑтвие", еÑли Ð’Ñ‹ выÑтавили правило "равенÑтво"(EQUALITY) на Вашем LDAP-Ñервере Ð´Ð»Ñ Ñтого атрибута.'; +$lang['enter_value_to_add'] = 'Введите значение, которое Ð’Ñ‹ хотите добавить:'; +$lang['new_required_attrs_note'] = 'Внимание: Вам может потребоватьÑÑ Ð²Ð²ÐµÑти новые атрибуты, которые требует Ñтот объект'; +$lang['syntax'] = 'СинтакÑ'; -// Incomplete or Erroneous Language Files -$lang['attr_name_tooltip'] = 'attr_name_tooltip'; -$lang['refresh_entry']= 'обновить запиÑÑŒ'; -$lang['attr_schema_hint']='атрибут Ñхемы подÑказки'; -$lang['attrs_modified']='атрибуты изменены'; -$lang['attr_modified']='атрибут изменен'; -$lang['name']='имÑ'; -$lang['not_applicable']='не применимый'; -$lang['not_specified']='не орпеделенный'; -$lang['entry_deleted_successfully']='запиÑÑŒ удалена уÑпешно'; -$lang['you_must_specify_a_dn']='вы должны определить DN'; -$lang['could_not_delete_entry']='не возможно удалить запиÑÑŒ'; -$lang['bad_server_id_underline']='неверный id Ñервера подчеркивать'; -$lang['success']='уÑпешно'; -$lang['server_colon_pare']='вырезать двоеточие Ñевера'; -$lang['look_in']='раÑÑматривать'; -$lang['missing_server_id_in_query_string']='отÑутÑвует id Ñервера в Ñтроке запроÑа'; -$lang['missing_dn_in_query_string']='отÑутÑвует dn в Ñтроке запроÑа'; -$lang['back_up_p']='back up p'; -$lang['no_entries']='нет запиÑей'; -$lang['not_logged_in']='не зарагеÑтрирован в'; -$lang['could_not_det_base_dn']='не возможно определить Base DN'; -$lang['copy_server_read_only']='корировать Ñервер только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ'; -$lang['copy_dest_dn_blank']='копировать в раÑположение пуÑтого DN'; -$lang['copy_dest_already_exists']='копировать в раÑположение уже ÑущеÑтвующее'; -$lang['copy_dest_container_does_not_exist']='копировать в раÑположение которое не ÑущеÑтвует'; -$lang['copy_source_dest_dn_same']='копировать Ñ Ð¸Ñходного раÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² тот же DN '; -$lang['copy_copying']='копировать копирование'; -$lang['copy_recursive_copy_progress']='копирование Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ€ÐµÐºÑƒÑ€Ñивного копированиÑ'; -$lang['copy_building_snapshot']='копирование кадра поÑтроение'; -$lang['copy_successful_like_to']='копирование уÑпешно подобно до '; -$lang['copy_view_new_entry']='копирование проÑмотр новых запиÑей'; -$lang['copy_failed']='копирование неудачно'; -$lang['missing_template_file']='нет временого файла'; -$lang['using_default']='иÑпользовать по умолчанию'; -$lang['copyf_title_copy']='копировать заголовок копировать'; -$lang['copyf_to_new_object']='копировать новый объект'; -$lang['copyf_dest_dn']='копировать раÑположение DN'; -$lang['copyf_dest_dn_tooltip']='копировать раÑположение DN toolip'; -$lang['copyf_dest_server']='копировать раÑположение Ñервера'; -$lang['copyf_note']='копировать запиÑку'; -$lang['copyf_recursive_copy']='копирование рекурÑивное копирование'; -$lang['create_required_attribute']='Ñоздать необходимый атрибут'; -$lang['create_redirecting']='Ñоздать переназначение'; -$lang['create_here']='Ñоздать ÑдеÑÑŒ'; -$lang['create_could_not_add']='Ñоздание не может добавление'; -$lang['createf_create_object']='Ñоздать объект'; -$lang['createf_choose_temp']='выбрать шаблон'; -$lang['createf_select_temp']='выбрать шаблон'; -$lang['createf_proceed']='обработаный'; -$lang['ctemplate_on_server']='на Ñервер'; -$lang['ctemplate_no_template']='нет шаблона'; -$lang['ctemplate_config_handler']='Ñкофигурировать инÑтруктора'; -$lang['ctemplate_handler_does_not_exist']='конÑтруктор не ÑущеÑтвует'; -$lang['you_have_not_logged_into_server']='Ð’Ñ‹ не зарегеÑтрировалиÑÑŒ на Ñервере'; -$lang['click_to_go_to_login_form']='нажмите Ð´Ð»Ñ Ñ€ÐµÐ³Ð¸Ñтрации'; -$lang['unrecognized_criteria_option']='неизвеÑна Ð¾Ð¿Ñ†Ð¸Ñ ÐºÑ€Ð¸Ñ‚ÐµÑ€Ð¸Ñ'; -$lang['if_you_want_to_add_criteria']='еÑли Ð’Ñ‹ хотите добавить критерий'; -$lang['entries_found']='запиÑи найдены'; -$lang['filter_performed']='фильтер выполнен'; -$lang['search_duration']='поиÑк длительный'; -$lang['seconds']='Ñекунды'; -$lang['scope_in_which_to_search']='в которой иÑкать'; -$lang['scope_sub']='под'; -$lang['scope_one']='одна облаÑÑ‚ÑŒ'; -$lang['scope_base']='база'; -$lang['standard_ldap_search_filter']='Ñтандартный ldap поиÑковый фильтер'; +//copy.php +$lang['copy_server_read_only'] = 'Ð’Ñ‹ не можете производить Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾ тех пор, пока Ñервер находитÑÑ Ð² режиме "только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ"'; +$lang['copy_dest_dn_blank'] = 'Ð’Ñ‹ не заполнили конечный DN.'; +$lang['copy_dest_already_exists'] = 'ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ (%s) уже ÑужеÑтвует.'; +$lang['copy_dest_container_does_not_exist'] = 'Конечный контейнер (%s) не ÑущеÑтвует.'; +$lang['copy_source_dest_dn_same'] = 'ИÑходный и конечный DN одинаковы.'; +$lang['copy_copying'] = 'Сопирую '; +$lang['copy_recursive_copy_progress'] = 'ПрогреÑÑ Ñ€ÐµÐºÑƒÑ€Ñивного копированиÑ'; +$lang['copy_building_snapshot'] = 'Создаю копию ÑоÑтоÑÐ½Ð¸Ñ Ð´ÐµÑ€ÐµÐ²Ð° Ð´Ð»Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ... '; +$lang['copy_successful_like_to'] = 'Копирование прошло уÑпешно! Ð’Ñ‹ хотите '; +$lang['copy_view_new_entry'] = 'проÑмотреть новую запиÑÑŒ'; +$lang['copy_failed'] = 'Ðе удалоÑÑŒ Ñкопировать DN: '; + +//edit.php +$lang['missing_template_file'] = 'Предупреджение: отÑутÑтвуе файл шаблона, '; +$lang['using_default'] = 'ИÑпользую оÑновной.'; +$lang['template'] = 'Шаблон'; +$lang['must_choose_template'] = 'Ð’Ñ‹ должны выбрать шаблон'; +$lang['invalid_template'] = '%s неверный шаблон'; +$lang['using_template'] = 'иÑпользую шаблон'; +$lang['go_to_dn'] = 'Перейти к %s'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Копировать '; +$lang['copyf_to_new_object'] = 'в новый объект'; +$lang['copyf_dest_dn'] = 'Конечный DN'; +$lang['copyf_dest_dn_tooltip'] = 'Полный DN новой запиÑи будет Ñоздан при копировании иÑходной'; +$lang['copyf_dest_server'] = 'Конечный Ñервер'; +$lang['copyf_note'] = 'ПодÑказка: Копирование между различными Ñерверами Ñработает, еÑли между ними нет противоречий в Ñхемах'; +$lang['copyf_recursive_copy'] = 'РекурÑивно Ñкопировать и вÑех потомков Ñтого объекта.'; +$lang['recursive_copy'] = 'РекурÑивное копирование'; +$lang['filter'] = 'Фильтр'; +$lang['filter_tooltip'] = 'ЕÑли производите рекурÑивное копирование - копируйте только те запиÑи, которые ÑоответÑтвуют Ñтому фильтру'; + +//create.php +$lang['create_required_attribute'] = 'Ð’Ñ‹ оÑтавили пуÑтым значение Ð´Ð»Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÐ¼Ð¾Ð³Ð¾ атрибута (%s).'; +$lang['redirecting'] = 'Переназначаю...'; +$lang['here'] = 'Ñюда'; +$lang['create_could_not_add'] = 'Ðе удалоÑÑŒ добавить объект на LDAP-Ñервер.'; + +//create_form.php +$lang['createf_create_object'] = 'Создать объект'; +$lang['createf_choose_temp'] = 'Выберите шаблон'; +$lang['createf_select_temp'] = 'Выберите шаблон Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°'; +$lang['createf_proceed'] = 'Далее'; +$lang['rdn_field_blank'] = 'Ð’Ñ‹ оÑтавили RDN поле пуÑтым.'; +$lang['container_does_not_exist'] = 'Контейнер, который Ð’Ñ‹ указали (%s) не ÑущеÑтвует. Попробуйте еще раз.'; +$lang['no_objectclasses_selected'] = 'Ð’Ñ‹ не выбрали ни одного клаÑÑа Ð´Ð»Ñ Ñтого объекта. ВернитеÑÑŒ и Ñделайте Ñто.'; +$lang['hint_structural_oclass'] = 'ПодÑказка: Ð’Ñ‹ должны выбрать как минимум один Ñтруктурный клаÑÑ'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'Ðа Ñервере'; +$lang['ctemplate_no_template'] = 'Ð’ POST переменных не указан шаблон.'; +$lang['ctemplate_config_handler'] = 'Ваша ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ обработчик'; +$lang['ctemplate_handler_does_not_exist'] = 'Ð´Ð»Ñ Ñтого шаблона. Ðо Ñтот обработчик не ÑущеÑтвует в каталоге templates/creation.'; +$lang['create_step1'] = 'Шаг 1 из 2: Ð˜Ð¼Ñ Ð¸ клаÑÑ(Ñ‹) объекта'; +$lang['create_step2'] = 'Шаг 2 из 2: Определение атрибутов и значений'; +$lang['relative_distinguished_name'] = 'ОтноÑительное оттличительное имÑ'; +$lang['rdn'] = 'RDN'; +$lang['rdn_example'] = '(пример: cn=MyNewPerson)'; +$lang['container'] = 'Контейнер'; +$lang['alias_for'] = 'ÐÐ»Ð¸Ð°Ñ Ð´Ð»Ñ %s'; + +// search.php +$lang['you_have_not_logged_into_server'] = 'Ð’Ñ‹ еще на вошли на выбранный Ñервер, поÑтому Ð’Ñ‹ не можете производить на нем поиÑк.'; +$lang['click_to_go_to_login_form'] = 'Ðажмите здеÑÑŒ чтобы перейти на форму входа на Ñервер'; +$lang['unrecognized_criteria_option'] = 'ÐераÑпознанный критерий поиÑка: '; +$lang['if_you_want_to_add_criteria'] = 'ЕÑли Ð’Ñ‹ хотите добавить Ñвои критерии поиÑка в ÑпиÑок, отредактируйте search.php, чтобы они поддерживалиÑÑŒ. Выхожу.'; +$lang['entries_found'] = 'Ðайдено запиÑей: '; +$lang['filter_performed'] = 'Применен фильтр: '; +$lang['search_duration'] = 'phpLDAPadmin произвел поиÑк за'; +$lang['seconds'] = 'Ñекунд'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'ОблаÑÑ‚ÑŒ поиÑка'; +$lang['scope_sub'] = 'Ð’Ñе (вÑе поддерево)'; +$lang['scope_one'] = 'Один (один уровень под базовым)'; +$lang['scope_base'] = 'База (только базовый dn)'; +$lang['standard_ldap_search_filter'] = 'Стандартный фильтр поиÑка LDAP. Пример: (&(sn=Smith)(givenname=David))'; $lang['search_filter'] = 'Фильтр поиÑка'; -$lang['list_of_attrs_to_display_in_results']='ÑпиÑок атрибутов показать в результате'; -$lang['starts with'] = 'начинаетÑÑ Ñ';//'starts with'; -$lang['ends with'] = 'заканчиваетÑÑ Ð½Ð°';//'ends with'; -$lang['sounds like']='звучит подобно'; -$lang['could_not_fetch_server_info']='не могу получить информацию Ñ Ñервера'; -$lang['server_info_for']='инфа Ñервера длÑ'; -$lang['server_reports_following']='отчет Ñервера Ñледует'; -$lang['nothing_to_report']='нечего показать Ð´Ð»Ñ Ð¾Ñ‚Ñ‡ÐµÑ‚Ð°'; -$lang['update_array_malformed']='update_array_malformed'; -$lang['could_not_perform_ldap_modify']='Ð½ÐµÐ»ÑŒÐ·Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ñ‚ÑŒ изменение ldap'; -$lang['do_you_want_to_make_these_changes']='хотите Ñделать Ñти изменениÑ'; -$lang['attribute']='атрибут'; -$lang['old_value']='Ñтарое значение'; -$lang['new_value']='новое значение'; -$lang['attr_deleted']='атрибут удален'; -$lang['commit']='подтвердить'; -$lang['cancel']='отменить'; -$lang['you_made_no_changes']='Ð’Ñ‹ ничего не изменили '; -$lang['go_back']='назад'; -$lang['welcome_note']='ИÑпользуйте меню Ñлева Ð´Ð»Ñ Ð½Ð°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ð¸'; -$lang['unsafe_file_name']='ненадежное Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°'; -$lang['no_such_file']='нет такого файла'; -$lang['auto_update_not_setup']='авто-обновление не уÑтанавливать'; -$lang['uidpool_not_set']='uidpool не указан'; -$lang['uidpool_not_exist']='uidpool не ÑущеÑтвует'; -$lang['specified_uidpool']='определите uidpool'; -$lang['auto_uid_invalid_value']='auto uid неправильное значение'; -$lang['error_auth_type_config']='error_auth_type_config'; -$lang['php_install_not_supports_tls']='уÑтановленый PHP не поддерживает tls'; -$lang['could_not_start_tls']='Ð½ÐµÐ»ÑŒÐ·Ñ Ð½Ð°Ñ‡Ð°Ñ‚ÑŒ tls'; -$lang['auth_type_not_valid']='тип авторизации не правильный'; -$lang['ldap_said']='ldap Ñказал'; -$lang['ferror_error']='ошибка'; -$lang['fbrowse']='проÑмотреть'; -$lang['delete_photo']='удалить фото'; -$lang['install_not_support_blowfish']='уÑтановка не поддерживает blowfish'; -$lang['install_no_mash']='install_no_mash'; -$lang['jpeg_contains_errors']='jpeg Ñодержит ошибки'; -$lang['ferror_number']='номер ошибки'; -$lang['ferror_discription']='ошибка опиÑаниÑ'; -$lang['ferror_number_short']='чиÑло короткое'; -$lang['ferror_discription_short']='опиÑание короткое'; -$lang['ferror_submit_bug']='подтвердите баг'; -$lang['ferror_unrecognized_num']='неивеÑный номер ошибки '; -$lang['ferror_nonfatil_bug']='не Ñ„Ð°Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°'; -$lang['ferror_congrats_found_bug']='поздравление нашедшим баг'; +$lang['list_of_attrs_to_display_in_results'] = 'СпиÑок атрибутов, которые отображать в результатах (разделенные запÑтыми)'; +$lang['show_attributes'] = 'Показать атрибуты'; + +// search_form_simple.php +$lang['search_for_entries_whose'] = 'ИÑкать запиÑи, которые:'; +$lang['equals'] = 'равны'; +$lang['starts with'] = 'начинаютÑÑ Ñ'; +$lang['contains'] = 'Ñодержат'; +$lang['ends with'] = 'заканчиваютÑÑ Ð½Ð°'; +$lang['sounds like'] = 'похожи на'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'Ðе могу получить LDAP-информацию Ñ Ñервера'; +$lang['server_info_for'] = 'Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ Ñервере: '; +$lang['server_reports_following'] = 'Сервер Ñообщил о Ñебе Ñледующую информацию'; +$lang['nothing_to_report'] = 'Этому Ñерверу нечего о Ñебе Ñообщить.'; + +//update.php +$lang['update_array_malformed'] = 'неправильно Ñформирован update_array. Возможно Ñто ошибка phpLDAPadmin. Сообщите о ней.'; +$lang['could_not_perform_ldap_modify'] = 'Ðе удалоÑÑŒ произвеÑти операцию ldap_modify.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Ð’Ñ‹ дейÑтвительно хотите произвеÑти Ñти изменениÑ?'; +$lang['attribute'] = 'Ðтрибут'; +$lang['old_value'] = 'Старое значение'; +$lang['new_value'] = 'Ðовое значение'; +$lang['attr_deleted'] = '[атрибут удален]'; +$lang['commit'] = 'Подтвердить'; +$lang['cancel'] = 'Отменить'; +$lang['you_made_no_changes'] = 'Ð’Ñ‹ не Ñделали никаких изменений'; +$lang['go_back'] = 'ВернутьÑÑ'; + +// welcome.php +$lang['welcome_note'] = 'ИÑпользуйте меню Ñлева Ð´Ð»Ñ Ð½Ð°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ð¸'; +$lang['credits'] = 'Создатели'; +$lang['changelog'] = 'СпиÑок изменений'; +$lang['donate'] = 'СпонÑировать'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'ÐебезопаÑтное Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°: '; +$lang['no_such_file'] = 'Ðет такого файла: '; + +//function.php +$lang['auto_update_not_setup'] = 'Ð’Ñ‹ разрешили auto_uid_numbers Ð´Ð»Ñ %s в Вашей конфигурации, + но Ð’Ñ‹ не указали auto_uid_number_mechanism. ПожалуйÑта иÑправьте Ñту проблему.'; +$lang['uidpool_not_set'] = 'Ð’Ñ‹ указали "auto_uid_number_mechanism" как "uidpool" + в Вашей конфигурации Ð´Ð»Ñ Ñервера %s, но не указали + audo_uid_number_uid_pool_dn. ИÑправьте Ñто перед тем как продолжить.'; +$lang['uidpool_not_exist'] = 'Похоже что uidPool, который Ð’Ñ‹ указали в Вашей конфигурации ("%s") + не ÑущеÑтвует.'; +$lang['specified_uidpool'] = 'Ð’Ñ‹ указали "auto_uid_number_mechanism" как "search" в Вашей кофигурации + Ð´Ð»Ñ Ñервера %s, но не указали + "auto_uid_number_search_base". ИÑправьте Ñто перед тем как продолжить.'; +$lang['auto_uid_invalid_credential'] = 'Ðе могу привÑзатьÑÑ Ðº %s Ñ Ð’Ð°ÑˆÐ¸Ð¼Ð¸ auto_uid данными. Проверьте Ваш файл конфигурации.'; +$lang['bad_auto_uid_search_base'] = 'Ð’ Вашей конфигурации phpLDAPadmin указано неверное значение Ð´Ð»Ñ auto_uid_search_base Ð´Ð»Ñ Ñервера %s'; +$lang['auto_uid_invalid_value'] = 'Ð’Ñ‹ указали неверное значение Ð´Ð»Ñ auto_uid_number_mechanism ("%s") + в Вашей конфигурации. Возможны только "uidpool" и "search". + ПожалуйÑта иÑправьте Ñту проблему.'; +$lang['error_auth_type_config'] = 'Ошибка: Ð’ Вашем конфигурационном файле ошибка. ЕдинÑтвенные три допуÑтимых Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ + Ð´Ð»Ñ auth_type в Ñекции $servers - \'session\', \'cookie\', и \'config\'. Ð’Ñ‹ ввели \'%s\', + что недопуÑтимо. '; +$lang['php_install_not_supports_tls'] = 'Ваша уÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ PHP не поддерживает TLS.'; +$lang['could_not_start_tls'] = 'Ðе могу запуÑтить TLS. Проверьте конфигурацию Вашего LDAP-Ñервера.'; +$lang['could_not_bind_anon'] = 'Ðе могу анонимно привÑзатьÑÑ Ðº Ñерверу.'; +$lang['could_not_bind'] = 'Ðе удалоÑÑŒ привÑзатьÑÑ Ðº LDAP-Ñерверу.'; +$lang['anonymous_bind'] = 'ÐÐ½Ð¾Ð½Ð¸Ð¼Ð½Ð°Ñ Ð¿Ñ€Ð¸Ð²Ñзка'; +$lang['bad_user_name_or_password'] = 'Ðеверное Ð¸Ð¼Ñ Ð¸Ð»Ð¸ пароль. Попробуйте еще раз.'; +$lang['redirecting_click_if_nothing_happens'] = 'ПеренапрÑвлÑÑŽ... Ðажмите здеÑÑŒ, еÑли ничего не проиÑходит.'; +$lang['successfully_logged_in_to_server'] = 'УÑпешно вошли на Ñервер %s'; +$lang['could_not_set_cookie'] = 'Ðе удалоÑÑŒ уÑтановить cookie.'; +$lang['ldap_said'] = 'LDAP ответил: %s'; +$lang['ferror_error'] = 'Ошибка'; +$lang['fbrowse'] = 'проÑмотр'; +$lang['delete_photo'] = 'Удалить фотографию'; +$lang['install_not_support_blowfish'] = 'Ваша уÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ PHP не поддерживает шифрование blowfish.'; +$lang['install_not_support_md5crypt'] = 'Ваша уÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ PHP не поддерживает шифрование md5crypt.'; +$lang['install_no_mash'] = 'Ваша уÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ PHP не имеет функцию mhash(). Ðе могу Ñоздать Ñ…Ñши SHA.'; +$lang['jpeg_contains_errors'] = 'jpegPhoto Ñодержит ошибки
'; +$lang['ferror_number'] = 'Ðомер ошибки: %s (%s)'; +$lang['ferror_discription'] = 'ОпиÑание: %s

'; +$lang['ferror_number_short'] = 'Ðомер ошибки: %s

'; +$lang['ferror_discription_short'] = 'ОпиÑание: (нет опиÑаниÑ)
'; +$lang['ferror_submit_bug'] = 'ЕÑли Ñто ошибка phpLDAPadmin - пожалуйÑта, Ñообщите о ней.'; +$lang['ferror_unrecognized_num'] = 'ÐераÑÐ¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°: '; +$lang['ferror_nonfatil_bug'] = '
+
+ Вы нашли нефатальную ошибку phpLDAPadmin!
Ошибка:%s (%s)
Файл:%s Ñтрока %s, вызвано %s
ВерÑии:PLA: %s, PHP: %s, SAPI: %s +
Web Ñервер:%s
+ Сообщите об Ñтой ошибке нажав здеÑÑŒ.

'; +$lang['ferror_congrats_found_bug'] = 'ПоздравлÑем! Ð’Ñ‹ нашли ошибку в phpLDAPadmin.

+ + + + + + + + + + +
Ошибка:%s
Уровень:%s
Файл:%s
Строка:%s
Вызвано:%s
PLA ВерÑиÑ:%s
PHP ВерÑиÑ:%s
PHP SAPI:%s
Web Ñервер:%s
+
+ Сообщите об Ñтой ошибке нажав ниже!'; + +//ldif_import_form +$lang['import_ldif_file_title'] = 'Иморт LDIF файла'; +$lang['select_ldif_file'] = 'Выберите LDIF файл:'; +$lang['select_ldif_file_proceed'] = 'Далее >>'; +$lang['dont_stop_on_errors'] = 'Ðе оÑтанавливатьÑÑ Ð½Ð° ошибках'; + +//ldif_import +$lang['add_action'] = 'ДобавлÑÑŽ...'; +$lang['delete_action'] = 'УдалÑÑŽ...'; +$lang['rename_action'] = 'Переименовываю...'; +$lang['modify_action'] = 'ИзменÑÑŽ...'; +$lang['warning_no_ldif_version_found'] = 'Ðе найдено номера верÑии. Предполагаю 1.'; +$lang['valid_dn_line_required'] = 'ТребуетÑÑ Ð¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ñтрока Ñ dn.'; +$lang['missing_uploaded_file'] = 'ОтÑутÑтвует загруженный файл.'; +$lang['no_ldif_file_specified.'] = 'не указан LDIF файл. Попробуйте еще раз.'; +$lang['ldif_file_empty'] = 'Загруженный LDIF файл пуÑÑ‚.'; +$lang['empty'] = 'пуÑÑ‚'; +$lang['file'] = 'Файл'; +$lang['number_bytes'] = '%s байт'; + +$lang['failed'] = 'Ðе удалоÑÑŒ'; +$lang['ldif_parse_error'] = 'Ошибка интерпретации LDIF файла'; +$lang['ldif_could_not_add_object'] = 'Ðе удалоÑÑŒ добавить объект:'; +$lang['ldif_could_not_rename_object'] = 'Ðе удалоÑÑŒ переименовать объект:'; +$lang['ldif_could_not_delete_object'] = 'Ðе удалоÑÑŒ удалить объект:'; +$lang['ldif_could_not_modify_object'] = 'Ðе удалоÑÑŒ изменить объект:'; +$lang['ldif_line_number'] = 'Ðомер Ñтроки:'; +$lang['ldif_line'] = 'Строка:'; + +// Exports +$lang['export_format'] = 'Формат ÑкÑпорта'; +$lang['line_ends'] = 'Конец Ñтроки'; +$lang['must_choose_export_format'] = 'Ð’Ñ‹ должны выбрать формат ÑкÑпорта.'; +$lang['invalid_export_format'] = 'Ðеверный формат ÑкÑпорта'; +$lang['no_exporter_found'] = 'Ðет доÑтупных ÑкÑпортеров.'; +$lang['error_performing_search'] = 'Произошла ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ð¸Ñка.'; +$lang['showing_results_x_through_y'] = 'Показываю результаты Ñ %s по %s.'; +$lang['searching'] = 'ПоиÑк...'; +$lang['size_limit_exceeded'] = 'Внимание, превышен размер поиÑка.'; +$lang['entry'] = 'ЗапиÑÑŒ'; +$lang['ldif_export_for_dn'] = 'LDIF ÑкÑпорт длÑ: %s'; +$lang['generated_on_date'] = 'Сгенерировано phpLDAPadmin %s'; +$lang['total_entries'] = 'Ð’Ñего запиÑей'; +$lang['dsml_export_for_dn'] = 'DSLM ÑкÑпорт длÑ: %s'; + +// logins +$lang['could_not_find_user'] = 'Ðе могу найти Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ "%s"'; +$lang['password_blank'] = 'Ð’Ñ‹ не ввели пароль.'; +$lang['login_cancelled'] = 'Вход отменен.'; +$lang['no_one_logged_in'] = 'Ðа Ñтом Ñервере ÑÐµÐ¹Ñ‡Ð°Ñ Ð½Ð¸ÐºÐ¾Ð³Ð¾ нет.'; +$lang['could_not_logout'] = 'Ðе удалоÑÑŒ выйти.'; +$lang['unknown_auth_type'] = 'ÐеизвеÑтный auth_type: %s'; +$lang['logged_out_successfully'] = 'УÑпешно вышли Ñ Ñервера %s'; +$lang['authenticate_to_server'] = 'ÐÐ²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° Ñервере %s'; +$lang['warning_this_web_connection_is_unencrypted'] = 'Предупреждение: Это web-Ñоединение нешифровано.'; +$lang['not_using_https'] = 'Ð’Ñ‹ не иÑпользуете \'https\'. Web-браузер передает авторизационные данные открытым текÑтом.'; +$lang['login_dn'] = 'Login DN'; +$lang['user_name'] = 'Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ'; +$lang['password'] = 'Пароль'; +$lang['authenticate'] = 'ÐвотризациÑ'; + +// Entry browser +$lang['entry_chooser_title'] = 'Выбор запиÑи'; + +// Index page +$lang['need_to_configure'] = 'Вам надо Ñконфигурировать phpLDAPadmin. Отредактируйте файл \'config.php\'. Примерный файл наÑтроек - \'config.php.example\''; + +// Mass deletes +$lang['no_deletes_in_read_only'] = 'Удаление невозможно в режиме "только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ".'; +$lang['error_calling_mass_delete'] = 'Ошибка вызова mass_delete.php. ОтÑутÑтвует mass_delete в POST переменных.'; +$lang['mass_delete_not_array'] = 'POST Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ mass_delete не в маÑÑиве.'; +$lang['mass_delete_not_enabled'] = 'МаÑÑовое удаление не разрешено. ИÑпровьте Ñто в config.php перед тем как продолжить.'; +$lang['mass_deleting'] = 'МаÑÑовое удаление'; +$lang['mass_delete_progress'] = 'ПрогреÑÑ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð½Ð° Ñервере "%s"'; +$lang['malformed_mass_delete_array'] = 'Ðеправильно Ñформированный маÑÑив mass_delete.'; +$lang['no_entries_to_delete'] = 'Ð’Ñ‹ не выбрали ни одной запиÑи Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ.'; +$lang['deleting_dn'] = 'УдалÑÑŽ %s'; +$lang['total_entries_failed'] = 'Ðе удалоÑÑŒ удалить %s из %s запиÑей.'; +$lang['all_entries_successful'] = 'Ð’Ñе запиÑи уÑпешно удалены.'; +$lang['confirm_mass_delete'] = 'Подтвердите маÑÑовое удаление %s запиÑей на Ñервере %s'; +$lang['yes_delete'] = 'Да, удалить!'; + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'Ð’Ñ‹ не можете переименовать запиÑÑŒ, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¸Ð¼ÐµÐµÑ‚ потомков (Ñ‚.е., Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿ÐµÑ€ÐµÐ¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ðµ допуÑтима Ð´Ð»Ñ Ð´ÐµÑ€ÐµÐ²Ð°)'; +$lang['no_rdn_change'] = 'Ð’Ñ‹ не изменили RDN'; +$lang['invalid_rdn'] = 'Ðеверное значение RDN'; +$lang['could_not_rename'] = 'Ðе удалоÑÑŒ переименовать запиÑÑŒ'; ?> diff --git a/lang/recoded/sv.php b/lang/recoded/sv.php new file mode 100644 index 0000000..32b9e91 --- /dev/null +++ b/lang/recoded/sv.php @@ -0,0 +1,387 @@ + + * based on 0.9.3 Version + +*/ + +// Search form +$lang['simple_search_form_str'] = 'Enkel sökning';//'Simple Search Form'; +$lang['advanced_search_form_str'] = 'Expertsökning';//'Advanced Search Form'; +$lang['server'] = 'Server';//'Server'; +$lang['search_for_entries_whose'] = 'Sök efter rader som';//'Search for entries whose'; +$lang['base_dn'] = 'Base DN';//'Base DN'; +$lang['search_scope'] = 'SökomfÃ¥ng';//Search Scope'; +$lang['search_ filter'] = 'Sökfilter';//'Search Filter'; +$lang['show_attributes'] = 'Visa attribut';//'Show Attributtes'; +$lang['Search'] = 'Sök';// 'Search'; +$lang['equals'] = 'lika med';//'equals'; +$lang['starts_with'] = 'Börjar med';//'starts with'; +$lang['contains'] = 'innehÃ¥ller';//'contains'; +$lang['ends_with'] = 'slutar med';//'ends with'; +$lang['sounds_like'] = 'lÃ¥ter som';//'sounds like'; + +// Tree browser +$lang['request_new_feature'] = 'Begär en ny funktion';//'Request a new feature'; +$lang['see_open_requests'] = 'Se öppna förfrÃ¥gningar';//'see open requests'; +$lang['report_bug'] = 'Rapportera ett fel';//'Report a bug'; +$lang['see_open_bugs'] = 'Se öppna felrapporter';//'see open bugs'; +$lang['schema'] = 'schema';//'schema'; +$lang['search'] = 'sökning';//'search'; +$lang['create'] = 'skapa';//'create'; +$lang['info'] = 'information';//'info'; +$lang['import'] = 'importera';//'import'; +$lang['refresh'] = 'uppdatera';//'refresh'; +$lang['logout'] = 'logga ut';//'logout'; +$lang['create_new'] = 'Skapa ny';//'Create New'; +$lang['view_schema_for'] = 'Titta pÃ¥ schema för';//'View schema for'; +$lang['refresh_expanded_containers'] = 'Uppdatera alla öpnna behÃ¥llare för';//'Refresh all expanded containers for'; +$lang['create_new_entry_on'] = 'Skapa en ny post för';//'Create a new entry on'; +$lang['view_server_info'] = 'Titta pÃ¥ information som servern tillhandahÃ¥llit';//'View server-supplied information'; +$lang['import_from_ldif'] = 'Importera rader frÃ¥n LDIF file';//'Import entries from an LDIF file'; +$lang['logout_of_this_server'] = 'Logga ut frÃ¥n den här servern';//'Logout of this server'; +$lang['logged_in_as'] = '/Inloggad som';//'Logged in as: '; +$lang['read_only'] = 'Enbart läsning';//'read only'; +$lang['could_not_determine_root'] = 'Kan inte bestämma roten för ditt LDAP träd';//'Could not determine the root of your LDAP tree.'; +$lang['ldap_refuses_to_give_root'] = 'Det ser ut som om LDAP-servern har konfigurerats att inte avslöja sin rot.';//'It appears that the LDAP server has been configured to not reveal its root.'; +$lang['please_specify_in_config'] = 'Var snäll och specificera i config.php';//'Please specify it in config.php'; +$lang['create_new_entry_in'] = 'Skapa en ny post i';//'Create a new entry in'; +$lang['login_link'] = 'Logga in...';//'Login...'; + +// Entry display +$lang['delete_this_entry'] = 'Ta bort den här posten';//'Delete this entry'; +$lang['delete_this_entry_tooltip'] = 'Du kommer att bli tillfrÃ¥gad för att konfirmera det här beslutet';//'You will be prompted to confirm this decision'; +$lang['copy_this_entry'] = 'Kopiera den här posten';//'Copy this entry'; +$lang['copy_this_entry_tooltip'] = 'Kopiera det här objektet till en annan plats, ett nytt DN, eller en annan server';//'Copy this object to another location, a new DN, or another server'; +$lang['export_to_ldif'] = 'Exportera till LDIF';//'Export to LDIF'; +$lang['export_to_ldif_tooltip'] = 'Spara en LDIF kopia av detta objekt';//'Save an LDIF dump of this object'; +$lang['export_subtree_to_ldif_tooltip'] = 'Spara en LDIF kopia av detta objekt och alla dess underobjekt';//'Save an LDIF dump of this object and all of its children'; +$lang['export_subtree_to_ldif'] = 'Exportera subträdet till LDIF';//'Export subtree to LDIF'; +$lang['export_to_ldif_mac'] = 'Radslut enligt Macintosh-standard';// 'Macintosh style line ends'; +$lang['export_to_ldif_win'] = 'Radslut enligt Windows-standard';//'Windows style line ends'; +$lang['export_to_ldif_unix'] = 'Radslut enligt Unix-standard';//'Unix style line ends'; +$lang['create_a_child_entry'] = 'Skapa en subpost';//'Create a child entry'; +$lang['add_a_jpeg_photo'] = 'Lägg till ett JPEG-foto';//'Add a jpegPhoto'; +$lang['rename_entry'] = 'Döp om posten';//'Rename Entry'; +$lang['rename'] = 'Döp om ';//'Rename'; +$lang['add'] = 'Lägg till';//'Add'; +$lang['view'] = 'Titta';//'View'; +$lang['add_new_attribute'] = 'Lägg till ett nytt attribut';//'Add New Attribute'; +$lang['add_new_attribute_tooltip'] = 'Lägg till ett nytt attribut/värde till denna post';//'Add a new attribute/value to this entry'; +$lang['internal_attributes'] = 'Interna attribut';//'Internal Attributes'; +$lang['hide_internal_attrs'] = 'Göm interna attribut';//'Hide internal attributes'; +$lang['show_internal_attrs'] ='Visa interna attribut';// 'Show internal attributes'; +$lang['internal_attrs_tooltip'] = 'Attribut som sätts automatiskt av systemet';//'Attributes set automatically by the system'; +$lang['entry_attributes'] = 'IngÃ¥ngsattribut';//'Entry Attributes'; +$lang['attr_name_tooltip'] = 'Klicka för att titta pÃ¥ schemadefinitionen för attributtyp \'%s\'';//'Click to view the schema defintion for attribute type \'%s\''; +$lang['click_to_display'] = 'klicka\'+\' för att visa';// 'click \'+\' to display'; +$lang['hidden'] = 'gömda';//'hidden'; +$lang['none'] = 'inget';//'none'; +$lang['save_changes'] = 'Spara ändringar';//'Save Changes'; +$lang['add_value'] = 'lägg till värde';//'add value'; +$lang['add_value_tooltip'] = 'Lägg till ett ytterligare värde till attribut \'%s\''; // 'Add an additional value to attribute \'%s\''; +$lang['refresh_entry'] = 'Uppdatera';//'Refresh'; +$lang['refresh_this_entry'] = 'Uppdatera denna post';//'Refresh this entry'; +$lang['delete_hint'] = 'Tips: För att ta bort ett attribut, ta bort all text i textfältet och klicka \'Spara ändringar\'.'; 'Hint: To delete an attribute, empty the text field and click save.'; +$lang['attr_schema_hint'] = 'Tips: För att titta pÃ¥ ett attributs schema, klicka pÃ¥ attributnamnet';//'Hint: To view the schema for an attribute, click the attribute name.'; +$lang['attrs_modified'] = 'NÃ¥gra attribut var ändrade och är markerade nedan.';//'Some attributes (%s) were modified and are highlighted below.'; +$lang['attr_modified'] = 'Ett attribut var ändrat och är markerat nedan.';//An attribute (%s) was modified and is highlighted below.'; +$lang['viewing_read_only'] = 'Titta pÃ¥ en post med enbart lästiilstÃ¥nd';//'Viewing entry in read-only mode.'; +$lang['change_entry_rdn'] = 'ändra denna posts RDN';//'Change this entry\'s RDN'; +$lang['no_new_attrs_available'] = 'inga nya attribut tillgängliga för denna post';//'no new attributes available for this entry'; +$lang['binary_value'] = 'Binärt värde';//'Binary value'; +$lang['add_new_binary_attr'] = 'Lägg till nytt binärt attribut';//'Add New Binary Attribute'; +$lang['add_new_binary_attr_tooltip'] = 'Lägg till nytt binärt attribut/värde frÃ¥n en fil';//'Add a new binary attribute/value from a file'; +$lang['alias_for'] = 'Observera: \'%s\' är ett alias for \'%s\'';//'Note: \'%s\' is an alias for \'%s\''; +$lang['download_value'] = 'ladda ner värde';//'download value'; +$lang['delete_attribute'] = 'ta bort attribut';//'delete attribute'; +$lang['true'] = 'Sant';//'true'; +$lang['false'] = 'Falskt';//'false'; +$lang['none_remove_value'] = 'inget, ta bort värdet';//'none, remove value'; +$lang['really_delete_attribute'] = 'Ta definitivt bort värdet';//'Really delete attribute'; + +// Schema browser +$lang['the_following_objectclasses'] = 'Följande objektklasser stöds av denna LDAP server.';//'The following objectClasses are supported by this LDAP server.'; +$lang['the_following_attributes'] = 'Följande attributtyper stöds av denna LDAP server.';//'The following attributeTypes are supported by this LDAP server.'; +$lang['the_following_matching'] = 'Följande matchningsregler stöds av denna LDAP server.';//'The following matching rules are supported by this LDAP server.'; +$lang['the_following_syntaxes'] = 'Följande syntax stöds av denna LDAP server.';//'The following syntaxes are supported by this LDAP server.'; +$lang['jump_to_objectclass'] = 'Välj en objectClass';//'Jump to an objectClass'; +$lang['jump_to_attr'] = 'Välj en attributtyp';//'Jump to an attribute type'; +$lang['schema_for_server'] = 'Schema för servern';//'Schema for server'; +$lang['required_attrs'] = 'Nödvändiga attribut';//'Required Attributes'; +$lang['optional_attrs'] = 'Valfria attribut';//'Optional Attributes'; +$lang['OID'] = 'OID';//'OID'; +$lang['desc'] = 'Beskrivning';//'Description'; +$lang['name'] = 'Namn';//'Name'; +$lang['is_obsolete'] = 'Denna objectClass är förÃ¥ldrad';//'This objectClass is obsolete'; +$lang['inherits'] = 'ärver';//'Inherits'; +$lang['jump_to_this_oclass'] = 'GÃ¥ till definitionen av denna objectClass';//'Jump to this objectClass definition'; +$lang['matching_rule_oid'] = 'Matchande regel-OID';//'Matching Rule OID'; +$lang['syntax_oid'] = 'Syntax-OID';//'Syntax OID'; +$lang['not_applicable'] = 'inte tillämplig';//'not applicable'; +$lang['not_specified'] = 'inte specificerad';//'not specified'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'Borttagning av posten \'%s\' lyckades';//'Entry \'%s\' deleted successfully.'; +$lang['you_must_specify_a_dn'] = 'Du mÃ¥ste specificera ett DN';//'You must specify a DN'; +$lang['could_not_delete_entry'] = 'Det gick inte att ta bort posten';//'Could not delete the entry: %s'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'Nya nödvändiga attribut';//'New Required Attributes'; +$lang['requires_to_add'] = 'Den här Ã¥tgärden kräver att du lägger till';//'This action requires you to add'; +$lang['new_attributes'] = 'nya attribut';//'new attributes'; +$lang['new_required_attrs_instructions'] = 'Instruktioner: För att kunna lägga till objektklassen till denna post, mÃ¥ste du specificera';//'Instructions: In order to add this objectClass to this entry, you must specify'; +$lang['that_this_oclass_requires'] = 'att objektklassen kräver. Det kan göras i detta formulär.';//'that this objectClass requires. You can do so in this form.'; +$lang['add_oclass_and_attrs'] = 'Lägg till objektklass och attribut';//'Add ObjectClass and Attributes'; + +// General +$lang['chooser_link_tooltip'] = 'Klicka för att öppna ett fönster för att välja ett grafiskt.';//'Click to popup a dialog to select an entry (DN) graphically'; +$lang['no_updates_in_read_only_mode'] = 'Du kan inte göra uppdateringar medan servern är i lästillstÃ¥nd';//'You cannot perform updates while server is in read-only mode'; +$lang['bad_server_id'] = 'Felaktigt server-id';//'Bad server id'; +$lang['not_enough_login_info'] = 'Det saknas information för att logga in pÃ¥ servern. Var vänlig och kontrollera din konfiguration.';//'Not enough information to login to server. Please check your configuration.'; +$lang['could_not_connect'] = 'Det gick inte att ansluta till LDAP-servern.';//'Could not connect to LDAP server.'; +$lang['could_not_perform_ldap_mod_add'] = 'Det gick inte att utföra ldap_mod_add operationen.';//''Could not perform ldap_mod_add operation.'; +$lang['bad_server_id_underline'] = 'Felaktigt server_id';//'Bad server_id: '; +$lang['success'] = 'Det lyckades';//'Success'; +$lang['server_colon_pare'] = 'Server';//'Server: '; +$lang['look_in'] = 'Tittar in';//'Looking in: '; +$lang['missing_server_id_in_query_string'] = 'Inget server-ID specificerat i frÃ¥gesträgen!';//'No server ID specified in query string!'; +$lang['missing_dn_in_query_string'] = 'Inget DN specificerat i frÃ¥gesträgen!';//'No DN specified in query string!'; +$lang['back_up_p'] = 'Tillbaka';//'Back Up...'; +$lang['no_entries'] = 'inga poster';//'no entries'; +$lang['not_logged_in'] = 'Inte inloggad';//'Not logged in'; +$lang['could_not_det_base_dn'] = 'Det gick inte att bestämma \'base DN\'';//'Could not determine base DN'; + +// Add value form +$lang['add_new'] = 'Lägg till nytt';//'Add new'; +$lang['value_to'] = 'värde till';//'value to'; +$lang['distinguished_name'] = 'Distinguished Name';//'Distinguished Name'; +$lang['current_list_of'] = 'Aktuell lista av';//'Current list of'; +$lang['values_for_attribute'] = 'attributvärden';//'values for attribute'; +$lang['inappropriate_matching_note'] = 'Observera: Du kommer att fÃ¥ ett \'inappropriate matching\'-fel om du inte har
' . + 'satt upp en EQUALITY-regel på din LDAP-server för detta attribut.';// 'Note: You will get an "inappropriate matching" error if you have not
' . + 'setup an EQUALITY rule on your LDAP server for this attribute.'; +$lang['enter_value_to_add'] = 'Skriv in värdet du vill lägga till';//'Enter the value you would like to add:'; +$lang['new_required_attrs_note'] = 'Observera: Du kan bli tvungen att skriva in de nya attribut som denna objectClass behöver';//'Note: you may be required to enter new attributes that this objectClass requires'; +$lang['syntax'] = 'Syntax';//'Syntax'; + +//copy.php +$lang['copy_server_read_only'] = 'Du kan inte göra uppdateringar medan servern är i lästillstånd';//'You cannot perform updates while server is in read-only mode'; +$lang['copy_dest_dn_blank'] = 'Du lämnade destinations-DN tomt';//'You left the destination DN blank.'; +$lang['copy_dest_already_exists'] = 'Destinationen finns redan';//'The destination entry (%s) already exists.'; +$lang['copy_dest_container_does_not_exist'] = 'Destinations-behållaren (%s) finns inte';// 'The destination container (%s) does not exist.'; +$lang['copy_source_dest_dn_same'] = 'Käll- och destinations-DN är samma.';//'The source and destination DN are the same.'; +$lang['copy_copying'] = 'Kopierar';//'Copying '; +$lang['copy_recursive_copy_progress'] = 'Rekursiv kopiering pågår';//'Recursive copy progress'; +$lang['copy_building_snapshot'] = 'Bygger en ögonblicksbild av det träd som ska kopieras';//'Building snapshot of tree to copy... '; +$lang['copy_successful_like_to'] = 'Kopieringen lyckades! Vill du';//'Copy successful! Would you like to '; +$lang['copy_view_new_entry'] = 'titta på den nya posten';//'view the new entry'; +$lang['copy_failed'] = 'Kopiering av DN misslyckades';//'Failed to copy DN: '; + +//edit.php +$lang['missing_template_file'] = 'Varning! mall-filen saknas,';//'Warning: missing template file, '; +$lang['using_default'] = 'använder default.'; //'Using default.'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Kopiera';//'Copy '; +$lang['copyf_to_new_object'] = 'till ett nytt objekt';//'to a new object'; +$lang['copyf_dest_dn'] = 'Destinations-DN';//'Destination DN'; +$lang['copyf_dest_dn_tooltip'] = 'Den nya postens fullständiga DN skapas när källposten kopieras';//'The full DN of the new entry to be created when copying the source entry'; +$lang['copyf_dest_server'] = 'Destinations-server';//'Destination Server'; +$lang['copyf_note'] = 'Tips: Kopiering mellan olika servrar fungerar bara om det inte finns några brott mot schemorna.';// 'Hint: Copying between different servers only works if there are no schema violations'; +$lang['copyf_recursive_copy'] = 'Kopiera även rekursivt alla underobjekt till detta objekt.';//'Recursively copy all children of this object as well.'; + +//create.php +$lang['create_required_attribute'] = 'Du lämnade ett värde tomt för ett nödvändigt attribut %s.';//'You left the value blank for required attribute %s.'; +$lang['create_redirecting'] = 'Omstyrning';//'Redirecting'; +$lang['create_here'] = 'här';//'here'; +$lang['create_could_not_add'] = 'Det gick inte att lägga till objektet till LDAP-servern.';//'Could not add the object to the LDAP server.'; + +//create_form.php +$lang['createf_create_object'] = 'Skapa objekt';//'Create Object'; +$lang['createf_choose_temp'] = 'Välj en mall';//'Choose a template'; +$lang['createf_select_temp'] = 'Välj en mall för att skapa objekt';//'Select a template for the creation process'; +$lang['createf_proceed'] = 'Fortsätt';//'Proceed'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'På servern';//'On server'; +$lang['ctemplate_no_template'] = 'Ingen mall specificerad i POST variablerna.';//'No template specified in POST variables.'; +$lang['ctemplate_config_handler'] = 'Din konfiguration specificerar en hanterare';//'Your config specifies a handler of'; +$lang['ctemplate_handler_does_not_exist'] = 'för denna mall, men hanteraren finns inte i templates/creation-katalogen';//'for this template. But, this handler does not exist in the templates/creation directory.'; + +// search.php +$lang['you_have_not_logged_into_server'] = 'Du har inte loggat in till den valda servern ännu, så du kan inte göra sökningar på den.';//'You have not logged into the selected server yet, so you cannot perform searches on it.'; +$lang['click_to_go_to_login_form'] = 'Klicka här för att komma till login-formuläret';//'Click here to go to the login form'; +$lang['unrecognized_criteria_option'] = 'Känner inte till detta urvals-kriterium';//'Unrecognized criteria option: '; +$lang['if_you_want_to_add_criteria'] = 'Om du vill lägga till ditt eget kriterium till listan, kom ihåg att ändra search.php för att hantera det. Avslutar.';//'If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting.'; +$lang['entries_found'] = 'Poster funna:';//'Entries found: '; +$lang['filter_performed'] = 'Filtrering utförd: ';//'Filter performed: '; +$lang['search_duration'] = 'Sökning utförd av phpLDAPadmin på';//'Search performed by phpLDAPadmin in'; +$lang['seconds'] = 'sekunder';//'seconds'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'Sökomfattning';//'The scope in which to search'; +$lang['scope_sub'] = 'Sub (Base DN och hela trädet under)';//'Sub (entire subtree)'; +$lang['scope_one'] = 'One (en nivå under Base DN)';//One (one level beneath base)'; +$lang['scope_base'] = 'Base (endast Base DN)';//'Base (base dn only)'; +$lang['standard_ldap_search_filter'] = 'Standard LDAP sökfilter. Exempel: (&(sn=Smith)(givenname=David))';//'Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))'; +$lang['search_filter'] = 'Sökfilter';//'Search Filter'; +$lang['list_of_attrs_to_display_in_results'] = 'En lista med attribut att visa i resultatet (komma-separerad)';// 'A list of attributes to display in the results (comma-separated)'; +$lang['show_attributes'] = 'Visa attribut';//'Show Attributes'; + +// search_form_simple.php +$lang['search_for_entries_whose'] = 'Sök efter poster som:';//'Search for entries whose:'; +$lang['equals'] = 'är lika med';//'equals'; +$lang['starts with'] = 'börjar med';//'starts with'; +$lang['contains'] = 'innehåller';//'contains'; +$lang['ends with'] = 'slutar med';//'ends with'; +$lang['sounds like'] = 'låter som';//'sounds like'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'Det gick inte att hämta LDAP information från servern.';//'Could not retrieve LDAP information from the server'; +$lang['server_info_for'] = 'Serverinformation för';//'Server info for: '; +$lang['server_reports_following'] = 'Servern rapporterar följande information om sig själv';//'Server reports the following information about itself'; +$lang['nothing_to_report'] = 'Servern har inget att rapportera';//'This server has nothing to report.'; + +//update.php +$lang['update_array_malformed'] = 'update_array är felaktig. Detta kan vara ett phpLDAPadmin-fel. Var vänlig och rapportera det.';// 'update_array is malformed. This might be a phpLDAPadmin bug. Please report it.'; +$lang['could_not_perform_ldap_modify'] = 'Det gick inte att utföra operationen ldap_modify.';//'Could not perform ldap_modify operation.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Vill du göra dessa ändringar?';//'Do you want to make these changes?'; +$lang['attribute'] = 'Attribut';//'Attribute'; +$lang['old_value'] = 'Föregående värde';//'Old Value'; +$lang['new_value'] = 'Nytt värde';//'New Value'; +$lang['attr_deleted'] = '[attributet borttaget]';//'[attribute deleted]'; +$lang['commit'] = 'Bekräfta';//'Commit'; +$lang['cancel'] = 'ångra';//'Cancel'; +$lang['you_made_no_changes'] = 'Du gjorde inga ändringar';//'You made no changes'; +$lang['go_back'] = 'Gå tillbaka';//'Go back'; + +// welcome.php +$lang['welcome_note'] = 'Navigera med hjälp av menyn till vänster';//'Use the menu to the left to navigate'; +$lang['credits'] = 'Tack till';//'Credits'; +$lang['changelog'] = 'ändringslogg';//'ChangeLog'; +$lang['documentation'] = 'Dokumentation';//'Documentation'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Osäkert filnamn';//'Unsafe file name: '; +$lang['no_such_file'] = 'Filen finns inte';//'No such file: '; + +//function.php +$lang['auto_update_not_setup'] = 'Du har slagit på auto_uid_numbers för %s i din konfiguration, + men du har inte specificerat auto_uid_number_mechanism. Var vänlig och rätta till + detta problem.'; + //'You have enabled auto_uid_numbers for %s in your configuration, + //but you have not specified the auto_uid_number_mechanism. Please correct + //this problem.'; +$lang['uidpool_not_set'] = 'Du har specificerat auto_uid_number_mechanism som uidpool + i din konfiguration för server%s, men du specificerade inte + audo_uid_number_uid_pool_dn. Var vänlig och specificera den innan du fortsätter.'; + //'You specified the auto_uid_number_mechanism as uidpool + //in your configuration for server %s, but you did not specify the + //audo_uid_number_uid_pool_dn. Please specify it before proceeding.'; +$lang['uidpool_not_exist'] = 'Det ser ut som om den uidPool du specificerade i din konfiguration (%s) + inte existerar.'; + // 'It appears that the uidPool you specified in your configuration (%s) + // does not exist.'; +$lang['specified_uidpool'] = 'Du specificerade auto_uid_number_mechanism som search i din + konfiguration för server%s, men du specificerade inte + auto_uid_number_search_base. Var vänlig och specificera den innan du fortsätter.'; + // 'You specified the auto_uid_number_mechanism as search in your + //configuration for server %s, but you did not specify the + //auto_uid_number_search_base. Please specify it before proceeding.'; +$lang['auto_uid_invalid_value'] = 'Du specificerade ett ogiltigt värde för auto_uid_number_mechanism (%s) + i din konfiguration. Endast uidpool och search are giltiga. + Var vänlig och rätta till detta problem.'; + //'You specified an invalid value for auto_uid_number_mechanism (%s) + //in your configration. Only uidpool and search are valid. + //Please correct this problem.'; +$lang['error_auth_type_config'] = 'Fel: Du har ett fel i din konfigurationsfil. De enda tillåtna värdena + för auth_type i $servers-sektionen är \'config\' and \'form\'. Du skrev in \'%s\', + vilket inte är tillåtet. '; + //'Error: You have an error in your config file. The only two allowed values + //for auth_type in the $servers section are \'config\' and \'form\'. You entered \'%s\', + //which is not allowed. '; +$lang['php_install_not_supports_tls'] = 'Din PHP-installation stödjer inte TLS';//'Your PHP install does not support TLS'; +$lang['could_not_start_tls'] = 'Det gick inte att starta TLS.
Var vänlig och kontrollera din LDAP-serverkonfiguration.';//'Could not start TLS.
Please check your LDAP server configuration.'; +$lang['auth_type_not_valid'] = 'Du har ett fel i din konfigurationsfil. auth_type %s är inte tillåten.';//'You have an error in your config file. auth_type of %s is not valid.'; +$lang['ldap_said'] = 'LDAP sa: %s

';//'LDAP said: %s

'; +$lang['ferror_error'] = 'Fel';'Error'; +$lang['fbrowse'] = 'titta';//'browse'; +$lang['delete_photo'] = 'Ta bort foto';//'Delete Photo'; +$lang['install_not_support_blowfish'] = 'Din PHP-installation stödjer inte blowfish-kryptering.';// 'Your PHP install does not support blowfish encryption.'; +$lang['install_no_mash'] = 'Din PHP-installation har inte funktionen mash(). Det går inte att göra SHA hashes.';//'Your PHP install does not have the mhash() function. Cannot do SHA hashes.'; +$lang['jpeg_contains_errors'] = 'JPEG-fotot innehåller fel
';//'jpegPhoto contains errors
'; +$lang['ferror_number'] = 'Felnummer: %s (%s)

';//'Error number: %s (%s)

'; +$lang['ferror_discription'] ='Beskrivning: %s

';//'Description: %s

'; +$lang['ferror_number_short'] = 'Felnummer: %s

';//'Error number: %s

'; +$lang['ferror_discription_short'] = 'Beskrivning: (ingen beskrivning tillgänglig)
';//'Description: (no description available)
'; +$lang['ferror_submit_bug'] = 'är det här ett phpLDAPadmin-fel? Om så är fallet, var vänlig och rapportera det.'; +//'Is this a phpLDAPadmin bug? If so, please report it.'; +$lang['ferror_unrecognized_num'] = 'Okänt felnummer';//'Unrecognized error number: '; +$lang['ferror_nonfatil_bug'] = '
+
+ Du har hittat en icke-kritisk phpLDAPadmin bug!
Fel:%s (%s)
Fil:%s rad %s, anropande %s
Versioner:PLA: %s, PHP: %s, SAPI: %s +
Web server:%s
+ Var vänlig och rapportera felet genom att klicka här.

'; + + //'
+ //
+ //You found a non-fatal phpLDAPadmin bug!
Error:%s (%s)
File:%s line %s, caller %s
Versions:PLA: %s, PHP: %s, SAPI: %s + //
Web server:%s
+ //Please report this bug by clicking here.

'; + +$lang['ferror_congrats_found_bug'] = 'Gratulerar! Du har hittat en bug i phpLDAPadmin.

+ + + + + + + + + + +
Fel:%s
Nivå:%s
Fil:%s
Rad:%s
Anropare:%s
PLA Version:%s
PHP Version:%s
PHP SAPI:%s
Web server:%s
+
+ Var vänlig och rapportera den här buggen genom att klicak här nedan!'; + +//'Congratulations! You found a bug in phpLDAPadmin.

+// +// +// +// +// +// +// +// +// +// +//
Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA Version:%s
PHP Version:%s
PHP SAPI:%s
Web server:%s
+//
+//Please report this bug by clicking below!'; + + +//ldif_import_form +$lang['import_ldif_file_title'] = 'Importera LDIF-fil';//'Import LDIF File'; +$lang['select_ldif_file'] = 'Välj en LDIF-fil:';//'Select an LDIF file:'; +$lang['select_ldif_file_proceed'] = 'Fortsätt >>';//'Proceed >>'; + +//ldif_import +$lang['add_action'] = 'Lägger till...';//'Adding...'; +$lang['delete_action'] = 'Tar bort...';//'Deleting...'; +$lang['rename_action'] = 'Döper om...';//''Renaming...'; +$lang['modify_action'] = 'ändrar...';//'Modifying...'; + +$lang['failed'] = 'misslyckades';//'failed'; +$lang['ldif_parse_error'] = 'LDIF parsningsfel';//'LDIF Parse Error'; +$lang['ldif_could_not_add_object'] = 'Det gick inte att lägga till objekt';//'Could not add object:'; +$lang['ldif_could_not_rename_object'] = 'Det gick inte att lägga döpa om objekt';//'Could not rename object:'; +$lang['ldif_could_not_delete_object'] = 'Det gick inte att ta bort objekt';//'Could not delete object:'; +$lang['ldif_could_not_modify_object'] = 'Det gick inte att ändra objekt';//'Could not modify object:'; +$lang['ldif_line_number'] = 'Radnummer';//'Line Number:'; +$lang['ldif_line'] = 'Rad:';//'Line:'; +?> diff --git a/lang/recoded/zz.php b/lang/recoded/zz.php new file mode 100644 index 0000000..922fdc0 --- /dev/null +++ b/lang/recoded/zz.php @@ -0,0 +1,13 @@ + diff --git a/lang/recoded/zzz.php b/lang/recoded/zzz.php new file mode 100644 index 0000000..d7822e9 --- /dev/null +++ b/lang/recoded/zzz.php @@ -0,0 +1,13 @@ + diff --git a/lang/ru.php b/lang/ru.php index 7b97d19..ca27538 100644 --- a/lang/ru.php +++ b/lang/ru.php @@ -1,259 +1,535 @@ Удалить атрибут, очиÑтите текÑтовое поле и нажмите Ñохрнить.';//'Hint: To delete an attribute, empty the text field and click save.'; -$lang['viewing_read_only'] = 'ПроÑмотреть запиÑÑŒ в режиме только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ';//'Viewing entry in read-only mode.'; -$lang['change_entry_rdn'] = 'Change this entry\'s RDN'; -$lang['no_new_attrs_available'] = 'нет новых атрибутов Ð´Ð»Ñ Ñтой запиÑи';//'no new attributes available for this entry'; -$lang['binary_value'] = 'Бинарное значение';//'Binary value'; -$lang['add_new_binary_attr'] = 'Добавить новый бинарный атрибут';//'Add New Binary Attribute'; -$lang['add_new_binary_attr_tooltip'] = 'Добавить новый бинарный атрибут/значение Ñ Ñ„Ð°Ð¹Ð»Ð°';//'Add a new binary attribute/value from a file'; -$lang['alias_for'] = 'ÐÐ»Ð¸Ð°Ñ Ð´Ð»Ñ';//'Alias for'; -$lang['download_value'] = 'загрузить значение';//'download value'; -$lang['delete_attribute'] = 'удалить атрибут';//'delete attribute'; -$lang['true'] = 'да';//'true'; -$lang['false'] = 'нет';//'false'; -$lang['none_remove_value'] = 'нет, удалите значение';//'none, remove value'; -$lang['really_delete_attribute'] = 'Really delete attribute'; +$lang['delete_this_entry'] = 'Удалить Ñту запиÑÑŒ'; +$lang['delete_this_entry_tooltip'] = 'Ð’Ð°Ñ Ð¿Ð¾Ð¿Ñ€Ð¾ÑÑÑ‚ подтвердить Ваше решение'; +$lang['copy_this_entry'] = 'Скопировать Ñту запиÑÑŒ'; +$lang['copy_this_entry_tooltip'] = 'Скопировать Ñтот объект в другое меÑто, в новый DN или на другой Ñервер'; +$lang['export'] = 'ЭкÑпорт'; +$lang['export_tooltip'] = 'Сохранить дамп Ñтого объекта'; +$lang['export_subtree_tooltip'] = 'Сохранить дамп Ñтого объекта и вÑех его потомков'; +$lang['export_subtree'] = 'ЭкÑпортировать ветвь'; +$lang['create_a_child_entry'] = 'Создать потомка'; +$lang['rename_entry'] = 'Переименовать запиÑÑŒ'; +$lang['rename'] = 'Переименовать'; +$lang['add'] = 'Добавить'; +$lang['view'] = 'ПроÑмотреть'; +$lang['view_one_child'] = 'ПроÑмотреть 1 потомка'; +$lang['view_children'] = 'ПроÑмотреть %s потомков'; +$lang['add_new_attribute'] = 'Добавить новый атрибут'; +$lang['add_new_objectclass'] = 'Добавить новый объект'; +$lang['hide_internal_attrs'] = 'Скрыть внутренние атрибуты'; +$lang['show_internal_attrs'] = 'Показать внутренние атрибуты'; +$lang['attr_name_tooltip'] = 'Ðажмите чтобы проÑмотреть опиÑание Ñхемы Ð´Ð»Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° \'%s\''; +$lang['none'] = 'нет'; +$lang['no_internal_attributes'] = 'Ðет внутренних атрибутов'; +$lang['no_attributes'] = 'Эта запиÑÑŒ не имеет атрибутов'; +$lang['save_changes'] = 'Сохранить изменениÑ'; +$lang['add_value'] = 'добавить значение'; +$lang['add_value_tooltip'] = 'Добавить дополнительное значение Ð´Ð»Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° \'%s\''; +$lang['refresh_entry'] = 'Обновить'; +$lang['refresh_this_entry'] = 'Обновить Ñту запиÑÑŒ'; +$lang['delete_hint'] = 'ПодÑказка: Чтобы удалить атрибут - очиÑтите текÑтовое поле и нажмите "Ñохранить"'; +$lang['attr_schema_hint'] = 'ПодÑказка: Чтобы проÑмотреть Ñхему атрибута - нажмите на его названии.'; +$lang['attrs_modified'] = 'Ðекоторые атрибуты (%s) были модифицированы и теперь подÑвечены ниже.'; +$lang['attr_modified'] = 'Ðтрибут (%s) был модифицирован и теперь подÑвечен ниже.'; +$lang['viewing_read_only'] = 'ПроÑмотр запиÑи в режиме "только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ".'; +$lang['no_new_attrs_available'] = 'Ð´Ð»Ñ Ñтой запиÑи нет доÑтупных новых атрибутов'; +$lang['no_new_binary_attrs_available'] = 'Ð´Ð»Ñ Ñтой запиÑи нет доÑтупных новых бинарных атрибутов'; +$lang['binary_value'] = 'Бинарное значение'; +$lang['add_new_binary_attr'] = 'Добавить новый бинарный атрибут'; +$lang['alias_for'] = 'Внимание: \'%s\' - Ð°Ð»Ð¸Ð°Ñ Ð´Ð»Ñ \'%s\''; +$lang['download_value'] = 'загрузить значение'; +$lang['delete_attribute'] = 'удалить атрибут'; +$lang['true'] = 'правда'; +$lang['false'] = 'ложь'; +$lang['none_remove_value'] = 'пуÑто, удалите значение'; +$lang['really_delete_attribute'] = 'ДейÑтвительно удалить значение'; +$lang['add_new_value'] = 'Добавить новое значение'; // Schema browser -$lang['the_following_objectclasses'] = 'Следующий objectClasses поддерживаетьÑÑ Ñтим LDAP Ñервером.';;//'The following objectClasses are supported by this LDAP server.'; -$lang['the_following_attributes'] = 'Следующий attributeTypes поддерживаетьÑÑ Ñтим LDAP Ñевером.';//The following attributeTypes are supported by this LDAP server.'; -$lang['the_following_matching'] = 'Следующий matching rules поддерживаетьÑÑ Ñтим LDAP Ñевером.';//'The following matching rules are supported by this LDAP server.'; -$lang['the_following_syntaxes'] = 'Следующий syntaxes поддерживаетьÑÑ Ñтим LDAP Ñервером.';//'The following syntaxes are supported by this LDAP server.'; -$lang['jump_to_objectclass'] = 'Перейти к objectClass';//'Jump to an objectClass'; -$lang['jump_to_attr'] = 'Перейти к атрибутам';//'Jump to an attribute'; -$lang['schema_for_server'] = 'Схема Ð´Ð»Ñ Ñервера';//'Schema for server'; -$lang['required_attrs'] = 'Запрошеные атрибуты';//'Required Attributes'; -$lang['optional_attrs'] = 'Оптимальные отрибуты';//'Optional Attributes'; +$lang['the_following_objectclasses'] = 'Этот LDAP Ñервер поддерживает Ñледующие объекты.'; +$lang['the_following_attributes'] = 'Этот LDAP Ñервер поддерживает Ñледующие типы атрибутов.'; +$lang['the_following_matching'] = 'Этот LDAP Ñервер поддерживает Ñледующие правила ÑоответÑтвиÑ.'; +$lang['the_following_syntaxes'] = 'Этот LDAP Ñервер поддерживает Ñледующие ÑинтакÑиÑÑ‹.'; +$lang['schema_retrieve_error_1']='Этот Ñервер не полноÑтью поддерживает LDAP протокол.'; +$lang['schema_retrieve_error_2']='Ваша верÑÐ¸Ñ PHP неправильно обработала запроÑ.'; +$lang['schema_retrieve_error_3']='Или phpLDAPadmin не знает как получить Ñхему Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ Ñервера.'; +$lang['jump_to_objectclass'] = 'Перейти к объекту'; +$lang['jump_to_attr'] = 'Перейти к типам атрибутов'; +$lang['jump_to_matching_rule'] = 'Перейти к правилам ÑоответÑтвиÑ'; +$lang['schema_for_server'] = 'Схема Ð´Ð»Ñ Ñервера'; +$lang['required_attrs'] = 'Требуемые атрибуты'; +$lang['optional_attrs'] = 'ÐеобÑзательные атрибуты'; +$lang['optional_binary_attrs'] = 'ÐеобÑзательные бинарные атрибуты'; $lang['OID'] = 'OID'; -$lang['desc'] = 'ОпиÑание';//'Description'; -$lang['is_obsolete'] = 'Этот objectClass еÑÑ‚ÑŒ obsolete';//'This objectClass is obsolete'; -$lang['inherits'] = 'ÐаÑледование'; -$lang['jump_to_this_oclass'] = 'Перейти к Ñтому objectClass опиÑанию';//'Jump to this objectClass definition'; -$lang['matching_rule_oid'] = 'Matching Rule OID'; -$lang['syntax_oid'] = 'Syntax OID'; +$lang['aliases']='ÐлиаÑÑ‹'; +$lang['desc'] = 'ОпиÑание'; +$lang['no_description']='нет опиÑаниÑ'; +$lang['name'] = 'ИмÑ'; +$lang['equality']='РавенÑтво'; +$lang['is_obsolete'] = 'Этот объект уÑтарел.'; +$lang['inherits'] = 'ЗаимÑтвует из'; +$lang['inherited_from'] = 'ЗаимÑтвован из'; +$lang['parent_to'] = 'Родитель длÑ'; +$lang['jump_to_this_oclass'] = 'Перейти к определению Ñтого объекта'; +$lang['matching_rule_oid'] = 'OID правила ÑоответÑтвиÑ'; +$lang['syntax_oid'] = 'OID ÑинтакÑиÑа'; +$lang['not_applicable'] = 'неприменимый'; +$lang['not_specified'] = 'не указано'; +$lang['character']='Ñимвол'; +$lang['characters']='Ñимволы'; +$lang['used_by_objectclasses']='ИÑпользуетÑÑ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°Ð¼Ð¸'; +$lang['used_by_attributes']='ИÑпользован атрибутами'; +$lang['maximum_length']='МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð°'; +$lang['attributes']='Типы атрибутов'; +$lang['syntaxes']='СинтакÑиÑÑ‹'; +$lang['matchingrules']='Правила ÑоответÑтвиÑ'; +$lang['oid']='OID'; +$lang['obsolete']='УÑтаревший'; +$lang['ordering']='Сортировка'; +$lang['substring_rule']='Правило подÑтроки'; +$lang['single_valued']='Однозначный'; +$lang['collective']='СовмеÑтный'; +$lang['user_modification']='Изменение пользователем'; +$lang['usage']='ИÑпользование'; +$lang['could_not_retrieve_schema_from']='Ðе могу получить Ñхему из'; +$lang['type']='Тип'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'ЗапиÑÑŒ %s уÑпешно удалена.'; +$lang['you_must_specify_a_dn'] = 'Ð’Ñ‹ должны указать DN'; +$lang['could_not_delete_entry'] = 'Ðе удалоÑÑŒ удалить запиÑÑŒ: %s'; +$lang['no_such_entry'] = 'Ðет такой запиÑи: %s'; +$lang['delete_dn'] = 'Удалить %s'; +$lang['permanently_delete_children'] = 'Также окончательно удалить вÑех потомков?'; +$lang['entry_is_root_sub_tree'] = 'Эта запиÑÑŒ ÑвлÑетÑÑ ÐºÐ¾Ñ€Ð½ÐµÐ¼ дерева Ñодержащего %s запиÑей.'; +$lang['view_entries'] = 'проÑмотреть запиÑи'; +$lang['confirm_recursive_delete'] = 'phpLDAPadmin может рекурÑивно удалить Ñту запиÑÑŒ и %s его потомков. Ðиже ÑпиÑок вÑех запиÑей, которые будут удалены. Ð’Ñ‹ дейÑтвительно хотите Ñто Ñделать?'; +$lang['confirm_recursive_delete_note'] = 'Внимание: Ñто потенциально очень опаÑно и вы делаете Ñто на Ñвой ÑобÑтвенный риÑк. Эта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ может быть отменена. Примите во внимание алиаÑÑ‹, ÑÑылки и другие вещи, которые могум вызвать проблемы.'; +$lang['delete_all_x_objects'] = 'Удалить вÑе %s объектов'; +$lang['recursive_delete_progress'] = 'ПрогреÑÑ Ñ€ÐµÐºÑƒÑ€Ñивного удалениÑ'; +$lang['entry_and_sub_tree_deleted_successfully'] = 'ЗапиÑÑŒ %s и ее потомки уÑпешно удалены.'; +$lang['failed_to_delete_entry'] = 'Ðе удалоÑÑŒ удалить запиÑÑŒ %s'; +$lang['list_of_entries_to_be_deleted'] = 'СпиÑок запиÑей на удаление:'; +$lang['sure_permanent_delete_object']='Ð’Ñ‹ уверены, что хотите окончательно удалить Ñтот объект?'; +$lang['dn'] = 'DN'; + +// Deleting attributes +$lang['attr_is_read_only'] = 'Этот атрибут "%s" уÑтановлен "только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ" в конфигурации phpLDAPadmin.'; +$lang['no_attr_specified'] = 'Ðе указано Ð¸Ð¼Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð°.'; +$lang['no_dn_specified'] = 'Ðе указан DN'; + +// Adding attributes +$lang['left_attr_blank'] = 'Ð’Ñ‹ оÑтавили значение атрибута пуÑтым. ВернитеÑÑŒ и попробуйте еще раз.'; +$lang['failed_to_add_attr'] = 'Ðе удалоÑÑŒ добавить атрибут.'; +$lang['file_empty'] = 'Файл, который Ð’Ñ‹ выбрали или не ÑущеÑтвует или пуÑÑ‚. ПожалуйÑта вернитеÑÑŒ и попробуйте еще раз.'; +$lang['invalid_file'] = 'Ошибка безопаÑноÑти: Файл который Ð’Ñ‹ загрузили может иметь вредоноÑный код.'; +$lang['warning_file_uploads_disabled'] = 'Ваша ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ PHP запрещает загрузку файлов. Проверьте php.ini перед тем как продолжить.'; +$lang['uploaded_file_too_big'] = 'Файл, который Ð’Ñ‹ загрузили Ñлишком велик. Проверьте php.ini, опцию upload_max_size'; +$lang['uploaded_file_partial'] = 'Файл, который Ð’Ñ‹ выбрали был загружен только чаÑтично, вероÑтно из-за ошибки в Ñети.'; +$lang['max_file_size'] = 'МакÑимальный размер файла: %s'; + +// Updating values +$lang['modification_successful'] = 'Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑƒÑпешно произведены!'; +$lang['change_password_new_login'] = 'Т.к. Ð’Ñ‹ изменили Ñвой пароль, Ð’Ñ‹ должны войти заново, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñвой новый пароль.'; // Adding objectClass form -$lang['new_required_attrs'] = 'Ðовые запрошеные параметры';// 'New Required Attributes'; -$lang['requires_to_add'] = 'Это дейÑтвие запрошено вами к добавлению';//'This action requires you to add'; -$lang['new_attributes'] = 'новые атрибуты';//'new attributes'; -$lang['new_required_attrs_instructions'] = 'Instructions: In order to add this objectClass to this entry, you must specify'; -$lang['that_this_oclass_requires'] = 'that this objectClass requires. You can do so in this form.'; -$lang['add_oclass_and_attrs'] = 'И ObjectClass и Attributes';//'Add ObjectClass and Attributes'; +$lang['new_required_attrs'] = 'Ðовые требуемые атрибуты'; +$lang['requires_to_add'] = 'Это дейÑтвие требует добавить'; +$lang['new_attributes'] = 'новые атрибуты'; +$lang['new_required_attrs_instructions'] = 'ИнÑтрукциÑ: Чтобы добавить Ñтот объект к Ñтой запиÑи, Ð’Ñ‹ должны указать'; +$lang['that_this_oclass_requires'] = 'что требует Ñтот объект. Ð’Ñ‹ можете Ñто Ñделать в Ñтой форме.'; +$lang['add_oclass_and_attrs'] = 'Добавить объект и атрибуты'; +$lang['objectclasses'] = 'Объекты'; // General -$lang['chooser_link_tooltip'] = 'Click to popup a dialog to select an entry (DN) graphically'; -$lang['no_updates_in_read_only_mode'] = 'You cannot perform updates while server is in read-only mode'; -$lang['bad_server_id'] = 'Плохой Ñервера id';//'Bad server id'; -$lang['not_enough_login_info'] = 'Ðе доÑтаточно информации Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº Ñерверу. ПожалуÑта проверте Вашу конфигулацию.';//'Not enough information to login to server. Please check your configuration.'; -$lang['could_not_connect'] = 'Ðе могу подключитьÑÑ Ðº LDAP Ñервером';//'Could not connect to LDAP server.'; -$lang['could_not_perform_ldap_mod_add'] = 'Could not perform ldap_mod_add operation.'; +$lang['chooser_link_tooltip'] = 'Ðажмите чтобы вызвать диалог Ð´Ð»Ñ Ð²Ð¸Ð·ÑƒÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ выбора запиÑи(DN)'; +$lang['no_updates_in_read_only_mode'] = 'Ð’Ñ‹ не можете производить Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾ тех пор, пока Ñервер находитÑÑ Ð² режиме "только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ"'; +$lang['bad_server_id'] = 'Ðеправильный id Ñервера'; +$lang['not_enough_login_info'] = 'ÐедоÑтаточно информации чтобы подключитьÑÑ Ðº Ñерверу. Проверьте Вашу конфигурацию.'; +$lang['could_not_connect'] = 'Ðе могу подключитьÑÑ Ðº LDAP-Ñерверу.'; +$lang['could_not_connect_to_host_on_port'] = 'Ðе могу подключитьÑÑ Ðº "%s" на порт "%s"'; +$lang['could_not_perform_ldap_mod_add'] = 'Ðе удалоÑÑŒ произвеÑти операцию ldap_mod_add.'; +$lang['bad_server_id_underline'] = 'Ðеправильный server_id: '; +$lang['success'] = 'УÑпешно'; +$lang['server_colon_pare'] = 'Сервер: '; +$lang['look_in'] = 'Ищу в: '; +$lang['missing_server_id_in_query_string'] = 'Ðе указан ID Ñервера в Ñтроке запроÑа!'; +$lang['missing_dn_in_query_string'] = 'Ðе указан DN в Ñтроке запроÑа!'; +$lang['back_up_p'] = 'Back Up...'; +$lang['no_entries'] = 'нет запиÑей'; +$lang['not_logged_in'] = 'Ðе авторизовалиÑÑŒ'; +$lang['could_not_det_base_dn'] = 'Ðе могу выÑÑнить оÑновной DN'; +$lang['please_report_this_as_a_bug']='ПожалуйÑта Ñообщите об Ñтой ошибке.'; +$lang['reasons_for_error']='Это могло ÑлучитÑÑ Ð¿Ð¾ неÑкольким причинам, наиболее вероÑтные Ñто:'; +$lang['yes']='Да'; +$lang['no']='Ðет'; +$lang['go']='Перейти'; +$lang['delete']='Удалить'; +$lang['back']='Ðазад'; +$lang['object']='объект'; +$lang['delete_all']='Удалить вÑе'; +$lang['url_bug_report']='https://sourceforge.net/tracker/?func=add&group_id=61828&atid=498546'; +$lang['hint'] = 'подÑказка'; +$lang['bug'] = 'ошибка'; +$lang['warning'] = 'предупреждение'; +$lang['light'] = 'Ñвет'; // the word 'light' from 'light bulb' +$lang['proceed_gt'] = 'Далее >>'; + // Add value form -$lang['add_new'] = 'Добавить новый';//'Add new'; -$lang['value_to'] = 'Значение к';//'value to'; -$lang['server'] = 'Сервер';//'Server'; -$lang['distinguished_name'] = 'Distinguished Name'; -$lang['current_list_of'] = 'Текущий ÑпиÑок';//'Current list of'; -$lang['values_for_attribute'] = 'значение Ð´Ð»Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð°';//'values for attribute'; -$lang['inappropriate_matching_note'] = 'Note: You will get an "inappropriate matching" error if you have not
' . - 'setup an EQUALITY rule on your LDAP server for this attribute.'; -$lang['enter_value_to_add'] = 'Enter the value you would like to add:'; -$lang['new_required_attrs_note'] = 'Note: you may be required to enter new attributes
that this objectClass requires.'; -$lang['syntax'] = 'СинтакÑиÑ';//'Syntax'; +$lang['add_new'] = 'Добавить новый'; +$lang['value_to'] = 'значение длÑ'; +$lang['distinguished_name'] = 'Отличительное имÑ'; +$lang['current_list_of'] = 'Текущий ÑпиÑок'; +$lang['values_for_attribute'] = 'значений атрибутов'; +$lang['inappropriate_matching_note'] = 'Внимание: Ð’Ñ‹ получите ошибку "неподходÑщее ÑоответÑтвие", еÑли Ð’Ñ‹ выÑтавили правило "равенÑтво"(EQUALITY) на Вашем LDAP-Ñервере Ð´Ð»Ñ Ñтого атрибута.'; +$lang['enter_value_to_add'] = 'Введите значение, которое Ð’Ñ‹ хотите добавить:'; +$lang['new_required_attrs_note'] = 'Внимание: Вам может потребоватьÑÑ Ð²Ð²ÐµÑти новые атрибуты, которые требует Ñтот объект'; +$lang['syntax'] = 'СинтакÑ'; -// Incomplete or Erroneous Language Files -$lang['attr_name_tooltip'] = 'attr_name_tooltip'; -$lang['refresh_entry']= 'обновить запиÑÑŒ'; -$lang['attr_schema_hint']='атрибут Ñхемы подÑказки'; -$lang['attrs_modified']='атрибуты изменены'; -$lang['attr_modified']='атрибут изменен'; -$lang['name']='имÑ'; -$lang['not_applicable']='не применимый'; -$lang['not_specified']='не орпеделенный'; -$lang['entry_deleted_successfully']='запиÑÑŒ удалена уÑпешно'; -$lang['you_must_specify_a_dn']='вы должны определить DN'; -$lang['could_not_delete_entry']='не возможно удалить запиÑÑŒ'; -$lang['bad_server_id_underline']='неверный id Ñервера подчеркивать'; -$lang['success']='уÑпешно'; -$lang['server_colon_pare']='вырезать двоеточие Ñевера'; -$lang['look_in']='раÑÑматривать'; -$lang['missing_server_id_in_query_string']='отÑутÑвует id Ñервера в Ñтроке запроÑа'; -$lang['missing_dn_in_query_string']='отÑутÑвует dn в Ñтроке запроÑа'; -$lang['back_up_p']='back up p'; -$lang['no_entries']='нет запиÑей'; -$lang['not_logged_in']='не зарагеÑтрирован в'; -$lang['could_not_det_base_dn']='не возможно определить Base DN'; -$lang['copy_server_read_only']='корировать Ñервер только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ'; -$lang['copy_dest_dn_blank']='копировать в раÑположение пуÑтого DN'; -$lang['copy_dest_already_exists']='копировать в раÑположение уже ÑущеÑтвующее'; -$lang['copy_dest_container_does_not_exist']='копировать в раÑположение которое не ÑущеÑтвует'; -$lang['copy_source_dest_dn_same']='копировать Ñ Ð¸Ñходного раÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² тот же DN '; -$lang['copy_copying']='копировать копирование'; -$lang['copy_recursive_copy_progress']='копирование Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ€ÐµÐºÑƒÑ€Ñивного копированиÑ'; -$lang['copy_building_snapshot']='копирование кадра поÑтроение'; -$lang['copy_successful_like_to']='копирование уÑпешно подобно до '; -$lang['copy_view_new_entry']='копирование проÑмотр новых запиÑей'; -$lang['copy_failed']='копирование неудачно'; -$lang['missing_template_file']='нет временого файла'; -$lang['using_default']='иÑпользовать по умолчанию'; -$lang['copyf_title_copy']='копировать заголовок копировать'; -$lang['copyf_to_new_object']='копировать новый объект'; -$lang['copyf_dest_dn']='копировать раÑположение DN'; -$lang['copyf_dest_dn_tooltip']='копировать раÑположение DN toolip'; -$lang['copyf_dest_server']='копировать раÑположение Ñервера'; -$lang['copyf_note']='копировать запиÑку'; -$lang['copyf_recursive_copy']='копирование рекурÑивное копирование'; -$lang['create_required_attribute']='Ñоздать необходимый атрибут'; -$lang['create_redirecting']='Ñоздать переназначение'; -$lang['create_here']='Ñоздать ÑдеÑÑŒ'; -$lang['create_could_not_add']='Ñоздание не может добавление'; -$lang['createf_create_object']='Ñоздать объект'; -$lang['createf_choose_temp']='выбрать шаблон'; -$lang['createf_select_temp']='выбрать шаблон'; -$lang['createf_proceed']='обработаный'; -$lang['ctemplate_on_server']='на Ñервер'; -$lang['ctemplate_no_template']='нет шаблона'; -$lang['ctemplate_config_handler']='Ñкофигурировать инÑтруктора'; -$lang['ctemplate_handler_does_not_exist']='конÑтруктор не ÑущеÑтвует'; -$lang['you_have_not_logged_into_server']='Ð’Ñ‹ не зарегеÑтрировалиÑÑŒ на Ñервере'; -$lang['click_to_go_to_login_form']='нажмите Ð´Ð»Ñ Ñ€ÐµÐ³Ð¸Ñтрации'; -$lang['unrecognized_criteria_option']='неизвеÑна Ð¾Ð¿Ñ†Ð¸Ñ ÐºÑ€Ð¸Ñ‚ÐµÑ€Ð¸Ñ'; -$lang['if_you_want_to_add_criteria']='еÑли Ð’Ñ‹ хотите добавить критерий'; -$lang['entries_found']='запиÑи найдены'; -$lang['filter_performed']='фильтер выполнен'; -$lang['search_duration']='поиÑк длительный'; -$lang['seconds']='Ñекунды'; -$lang['scope_in_which_to_search']='в которой иÑкать'; -$lang['scope_sub']='под'; -$lang['scope_one']='одна облаÑÑ‚ÑŒ'; -$lang['scope_base']='база'; -$lang['standard_ldap_search_filter']='Ñтандартный ldap поиÑковый фильтер'; +//copy.php +$lang['copy_server_read_only'] = 'Ð’Ñ‹ не можете производить Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾ тех пор, пока Ñервер находитÑÑ Ð² режиме "только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ"'; +$lang['copy_dest_dn_blank'] = 'Ð’Ñ‹ не заполнили конечный DN.'; +$lang['copy_dest_already_exists'] = 'ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ (%s) уже ÑужеÑтвует.'; +$lang['copy_dest_container_does_not_exist'] = 'Конечный контейнер (%s) не ÑущеÑтвует.'; +$lang['copy_source_dest_dn_same'] = 'ИÑходный и конечный DN одинаковы.'; +$lang['copy_copying'] = 'Сопирую '; +$lang['copy_recursive_copy_progress'] = 'ПрогреÑÑ Ñ€ÐµÐºÑƒÑ€Ñивного копированиÑ'; +$lang['copy_building_snapshot'] = 'Создаю копию ÑоÑтоÑÐ½Ð¸Ñ Ð´ÐµÑ€ÐµÐ²Ð° Ð´Ð»Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ... '; +$lang['copy_successful_like_to'] = 'Копирование прошло уÑпешно! Ð’Ñ‹ хотите '; +$lang['copy_view_new_entry'] = 'проÑмотреть новую запиÑÑŒ'; +$lang['copy_failed'] = 'Ðе удалоÑÑŒ Ñкопировать DN: '; + +//edit.php +$lang['missing_template_file'] = 'Предупреджение: отÑутÑтвуе файл шаблона, '; +$lang['using_default'] = 'ИÑпользую оÑновной.'; +$lang['template'] = 'Шаблон'; +$lang['must_choose_template'] = 'Ð’Ñ‹ должны выбрать шаблон'; +$lang['invalid_template'] = '%s неверный шаблон'; +$lang['using_template'] = 'иÑпользую шаблон'; +$lang['go_to_dn'] = 'Перейти к %s'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Копировать '; +$lang['copyf_to_new_object'] = 'в новый объект'; +$lang['copyf_dest_dn'] = 'Конечный DN'; +$lang['copyf_dest_dn_tooltip'] = 'Полный DN новой запиÑи будет Ñоздан при копировании иÑходной'; +$lang['copyf_dest_server'] = 'Конечный Ñервер'; +$lang['copyf_note'] = 'ПодÑказка: Копирование между различными Ñерверами Ñработает, еÑли между ними нет противоречий в Ñхемах'; +$lang['copyf_recursive_copy'] = 'РекурÑивно Ñкопировать и вÑех потомков Ñтого объекта.'; +$lang['recursive_copy'] = 'РекурÑивное копирование'; +$lang['filter'] = 'Фильтр'; +$lang['filter_tooltip'] = 'ЕÑли производите рекурÑивное копирование - копируйте только те запиÑи, которые ÑоответÑтвуют Ñтому фильтру'; + +//create.php +$lang['create_required_attribute'] = 'Ð’Ñ‹ оÑтавили пуÑтым значение Ð´Ð»Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÐ¼Ð¾Ð³Ð¾ атрибута (%s).'; +$lang['redirecting'] = 'Переназначаю...'; +$lang['here'] = 'Ñюда'; +$lang['create_could_not_add'] = 'Ðе удалоÑÑŒ добавить объект на LDAP-Ñервер.'; + +//create_form.php +$lang['createf_create_object'] = 'Создать объект'; +$lang['createf_choose_temp'] = 'Выберите шаблон'; +$lang['createf_select_temp'] = 'Выберите шаблон Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°'; +$lang['createf_proceed'] = 'Далее'; +$lang['rdn_field_blank'] = 'Ð’Ñ‹ оÑтавили RDN поле пуÑтым.'; +$lang['container_does_not_exist'] = 'Контейнер, который Ð’Ñ‹ указали (%s) не ÑущеÑтвует. Попробуйте еще раз.'; +$lang['no_objectclasses_selected'] = 'Ð’Ñ‹ не выбрали ни одного клаÑÑа Ð´Ð»Ñ Ñтого объекта. ВернитеÑÑŒ и Ñделайте Ñто.'; +$lang['hint_structural_oclass'] = 'ПодÑказка: Ð’Ñ‹ должны выбрать как минимум один Ñтруктурный клаÑÑ'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'Ðа Ñервере'; +$lang['ctemplate_no_template'] = 'Ð’ POST переменных не указан шаблон.'; +$lang['ctemplate_config_handler'] = 'Ваша ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ обработчик'; +$lang['ctemplate_handler_does_not_exist'] = 'Ð´Ð»Ñ Ñтого шаблона. Ðо Ñтот обработчик не ÑущеÑтвует в каталоге templates/creation.'; +$lang['create_step1'] = 'Шаг 1 из 2: Ð˜Ð¼Ñ Ð¸ клаÑÑ(Ñ‹) объекта'; +$lang['create_step2'] = 'Шаг 2 из 2: Определение атрибутов и значений'; +$lang['relative_distinguished_name'] = 'ОтноÑительное оттличительное имÑ'; +$lang['rdn'] = 'RDN'; +$lang['rdn_example'] = '(пример: cn=MyNewPerson)'; +$lang['container'] = 'Контейнер'; +$lang['alias_for'] = 'ÐÐ»Ð¸Ð°Ñ Ð´Ð»Ñ %s'; + +// search.php +$lang['you_have_not_logged_into_server'] = 'Ð’Ñ‹ еще на вошли на выбранный Ñервер, поÑтому Ð’Ñ‹ не можете производить на нем поиÑк.'; +$lang['click_to_go_to_login_form'] = 'Ðажмите здеÑÑŒ чтобы перейти на форму входа на Ñервер'; +$lang['unrecognized_criteria_option'] = 'ÐераÑпознанный критерий поиÑка: '; +$lang['if_you_want_to_add_criteria'] = 'ЕÑли Ð’Ñ‹ хотите добавить Ñвои критерии поиÑка в ÑпиÑок, отредактируйте search.php, чтобы они поддерживалиÑÑŒ. Выхожу.'; +$lang['entries_found'] = 'Ðайдено запиÑей: '; +$lang['filter_performed'] = 'Применен фильтр: '; +$lang['search_duration'] = 'phpLDAPadmin произвел поиÑк за'; +$lang['seconds'] = 'Ñекунд'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'ОблаÑÑ‚ÑŒ поиÑка'; +$lang['scope_sub'] = 'Ð’Ñе (вÑе поддерево)'; +$lang['scope_one'] = 'Один (один уровень под базовым)'; +$lang['scope_base'] = 'База (только базовый dn)'; +$lang['standard_ldap_search_filter'] = 'Стандартный фильтр поиÑка LDAP. Пример: (&(sn=Smith)(givenname=David))'; $lang['search_filter'] = 'Фильтр поиÑка'; -$lang['list_of_attrs_to_display_in_results']='ÑпиÑок атрибутов показать в результате'; -$lang['starts with'] = 'начинаетÑÑ Ñ';//'starts with'; -$lang['ends with'] = 'заканчиваетÑÑ Ð½Ð°';//'ends with'; -$lang['sounds like']='звучит подобно'; -$lang['could_not_fetch_server_info']='не могу получить информацию Ñ Ñервера'; -$lang['server_info_for']='инфа Ñервера длÑ'; -$lang['server_reports_following']='отчет Ñервера Ñледует'; -$lang['nothing_to_report']='нечего показать Ð´Ð»Ñ Ð¾Ñ‚Ñ‡ÐµÑ‚Ð°'; -$lang['update_array_malformed']='update_array_malformed'; -$lang['could_not_perform_ldap_modify']='Ð½ÐµÐ»ÑŒÐ·Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ñ‚ÑŒ изменение ldap'; -$lang['do_you_want_to_make_these_changes']='хотите Ñделать Ñти изменениÑ'; -$lang['attribute']='атрибут'; -$lang['old_value']='Ñтарое значение'; -$lang['new_value']='новое значение'; -$lang['attr_deleted']='атрибут удален'; -$lang['commit']='подтвердить'; -$lang['cancel']='отменить'; -$lang['you_made_no_changes']='Ð’Ñ‹ ничего не изменили '; -$lang['go_back']='назад'; -$lang['welcome_note']='ИÑпользуйте меню Ñлева Ð´Ð»Ñ Ð½Ð°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ð¸'; -$lang['unsafe_file_name']='ненадежное Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°'; -$lang['no_such_file']='нет такого файла'; -$lang['auto_update_not_setup']='авто-обновление не уÑтанавливать'; -$lang['uidpool_not_set']='uidpool не указан'; -$lang['uidpool_not_exist']='uidpool не ÑущеÑтвует'; -$lang['specified_uidpool']='определите uidpool'; -$lang['auto_uid_invalid_value']='auto uid неправильное значение'; -$lang['error_auth_type_config']='error_auth_type_config'; -$lang['php_install_not_supports_tls']='уÑтановленый PHP не поддерживает tls'; -$lang['could_not_start_tls']='Ð½ÐµÐ»ÑŒÐ·Ñ Ð½Ð°Ñ‡Ð°Ñ‚ÑŒ tls'; -$lang['auth_type_not_valid']='тип авторизации не правильный'; -$lang['ldap_said']='ldap Ñказал'; -$lang['ferror_error']='ошибка'; -$lang['fbrowse']='проÑмотреть'; -$lang['delete_photo']='удалить фото'; -$lang['install_not_support_blowfish']='уÑтановка не поддерживает blowfish'; -$lang['install_no_mash']='install_no_mash'; -$lang['jpeg_contains_errors']='jpeg Ñодержит ошибки'; -$lang['ferror_number']='номер ошибки'; -$lang['ferror_discription']='ошибка опиÑаниÑ'; -$lang['ferror_number_short']='чиÑло короткое'; -$lang['ferror_discription_short']='опиÑание короткое'; -$lang['ferror_submit_bug']='подтвердите баг'; -$lang['ferror_unrecognized_num']='неивеÑный номер ошибки '; -$lang['ferror_nonfatil_bug']='не Ñ„Ð°Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°'; -$lang['ferror_congrats_found_bug']='поздравление нашедшим баг'; +$lang['list_of_attrs_to_display_in_results'] = 'СпиÑок атрибутов, которые отображать в результатах (разделенные запÑтыми)'; +$lang['show_attributes'] = 'Показать атрибуты'; + +// search_form_simple.php +$lang['search_for_entries_whose'] = 'ИÑкать запиÑи, которые:'; +$lang['equals'] = 'равны'; +$lang['starts with'] = 'начинаютÑÑ Ñ'; +$lang['contains'] = 'Ñодержат'; +$lang['ends with'] = 'заканчиваютÑÑ Ð½Ð°'; +$lang['sounds like'] = 'похожи на'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'Ðе могу получить LDAP-информацию Ñ Ñервера'; +$lang['server_info_for'] = 'Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ Ñервере: '; +$lang['server_reports_following'] = 'Сервер Ñообщил о Ñебе Ñледующую информацию'; +$lang['nothing_to_report'] = 'Этому Ñерверу нечего о Ñебе Ñообщить.'; + +//update.php +$lang['update_array_malformed'] = 'неправильно Ñформирован update_array. Возможно Ñто ошибка phpLDAPadmin. Сообщите о ней.'; +$lang['could_not_perform_ldap_modify'] = 'Ðе удалоÑÑŒ произвеÑти операцию ldap_modify.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Ð’Ñ‹ дейÑтвительно хотите произвеÑти Ñти изменениÑ?'; +$lang['attribute'] = 'Ðтрибут'; +$lang['old_value'] = 'Старое значение'; +$lang['new_value'] = 'Ðовое значение'; +$lang['attr_deleted'] = '[атрибут удален]'; +$lang['commit'] = 'Подтвердить'; +$lang['cancel'] = 'Отменить'; +$lang['you_made_no_changes'] = 'Ð’Ñ‹ не Ñделали никаких изменений'; +$lang['go_back'] = 'ВернутьÑÑ'; + +// welcome.php +$lang['welcome_note'] = 'ИÑпользуйте меню Ñлева Ð´Ð»Ñ Ð½Ð°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ð¸'; +$lang['credits'] = 'Создатели'; +$lang['changelog'] = 'СпиÑок изменений'; +$lang['donate'] = 'СпонÑировать'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'ÐебезопаÑтное Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°: '; +$lang['no_such_file'] = 'Ðет такого файла: '; + +//function.php +$lang['auto_update_not_setup'] = 'Ð’Ñ‹ разрешили auto_uid_numbers Ð´Ð»Ñ %s в Вашей конфигурации, + но Ð’Ñ‹ не указали auto_uid_number_mechanism. ПожалуйÑта иÑправьте Ñту проблему.'; +$lang['uidpool_not_set'] = 'Ð’Ñ‹ указали "auto_uid_number_mechanism" как "uidpool" + в Вашей конфигурации Ð´Ð»Ñ Ñервера %s, но не указали + audo_uid_number_uid_pool_dn. ИÑправьте Ñто перед тем как продолжить.'; +$lang['uidpool_not_exist'] = 'Похоже что uidPool, который Ð’Ñ‹ указали в Вашей конфигурации ("%s") + не ÑущеÑтвует.'; +$lang['specified_uidpool'] = 'Ð’Ñ‹ указали "auto_uid_number_mechanism" как "search" в Вашей кофигурации + Ð´Ð»Ñ Ñервера %s, но не указали + "auto_uid_number_search_base". ИÑправьте Ñто перед тем как продолжить.'; +$lang['auto_uid_invalid_credential'] = 'Ðе могу привÑзатьÑÑ Ðº %s Ñ Ð’Ð°ÑˆÐ¸Ð¼Ð¸ auto_uid данными. Проверьте Ваш файл конфигурации.'; +$lang['bad_auto_uid_search_base'] = 'Ð’ Вашей конфигурации phpLDAPadmin указано неверное значение Ð´Ð»Ñ auto_uid_search_base Ð´Ð»Ñ Ñервера %s'; +$lang['auto_uid_invalid_value'] = 'Ð’Ñ‹ указали неверное значение Ð´Ð»Ñ auto_uid_number_mechanism ("%s") + в Вашей конфигурации. Возможны только "uidpool" и "search". + ПожалуйÑта иÑправьте Ñту проблему.'; +$lang['error_auth_type_config'] = 'Ошибка: Ð’ Вашем конфигурационном файле ошибка. ЕдинÑтвенные три допуÑтимых Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ + Ð´Ð»Ñ auth_type в Ñекции $servers - \'session\', \'cookie\', и \'config\'. Ð’Ñ‹ ввели \'%s\', + что недопуÑтимо. '; +$lang['php_install_not_supports_tls'] = 'Ваша уÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ PHP не поддерживает TLS.'; +$lang['could_not_start_tls'] = 'Ðе могу запуÑтить TLS. Проверьте конфигурацию Вашего LDAP-Ñервера.'; +$lang['could_not_bind_anon'] = 'Ðе могу анонимно привÑзатьÑÑ Ðº Ñерверу.'; +$lang['could_not_bind'] = 'Ðе удалоÑÑŒ привÑзатьÑÑ Ðº LDAP-Ñерверу.'; +$lang['anonymous_bind'] = 'ÐÐ½Ð¾Ð½Ð¸Ð¼Ð½Ð°Ñ Ð¿Ñ€Ð¸Ð²Ñзка'; +$lang['bad_user_name_or_password'] = 'Ðеверное Ð¸Ð¼Ñ Ð¸Ð»Ð¸ пароль. Попробуйте еще раз.'; +$lang['redirecting_click_if_nothing_happens'] = 'ПеренапрÑвлÑÑŽ... Ðажмите здеÑÑŒ, еÑли ничего не проиÑходит.'; +$lang['successfully_logged_in_to_server'] = 'УÑпешно вошли на Ñервер %s'; +$lang['could_not_set_cookie'] = 'Ðе удалоÑÑŒ уÑтановить cookie.'; +$lang['ldap_said'] = 'LDAP ответил: %s'; +$lang['ferror_error'] = 'Ошибка'; +$lang['fbrowse'] = 'проÑмотр'; +$lang['delete_photo'] = 'Удалить фотографию'; +$lang['install_not_support_blowfish'] = 'Ваша уÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ PHP не поддерживает шифрование blowfish.'; +$lang['install_not_support_md5crypt'] = 'Ваша уÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ PHP не поддерживает шифрование md5crypt.'; +$lang['install_no_mash'] = 'Ваша уÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ PHP не имеет функцию mhash(). Ðе могу Ñоздать Ñ…Ñши SHA.'; +$lang['jpeg_contains_errors'] = 'jpegPhoto Ñодержит ошибки
'; +$lang['ferror_number'] = 'Ðомер ошибки: %s (%s)'; +$lang['ferror_discription'] = 'ОпиÑание: %s

'; +$lang['ferror_number_short'] = 'Ðомер ошибки: %s

'; +$lang['ferror_discription_short'] = 'ОпиÑание: (нет опиÑаниÑ)
'; +$lang['ferror_submit_bug'] = 'ЕÑли Ñто ошибка phpLDAPadmin - пожалуйÑта, Ñообщите о ней.'; +$lang['ferror_unrecognized_num'] = 'ÐераÑÐ¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°: '; +$lang['ferror_nonfatil_bug'] = '
+
+ Вы нашли нефатальную ошибку phpLDAPadmin!
Ошибка:%s (%s)
Файл:%s Ñтрока %s, вызвано %s
ВерÑии:PLA: %s, PHP: %s, SAPI: %s +
Web Ñервер:%s
+ Сообщите об Ñтой ошибке нажав здеÑÑŒ.

'; +$lang['ferror_congrats_found_bug'] = 'ПоздравлÑем! Ð’Ñ‹ нашли ошибку в phpLDAPadmin.

+ + + + + + + + + + +
Ошибка:%s
Уровень:%s
Файл:%s
Строка:%s
Вызвано:%s
PLA ВерÑиÑ:%s
PHP ВерÑиÑ:%s
PHP SAPI:%s
Web Ñервер:%s
+
+ Сообщите об Ñтой ошибке нажав ниже!'; + +//ldif_import_form +$lang['import_ldif_file_title'] = 'Иморт LDIF файла'; +$lang['select_ldif_file'] = 'Выберите LDIF файл:'; +$lang['select_ldif_file_proceed'] = 'Далее >>'; +$lang['dont_stop_on_errors'] = 'Ðе оÑтанавливатьÑÑ Ð½Ð° ошибках'; + +//ldif_import +$lang['add_action'] = 'ДобавлÑÑŽ...'; +$lang['delete_action'] = 'УдалÑÑŽ...'; +$lang['rename_action'] = 'Переименовываю...'; +$lang['modify_action'] = 'ИзменÑÑŽ...'; +$lang['warning_no_ldif_version_found'] = 'Ðе найдено номера верÑии. Предполагаю 1.'; +$lang['valid_dn_line_required'] = 'ТребуетÑÑ Ð¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ñтрока Ñ dn.'; +$lang['missing_uploaded_file'] = 'ОтÑутÑтвует загруженный файл.'; +$lang['no_ldif_file_specified.'] = 'не указан LDIF файл. Попробуйте еще раз.'; +$lang['ldif_file_empty'] = 'Загруженный LDIF файл пуÑÑ‚.'; +$lang['empty'] = 'пуÑÑ‚'; +$lang['file'] = 'Файл'; +$lang['number_bytes'] = '%s байт'; + +$lang['failed'] = 'Ðе удалоÑÑŒ'; +$lang['ldif_parse_error'] = 'Ошибка интерпретации LDIF файла'; +$lang['ldif_could_not_add_object'] = 'Ðе удалоÑÑŒ добавить объект:'; +$lang['ldif_could_not_rename_object'] = 'Ðе удалоÑÑŒ переименовать объект:'; +$lang['ldif_could_not_delete_object'] = 'Ðе удалоÑÑŒ удалить объект:'; +$lang['ldif_could_not_modify_object'] = 'Ðе удалоÑÑŒ изменить объект:'; +$lang['ldif_line_number'] = 'Ðомер Ñтроки:'; +$lang['ldif_line'] = 'Строка:'; + +// Exports +$lang['export_format'] = 'Формат ÑкÑпорта'; +$lang['line_ends'] = 'Конец Ñтроки'; +$lang['must_choose_export_format'] = 'Ð’Ñ‹ должны выбрать формат ÑкÑпорта.'; +$lang['invalid_export_format'] = 'Ðеверный формат ÑкÑпорта'; +$lang['no_exporter_found'] = 'Ðет доÑтупных ÑкÑпортеров.'; +$lang['error_performing_search'] = 'Произошла ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ð¸Ñка.'; +$lang['showing_results_x_through_y'] = 'Показываю результаты Ñ %s по %s.'; +$lang['searching'] = 'ПоиÑк...'; +$lang['size_limit_exceeded'] = 'Внимание, превышен размер поиÑка.'; +$lang['entry'] = 'ЗапиÑÑŒ'; +$lang['ldif_export_for_dn'] = 'LDIF ÑкÑпорт длÑ: %s'; +$lang['generated_on_date'] = 'Сгенерировано phpLDAPadmin %s'; +$lang['total_entries'] = 'Ð’Ñего запиÑей'; +$lang['dsml_export_for_dn'] = 'DSLM ÑкÑпорт длÑ: %s'; + +// logins +$lang['could_not_find_user'] = 'Ðе могу найти Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ "%s"'; +$lang['password_blank'] = 'Ð’Ñ‹ не ввели пароль.'; +$lang['login_cancelled'] = 'Вход отменен.'; +$lang['no_one_logged_in'] = 'Ðа Ñтом Ñервере ÑÐµÐ¹Ñ‡Ð°Ñ Ð½Ð¸ÐºÐ¾Ð³Ð¾ нет.'; +$lang['could_not_logout'] = 'Ðе удалоÑÑŒ выйти.'; +$lang['unknown_auth_type'] = 'ÐеизвеÑтный auth_type: %s'; +$lang['logged_out_successfully'] = 'УÑпешно вышли Ñ Ñервера %s'; +$lang['authenticate_to_server'] = 'ÐÐ²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° Ñервере %s'; +$lang['warning_this_web_connection_is_unencrypted'] = 'Предупреждение: Это web-Ñоединение нешифровано.'; +$lang['not_using_https'] = 'Ð’Ñ‹ не иÑпользуете \'https\'. Web-браузер передает авторизационные данные открытым текÑтом.'; +$lang['login_dn'] = 'Login DN'; +$lang['user_name'] = 'Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ'; +$lang['password'] = 'Пароль'; +$lang['authenticate'] = 'ÐвотризациÑ'; + +// Entry browser +$lang['entry_chooser_title'] = 'Выбор запиÑи'; + +// Index page +$lang['need_to_configure'] = 'Вам надо Ñконфигурировать phpLDAPadmin. Отредактируйте файл \'config.php\'. Примерный файл наÑтроек - \'config.php.example\''; + +// Mass deletes +$lang['no_deletes_in_read_only'] = 'Удаление невозможно в режиме "только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ".'; +$lang['error_calling_mass_delete'] = 'Ошибка вызова mass_delete.php. ОтÑутÑтвует mass_delete в POST переменных.'; +$lang['mass_delete_not_array'] = 'POST Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ mass_delete не в маÑÑиве.'; +$lang['mass_delete_not_enabled'] = 'МаÑÑовое удаление не разрешено. ИÑпровьте Ñто в config.php перед тем как продолжить.'; +$lang['mass_deleting'] = 'МаÑÑовое удаление'; +$lang['mass_delete_progress'] = 'ПрогреÑÑ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð½Ð° Ñервере "%s"'; +$lang['malformed_mass_delete_array'] = 'Ðеправильно Ñформированный маÑÑив mass_delete.'; +$lang['no_entries_to_delete'] = 'Ð’Ñ‹ не выбрали ни одной запиÑи Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ.'; +$lang['deleting_dn'] = 'УдалÑÑŽ %s'; +$lang['total_entries_failed'] = 'Ðе удалоÑÑŒ удалить %s из %s запиÑей.'; +$lang['all_entries_successful'] = 'Ð’Ñе запиÑи уÑпешно удалены.'; +$lang['confirm_mass_delete'] = 'Подтвердите маÑÑовое удаление %s запиÑей на Ñервере %s'; +$lang['yes_delete'] = 'Да, удалить!'; + +// Renaming entries +$lang['non_leaf_nodes_cannot_be_renamed'] = 'Ð’Ñ‹ не можете переименовать запиÑÑŒ, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¸Ð¼ÐµÐµÑ‚ потомков (Ñ‚.е., Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿ÐµÑ€ÐµÐ¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ðµ допуÑтима Ð´Ð»Ñ Ð´ÐµÑ€ÐµÐ²Ð°)'; +$lang['no_rdn_change'] = 'Ð’Ñ‹ не изменили RDN'; +$lang['invalid_rdn'] = 'Ðеверное значение RDN'; +$lang['could_not_rename'] = 'Ðе удалоÑÑŒ переименовать запиÑÑŒ'; ?> diff --git a/lang/sv.php b/lang/sv.php new file mode 100644 index 0000000..91255ec --- /dev/null +++ b/lang/sv.php @@ -0,0 +1,387 @@ + + * based on 0.9.3 Version + +*/ + +// Search form +$lang['simple_search_form_str'] = 'Enkel sökning';//'Simple Search Form'; +$lang['advanced_search_form_str'] = 'Expertsökning';//'Advanced Search Form'; +$lang['server'] = 'Server';//'Server'; +$lang['search_for_entries_whose'] = 'Sök efter rader som';//'Search for entries whose'; +$lang['base_dn'] = 'Base DN';//'Base DN'; +$lang['search_scope'] = 'Sökomfång';//Search Scope'; +$lang['search_ filter'] = 'Sökfilter';//'Search Filter'; +$lang['show_attributes'] = 'Visa attribut';//'Show Attributtes'; +$lang['Search'] = 'Sök';// 'Search'; +$lang['equals'] = 'lika med';//'equals'; +$lang['starts_with'] = 'Börjar med';//'starts with'; +$lang['contains'] = 'innehåller';//'contains'; +$lang['ends_with'] = 'slutar med';//'ends with'; +$lang['sounds_like'] = 'låter som';//'sounds like'; + +// Tree browser +$lang['request_new_feature'] = 'Begär en ny funktion';//'Request a new feature'; +$lang['see_open_requests'] = 'Se öppna förfrågningar';//'see open requests'; +$lang['report_bug'] = 'Rapportera ett fel';//'Report a bug'; +$lang['see_open_bugs'] = 'Se öppna felrapporter';//'see open bugs'; +$lang['schema'] = 'schema';//'schema'; +$lang['search'] = 'sökning';//'search'; +$lang['create'] = 'skapa';//'create'; +$lang['info'] = 'information';//'info'; +$lang['import'] = 'importera';//'import'; +$lang['refresh'] = 'uppdatera';//'refresh'; +$lang['logout'] = 'logga ut';//'logout'; +$lang['create_new'] = 'Skapa ny';//'Create New'; +$lang['view_schema_for'] = 'Titta på schema för';//'View schema for'; +$lang['refresh_expanded_containers'] = 'Uppdatera alla öpnna behållare för';//'Refresh all expanded containers for'; +$lang['create_new_entry_on'] = 'Skapa en ny post för';//'Create a new entry on'; +$lang['view_server_info'] = 'Titta på information som servern tillhandahållit';//'View server-supplied information'; +$lang['import_from_ldif'] = 'Importera rader från LDIF file';//'Import entries from an LDIF file'; +$lang['logout_of_this_server'] = 'Logga ut från den här servern';//'Logout of this server'; +$lang['logged_in_as'] = '/Inloggad som';//'Logged in as: '; +$lang['read_only'] = 'Enbart läsning';//'read only'; +$lang['could_not_determine_root'] = 'Kan inte bestämma roten för ditt LDAP träd';//'Could not determine the root of your LDAP tree.'; +$lang['ldap_refuses_to_give_root'] = 'Det ser ut som om LDAP-servern har konfigurerats att inte avslöja sin rot.';//'It appears that the LDAP server has been configured to not reveal its root.'; +$lang['please_specify_in_config'] = 'Var snäll och specificera i config.php';//'Please specify it in config.php'; +$lang['create_new_entry_in'] = 'Skapa en ny post i';//'Create a new entry in'; +$lang['login_link'] = 'Logga in...';//'Login...'; + +// Entry display +$lang['delete_this_entry'] = 'Ta bort den här posten';//'Delete this entry'; +$lang['delete_this_entry_tooltip'] = 'Du kommer att bli tillfrågad för att konfirmera det här beslutet';//'You will be prompted to confirm this decision'; +$lang['copy_this_entry'] = 'Kopiera den här posten';//'Copy this entry'; +$lang['copy_this_entry_tooltip'] = 'Kopiera det här objektet till en annan plats, ett nytt DN, eller en annan server';//'Copy this object to another location, a new DN, or another server'; +$lang['export_to_ldif'] = 'Exportera till LDIF';//'Export to LDIF'; +$lang['export_to_ldif_tooltip'] = 'Spara en LDIF kopia av detta objekt';//'Save an LDIF dump of this object'; +$lang['export_subtree_to_ldif_tooltip'] = 'Spara en LDIF kopia av detta objekt och alla dess underobjekt';//'Save an LDIF dump of this object and all of its children'; +$lang['export_subtree_to_ldif'] = 'Exportera subträdet till LDIF';//'Export subtree to LDIF'; +$lang['export_to_ldif_mac'] = 'Radslut enligt Macintosh-standard';// 'Macintosh style line ends'; +$lang['export_to_ldif_win'] = 'Radslut enligt Windows-standard';//'Windows style line ends'; +$lang['export_to_ldif_unix'] = 'Radslut enligt Unix-standard';//'Unix style line ends'; +$lang['create_a_child_entry'] = 'Skapa en subpost';//'Create a child entry'; +$lang['add_a_jpeg_photo'] = 'Lägg till ett JPEG-foto';//'Add a jpegPhoto'; +$lang['rename_entry'] = 'Döp om posten';//'Rename Entry'; +$lang['rename'] = 'Döp om ';//'Rename'; +$lang['add'] = 'Lägg till';//'Add'; +$lang['view'] = 'Titta';//'View'; +$lang['add_new_attribute'] = 'Lägg till ett nytt attribut';//'Add New Attribute'; +$lang['add_new_attribute_tooltip'] = 'Lägg till ett nytt attribut/värde till denna post';//'Add a new attribute/value to this entry'; +$lang['internal_attributes'] = 'Interna attribut';//'Internal Attributes'; +$lang['hide_internal_attrs'] = 'Göm interna attribut';//'Hide internal attributes'; +$lang['show_internal_attrs'] ='Visa interna attribut';// 'Show internal attributes'; +$lang['internal_attrs_tooltip'] = 'Attribut som sätts automatiskt av systemet';//'Attributes set automatically by the system'; +$lang['entry_attributes'] = 'Ingångsattribut';//'Entry Attributes'; +$lang['attr_name_tooltip'] = 'Klicka för att titta på schemadefinitionen för attributtyp \'%s\'';//'Click to view the schema defintion for attribute type \'%s\''; +$lang['click_to_display'] = 'klicka\'+\' för att visa';// 'click \'+\' to display'; +$lang['hidden'] = 'gömda';//'hidden'; +$lang['none'] = 'inget';//'none'; +$lang['save_changes'] = 'Spara ändringar';//'Save Changes'; +$lang['add_value'] = 'lägg till värde';//'add value'; +$lang['add_value_tooltip'] = 'Lägg till ett ytterligare värde till attribut \'%s\''; // 'Add an additional value to attribute \'%s\''; +$lang['refresh_entry'] = 'Uppdatera';//'Refresh'; +$lang['refresh_this_entry'] = 'Uppdatera denna post';//'Refresh this entry'; +$lang['delete_hint'] = 'Tips: För att ta bort ett attribut, ta bort all text i textfältet och klicka \'Spara ändringar\'.'; 'Hint: To delete an attribute, empty the text field and click save.'; +$lang['attr_schema_hint'] = 'Tips: För att titta på ett attributs schema, klicka på attributnamnet';//'Hint: To view the schema for an attribute, click the attribute name.'; +$lang['attrs_modified'] = 'Några attribut var ändrade och är markerade nedan.';//'Some attributes (%s) were modified and are highlighted below.'; +$lang['attr_modified'] = 'Ett attribut var ändrat och är markerat nedan.';//An attribute (%s) was modified and is highlighted below.'; +$lang['viewing_read_only'] = 'Titta på en post med enbart lästiilstånd';//'Viewing entry in read-only mode.'; +$lang['change_entry_rdn'] = 'ändra denna posts RDN';//'Change this entry\'s RDN'; +$lang['no_new_attrs_available'] = 'inga nya attribut tillgängliga för denna post';//'no new attributes available for this entry'; +$lang['binary_value'] = 'Binärt värde';//'Binary value'; +$lang['add_new_binary_attr'] = 'Lägg till nytt binärt attribut';//'Add New Binary Attribute'; +$lang['add_new_binary_attr_tooltip'] = 'Lägg till nytt binärt attribut/värde från en fil';//'Add a new binary attribute/value from a file'; +$lang['alias_for'] = 'Observera: \'%s\' är ett alias for \'%s\'';//'Note: \'%s\' is an alias for \'%s\''; +$lang['download_value'] = 'ladda ner värde';//'download value'; +$lang['delete_attribute'] = 'ta bort attribut';//'delete attribute'; +$lang['true'] = 'Sant';//'true'; +$lang['false'] = 'Falskt';//'false'; +$lang['none_remove_value'] = 'inget, ta bort värdet';//'none, remove value'; +$lang['really_delete_attribute'] = 'Ta definitivt bort värdet';//'Really delete attribute'; + +// Schema browser +$lang['the_following_objectclasses'] = 'Följande objektklasser stöds av denna LDAP server.';//'The following objectClasses are supported by this LDAP server.'; +$lang['the_following_attributes'] = 'Följande attributtyper stöds av denna LDAP server.';//'The following attributeTypes are supported by this LDAP server.'; +$lang['the_following_matching'] = 'Följande matchningsregler stöds av denna LDAP server.';//'The following matching rules are supported by this LDAP server.'; +$lang['the_following_syntaxes'] = 'Följande syntax stöds av denna LDAP server.';//'The following syntaxes are supported by this LDAP server.'; +$lang['jump_to_objectclass'] = 'Välj en objectClass';//'Jump to an objectClass'; +$lang['jump_to_attr'] = 'Välj en attributtyp';//'Jump to an attribute type'; +$lang['schema_for_server'] = 'Schema för servern';//'Schema for server'; +$lang['required_attrs'] = 'Nödvändiga attribut';//'Required Attributes'; +$lang['optional_attrs'] = 'Valfria attribut';//'Optional Attributes'; +$lang['OID'] = 'OID';//'OID'; +$lang['desc'] = 'Beskrivning';//'Description'; +$lang['name'] = 'Namn';//'Name'; +$lang['is_obsolete'] = 'Denna objectClass är föråldrad';//'This objectClass is obsolete'; +$lang['inherits'] = 'ärver';//'Inherits'; +$lang['jump_to_this_oclass'] = 'Gå till definitionen av denna objectClass';//'Jump to this objectClass definition'; +$lang['matching_rule_oid'] = 'Matchande regel-OID';//'Matching Rule OID'; +$lang['syntax_oid'] = 'Syntax-OID';//'Syntax OID'; +$lang['not_applicable'] = 'inte tillämplig';//'not applicable'; +$lang['not_specified'] = 'inte specificerad';//'not specified'; + +// Deleting entries +$lang['entry_deleted_successfully'] = 'Borttagning av posten \'%s\' lyckades';//'Entry \'%s\' deleted successfully.'; +$lang['you_must_specify_a_dn'] = 'Du måste specificera ett DN';//'You must specify a DN'; +$lang['could_not_delete_entry'] = 'Det gick inte att ta bort posten';//'Could not delete the entry: %s'; + +// Adding objectClass form +$lang['new_required_attrs'] = 'Nya nödvändiga attribut';//'New Required Attributes'; +$lang['requires_to_add'] = 'Den här åtgärden kräver att du lägger till';//'This action requires you to add'; +$lang['new_attributes'] = 'nya attribut';//'new attributes'; +$lang['new_required_attrs_instructions'] = 'Instruktioner: För att kunna lägga till objektklassen till denna post, måste du specificera';//'Instructions: In order to add this objectClass to this entry, you must specify'; +$lang['that_this_oclass_requires'] = 'att objektklassen kräver. Det kan göras i detta formulär.';//'that this objectClass requires. You can do so in this form.'; +$lang['add_oclass_and_attrs'] = 'Lägg till objektklass och attribut';//'Add ObjectClass and Attributes'; + +// General +$lang['chooser_link_tooltip'] = 'Klicka för att öppna ett fönster för att välja ett grafiskt.';//'Click to popup a dialog to select an entry (DN) graphically'; +$lang['no_updates_in_read_only_mode'] = 'Du kan inte göra uppdateringar medan servern är i lästillstånd';//'You cannot perform updates while server is in read-only mode'; +$lang['bad_server_id'] = 'Felaktigt server-id';//'Bad server id'; +$lang['not_enough_login_info'] = 'Det saknas information för att logga in på servern. Var vänlig och kontrollera din konfiguration.';//'Not enough information to login to server. Please check your configuration.'; +$lang['could_not_connect'] = 'Det gick inte att ansluta till LDAP-servern.';//'Could not connect to LDAP server.'; +$lang['could_not_perform_ldap_mod_add'] = 'Det gick inte att utföra ldap_mod_add operationen.';//''Could not perform ldap_mod_add operation.'; +$lang['bad_server_id_underline'] = 'Felaktigt server_id';//'Bad server_id: '; +$lang['success'] = 'Det lyckades';//'Success'; +$lang['server_colon_pare'] = 'Server';//'Server: '; +$lang['look_in'] = 'Tittar in';//'Looking in: '; +$lang['missing_server_id_in_query_string'] = 'Inget server-ID specificerat i frågesträgen!';//'No server ID specified in query string!'; +$lang['missing_dn_in_query_string'] = 'Inget DN specificerat i frågesträgen!';//'No DN specified in query string!'; +$lang['back_up_p'] = 'Tillbaka';//'Back Up...'; +$lang['no_entries'] = 'inga poster';//'no entries'; +$lang['not_logged_in'] = 'Inte inloggad';//'Not logged in'; +$lang['could_not_det_base_dn'] = 'Det gick inte att bestämma \'base DN\'';//'Could not determine base DN'; + +// Add value form +$lang['add_new'] = 'Lägg till nytt';//'Add new'; +$lang['value_to'] = 'värde till';//'value to'; +$lang['distinguished_name'] = 'Distinguished Name';//'Distinguished Name'; +$lang['current_list_of'] = 'Aktuell lista av';//'Current list of'; +$lang['values_for_attribute'] = 'attributvärden';//'values for attribute'; +$lang['inappropriate_matching_note'] = 'Observera: Du kommer att få ett \'inappropriate matching\'-fel om du inte har
' . + 'satt upp en EQUALITY-regel på din LDAP-server för detta attribut.';// 'Note: You will get an "inappropriate matching" error if you have not
' . + 'setup an EQUALITY rule on your LDAP server for this attribute.'; +$lang['enter_value_to_add'] = 'Skriv in värdet du vill lägga till';//'Enter the value you would like to add:'; +$lang['new_required_attrs_note'] = 'Observera: Du kan bli tvungen att skriva in de nya attribut som denna objectClass behöver';//'Note: you may be required to enter new attributes that this objectClass requires'; +$lang['syntax'] = 'Syntax';//'Syntax'; + +//copy.php +$lang['copy_server_read_only'] = 'Du kan inte göra uppdateringar medan servern är i lästillstånd';//'You cannot perform updates while server is in read-only mode'; +$lang['copy_dest_dn_blank'] = 'Du lämnade destinations-DN tomt';//'You left the destination DN blank.'; +$lang['copy_dest_already_exists'] = 'Destinationen finns redan';//'The destination entry (%s) already exists.'; +$lang['copy_dest_container_does_not_exist'] = 'Destinations-behållaren (%s) finns inte';// 'The destination container (%s) does not exist.'; +$lang['copy_source_dest_dn_same'] = 'Käll- och destinations-DN är samma.';//'The source and destination DN are the same.'; +$lang['copy_copying'] = 'Kopierar';//'Copying '; +$lang['copy_recursive_copy_progress'] = 'Rekursiv kopiering pågår';//'Recursive copy progress'; +$lang['copy_building_snapshot'] = 'Bygger en ögonblicksbild av det träd som ska kopieras';//'Building snapshot of tree to copy... '; +$lang['copy_successful_like_to'] = 'Kopieringen lyckades! Vill du';//'Copy successful! Would you like to '; +$lang['copy_view_new_entry'] = 'titta på den nya posten';//'view the new entry'; +$lang['copy_failed'] = 'Kopiering av DN misslyckades';//'Failed to copy DN: '; + +//edit.php +$lang['missing_template_file'] = 'Varning! mall-filen saknas,';//'Warning: missing template file, '; +$lang['using_default'] = 'använder default.'; //'Using default.'; + +//copy_form.php +$lang['copyf_title_copy'] = 'Kopiera';//'Copy '; +$lang['copyf_to_new_object'] = 'till ett nytt objekt';//'to a new object'; +$lang['copyf_dest_dn'] = 'Destinations-DN';//'Destination DN'; +$lang['copyf_dest_dn_tooltip'] = 'Den nya postens fullständiga DN skapas när källposten kopieras';//'The full DN of the new entry to be created when copying the source entry'; +$lang['copyf_dest_server'] = 'Destinations-server';//'Destination Server'; +$lang['copyf_note'] = 'Tips: Kopiering mellan olika servrar fungerar bara om det inte finns några brott mot schemorna.';// 'Hint: Copying between different servers only works if there are no schema violations'; +$lang['copyf_recursive_copy'] = 'Kopiera även rekursivt alla underobjekt till detta objekt.';//'Recursively copy all children of this object as well.'; + +//create.php +$lang['create_required_attribute'] = 'Du lämnade ett värde tomt för ett nödvändigt attribut %s.';//'You left the value blank for required attribute %s.'; +$lang['create_redirecting'] = 'Omstyrning';//'Redirecting'; +$lang['create_here'] = 'här';//'here'; +$lang['create_could_not_add'] = 'Det gick inte att lägga till objektet till LDAP-servern.';//'Could not add the object to the LDAP server.'; + +//create_form.php +$lang['createf_create_object'] = 'Skapa objekt';//'Create Object'; +$lang['createf_choose_temp'] = 'Välj en mall';//'Choose a template'; +$lang['createf_select_temp'] = 'Välj en mall för att skapa objekt';//'Select a template for the creation process'; +$lang['createf_proceed'] = 'Fortsätt';//'Proceed'; + +//creation_template.php +$lang['ctemplate_on_server'] = 'På servern';//'On server'; +$lang['ctemplate_no_template'] = 'Ingen mall specificerad i POST variablerna.';//'No template specified in POST variables.'; +$lang['ctemplate_config_handler'] = 'Din konfiguration specificerar en hanterare';//'Your config specifies a handler of'; +$lang['ctemplate_handler_does_not_exist'] = 'för denna mall, men hanteraren finns inte i templates/creation-katalogen';//'for this template. But, this handler does not exist in the templates/creation directory.'; + +// search.php +$lang['you_have_not_logged_into_server'] = 'Du har inte loggat in till den valda servern ännu, så du kan inte göra sökningar på den.';//'You have not logged into the selected server yet, so you cannot perform searches on it.'; +$lang['click_to_go_to_login_form'] = 'Klicka här för att komma till login-formuläret';//'Click here to go to the login form'; +$lang['unrecognized_criteria_option'] = 'Känner inte till detta urvals-kriterium';//'Unrecognized criteria option: '; +$lang['if_you_want_to_add_criteria'] = 'Om du vill lägga till ditt eget kriterium till listan, kom ihåg att ändra search.php för att hantera det. Avslutar.';//'If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting.'; +$lang['entries_found'] = 'Poster funna:';//'Entries found: '; +$lang['filter_performed'] = 'Filtrering utförd: ';//'Filter performed: '; +$lang['search_duration'] = 'Sökning utförd av phpLDAPadmin på';//'Search performed by phpLDAPadmin in'; +$lang['seconds'] = 'sekunder';//'seconds'; + +// search_form_advanced.php +$lang['scope_in_which_to_search'] = 'Sökomfattning';//'The scope in which to search'; +$lang['scope_sub'] = 'Sub (Base DN och hela trädet under)';//'Sub (entire subtree)'; +$lang['scope_one'] = 'One (en nivå under Base DN)';//One (one level beneath base)'; +$lang['scope_base'] = 'Base (endast Base DN)';//'Base (base dn only)'; +$lang['standard_ldap_search_filter'] = 'Standard LDAP sökfilter. Exempel: (&(sn=Smith)(givenname=David))';//'Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))'; +$lang['search_filter'] = 'Sökfilter';//'Search Filter'; +$lang['list_of_attrs_to_display_in_results'] = 'En lista med attribut att visa i resultatet (komma-separerad)';// 'A list of attributes to display in the results (comma-separated)'; +$lang['show_attributes'] = 'Visa attribut';//'Show Attributes'; + +// search_form_simple.php +$lang['search_for_entries_whose'] = 'Sök efter poster som:';//'Search for entries whose:'; +$lang['equals'] = 'är lika med';//'equals'; +$lang['starts with'] = 'börjar med';//'starts with'; +$lang['contains'] = 'innehåller';//'contains'; +$lang['ends with'] = 'slutar med';//'ends with'; +$lang['sounds like'] = 'låter som';//'sounds like'; + +// server_info.php +$lang['could_not_fetch_server_info'] = 'Det gick inte att hämta LDAP information från servern.';//'Could not retrieve LDAP information from the server'; +$lang['server_info_for'] = 'Serverinformation för';//'Server info for: '; +$lang['server_reports_following'] = 'Servern rapporterar följande information om sig själv';//'Server reports the following information about itself'; +$lang['nothing_to_report'] = 'Servern har inget att rapportera';//'This server has nothing to report.'; + +//update.php +$lang['update_array_malformed'] = 'update_array är felaktig. Detta kan vara ett phpLDAPadmin-fel. Var vänlig och rapportera det.';// 'update_array is malformed. This might be a phpLDAPadmin bug. Please report it.'; +$lang['could_not_perform_ldap_modify'] = 'Det gick inte att utföra operationen ldap_modify.';//'Could not perform ldap_modify operation.'; + +// update_confirm.php +$lang['do_you_want_to_make_these_changes'] = 'Vill du göra dessa ändringar?';//'Do you want to make these changes?'; +$lang['attribute'] = 'Attribut';//'Attribute'; +$lang['old_value'] = 'Föregående värde';//'Old Value'; +$lang['new_value'] = 'Nytt värde';//'New Value'; +$lang['attr_deleted'] = '[attributet borttaget]';//'[attribute deleted]'; +$lang['commit'] = 'Bekräfta';//'Commit'; +$lang['cancel'] = 'ångra';//'Cancel'; +$lang['you_made_no_changes'] = 'Du gjorde inga ändringar';//'You made no changes'; +$lang['go_back'] = 'Gå tillbaka';//'Go back'; + +// welcome.php +$lang['welcome_note'] = 'Navigera med hjälp av menyn till vänster';//'Use the menu to the left to navigate'; +$lang['credits'] = 'Tack till';//'Credits'; +$lang['changelog'] = 'ändringslogg';//'ChangeLog'; +$lang['documentation'] = 'Dokumentation';//'Documentation'; + +// view_jpeg_photo.php +$lang['unsafe_file_name'] = 'Osäkert filnamn';//'Unsafe file name: '; +$lang['no_such_file'] = 'Filen finns inte';//'No such file: '; + +//function.php +$lang['auto_update_not_setup'] = 'Du har slagit på auto_uid_numbers för %s i din konfiguration, + men du har inte specificerat auto_uid_number_mechanism. Var vänlig och rätta till + detta problem.'; + //'You have enabled auto_uid_numbers for %s in your configuration, + //but you have not specified the auto_uid_number_mechanism. Please correct + //this problem.'; +$lang['uidpool_not_set'] = 'Du har specificerat auto_uid_number_mechanism som uidpool + i din konfiguration för server%s, men du specificerade inte + audo_uid_number_uid_pool_dn. Var vänlig och specificera den innan du fortsätter.'; + //'You specified the auto_uid_number_mechanism as uidpool + //in your configuration for server %s, but you did not specify the + //audo_uid_number_uid_pool_dn. Please specify it before proceeding.'; +$lang['uidpool_not_exist'] = 'Det ser ut som om den uidPool du specificerade i din konfiguration (%s) + inte existerar.'; + // 'It appears that the uidPool you specified in your configuration (%s) + // does not exist.'; +$lang['specified_uidpool'] = 'Du specificerade auto_uid_number_mechanism som search i din + konfiguration för server%s, men du specificerade inte + auto_uid_number_search_base. Var vänlig och specificera den innan du fortsätter.'; + // 'You specified the auto_uid_number_mechanism as search in your + //configuration for server %s, but you did not specify the + //auto_uid_number_search_base. Please specify it before proceeding.'; +$lang['auto_uid_invalid_value'] = 'Du specificerade ett ogiltigt värde för auto_uid_number_mechanism (%s) + i din konfiguration. Endast uidpool och search are giltiga. + Var vänlig och rätta till detta problem.'; + //'You specified an invalid value for auto_uid_number_mechanism (%s) + //in your configration. Only uidpool and search are valid. + //Please correct this problem.'; +$lang['error_auth_type_config'] = 'Fel: Du har ett fel i din konfigurationsfil. De enda tillåtna värdena + för auth_type i $servers-sektionen är \'config\' and \'form\'. Du skrev in \'%s\', + vilket inte är tillåtet. '; + //'Error: You have an error in your config file. The only two allowed values + //for auth_type in the $servers section are \'config\' and \'form\'. You entered \'%s\', + //which is not allowed. '; +$lang['php_install_not_supports_tls'] = 'Din PHP-installation stödjer inte TLS';//'Your PHP install does not support TLS'; +$lang['could_not_start_tls'] = 'Det gick inte att starta TLS.
Var vänlig och kontrollera din LDAP-serverkonfiguration.';//'Could not start TLS.
Please check your LDAP server configuration.'; +$lang['auth_type_not_valid'] = 'Du har ett fel i din konfigurationsfil. auth_type %s är inte tillåten.';//'You have an error in your config file. auth_type of %s is not valid.'; +$lang['ldap_said'] = 'LDAP sa: %s

';//'LDAP said: %s

'; +$lang['ferror_error'] = 'Fel';'Error'; +$lang['fbrowse'] = 'titta';//'browse'; +$lang['delete_photo'] = 'Ta bort foto';//'Delete Photo'; +$lang['install_not_support_blowfish'] = 'Din PHP-installation stödjer inte blowfish-kryptering.';// 'Your PHP install does not support blowfish encryption.'; +$lang['install_no_mash'] = 'Din PHP-installation har inte funktionen mash(). Det går inte att göra SHA hashes.';//'Your PHP install does not have the mhash() function. Cannot do SHA hashes.'; +$lang['jpeg_contains_errors'] = 'JPEG-fotot innehåller fel
';//'jpegPhoto contains errors
'; +$lang['ferror_number'] = 'Felnummer: %s (%s)

';//'Error number: %s (%s)

'; +$lang['ferror_discription'] ='Beskrivning: %s

';//'Description: %s

'; +$lang['ferror_number_short'] = 'Felnummer: %s

';//'Error number: %s

'; +$lang['ferror_discription_short'] = 'Beskrivning: (ingen beskrivning tillgänglig)
';//'Description: (no description available)
'; +$lang['ferror_submit_bug'] = 'är det här ett phpLDAPadmin-fel? Om så är fallet, var vänlig och rapportera det.'; +//'Is this a phpLDAPadmin bug? If so, please report it.'; +$lang['ferror_unrecognized_num'] = 'Okänt felnummer';//'Unrecognized error number: '; +$lang['ferror_nonfatil_bug'] = '
+
+ Du har hittat en icke-kritisk phpLDAPadmin bug!
Fel:%s (%s)
Fil:%s rad %s, anropande %s
Versioner:PLA: %s, PHP: %s, SAPI: %s +
Web server:%s
+ Var vänlig och rapportera felet genom att klicka här.

'; + + //'
+ //
+ //You found a non-fatal phpLDAPadmin bug!
Error:%s (%s)
File:%s line %s, caller %s
Versions:PLA: %s, PHP: %s, SAPI: %s + //
Web server:%s
+ //Please report this bug by clicking here.

'; + +$lang['ferror_congrats_found_bug'] = 'Gratulerar! Du har hittat en bug i phpLDAPadmin.

+ + + + + + + + + + +
Fel:%s
Nivå:%s
Fil:%s
Rad:%s
Anropare:%s
PLA Version:%s
PHP Version:%s
PHP SAPI:%s
Web server:%s
+
+ Var vänlig och rapportera den här buggen genom att klicak här nedan!'; + +//'Congratulations! You found a bug in phpLDAPadmin.

+// +// +// +// +// +// +// +// +// +// +//
Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA Version:%s
PHP Version:%s
PHP SAPI:%s
Web server:%s
+//
+//Please report this bug by clicking below!'; + + +//ldif_import_form +$lang['import_ldif_file_title'] = 'Importera LDIF-fil';//'Import LDIF File'; +$lang['select_ldif_file'] = 'Välj en LDIF-fil:';//'Select an LDIF file:'; +$lang['select_ldif_file_proceed'] = 'Fortsätt >>';//'Proceed >>'; + +//ldif_import +$lang['add_action'] = 'Lägger till...';//'Adding...'; +$lang['delete_action'] = 'Tar bort...';//'Deleting...'; +$lang['rename_action'] = 'Döper om...';//''Renaming...'; +$lang['modify_action'] = 'ändrar...';//'Modifying...'; + +$lang['failed'] = 'misslyckades';//'failed'; +$lang['ldif_parse_error'] = 'LDIF parsningsfel';//'LDIF Parse Error'; +$lang['ldif_could_not_add_object'] = 'Det gick inte att lägga till objekt';//'Could not add object:'; +$lang['ldif_could_not_rename_object'] = 'Det gick inte att lägga döpa om objekt';//'Could not rename object:'; +$lang['ldif_could_not_delete_object'] = 'Det gick inte att ta bort objekt';//'Could not delete object:'; +$lang['ldif_could_not_modify_object'] = 'Det gick inte att ändra objekt';//'Could not modify object:'; +$lang['ldif_line_number'] = 'Radnummer';//'Line Number:'; +$lang['ldif_line'] = 'Rad:';//'Line:'; +?> diff --git a/lang/zz.php b/lang/zz.php new file mode 100644 index 0000000..e847169 --- /dev/null +++ b/lang/zz.php @@ -0,0 +1,13 @@ + diff --git a/lang/zzz.php b/lang/zzz.php new file mode 100644 index 0000000..522dfef --- /dev/null +++ b/lang/zzz.php @@ -0,0 +1,13 @@ + diff --git a/ldap_error_codes.txt b/ldap_error_codes.txt index 45e7341..03fb07d 100644 --- a/ldap_error_codes.txt +++ b/ldap_error_codes.txt @@ -1,5 +1,6 @@ 0x00 LDAP_SUCCESS "The operation completed successfully." -0x01 LDAP_OPERATIONS_ERROR "An operations error occurred." +0x01 LDAP_OPERATIONS_ERROR "An operations error occurred. This is + typically the result of an internal error on your LDAP server." 0x02 LDAP_PROTOCOL_ERROR "A protocol violation was detected." 0x03 LDAP_TIMELIMIT_EXCEEDED "The operation timed out waiting to complete." 0x04 LDAP_SIZELIMIT_EXCEEDED "The LDAP sever refused to serve such a large result set." @@ -36,8 +37,8 @@ 0x24 LDAP_ALIAS_DEREF_PROBLEM "A problem was encountereed when dereferencing an alias" 0x30 LDAP_INAPPROPRIATE_AUTH "Inappropriate authentication was - specifiedi (e.g., LDAP_AUTH_SIMPLE was - specified and the entry does not have + specified (e.g. LDAP_AUTH_SIMPLE was + specified and the entry does not have a userPassword attribute)." 0x31 LDAP_INVALID_CREDENTIALS "Incorrect login DN and/or password." 0x32 LDAP_INSUFFICIENT_ACCESS "You do not have sufficient permissions @@ -48,17 +49,23 @@ 0x36 LDAP_LOOP_DETECT "A loop was detected." 0x3C LDAP_SORT_CONTROL_MISSING "" 0x3D LDAP_INDEX_RANGE_ERROR "" -0x40 LDAP_NAMING_VIOLATION "A naming violation occurred." +0x40 LDAP_NAMING_VIOLATION "A naming violation occurred. This usually + means that you tried to change the value of an attribute that is used in the + DN. For example, if you change the 'cn' value of an entry whose DN is 'cn=Bob + Jones,dc=example,dc=com', you must also rename the entry to reflect the + change." 0x41 LDAP_OBJECT_CLASS_VIOLATION "You tried to perform an operation that would cause an undefined attribute to exist or that would remove a required attribute, given the current list - of ObjectClasses." -0x42 LDAP_NOT_ALLOWED_ON_NONLEAF "The entry you tried to operate on has children. (usually this means you + of ObjectClasses. This can also occur if you do not + specify a structural objectClass when creating an entry, or if you specify + more than one structural objectClass." +0x42 LDAP_NOT_ALLOWED_ON_NONLEAF "The entry you tried to operate on has children. Usually this means you tried to delete or rename the entry, which you cannot do to an entry - with children)." + with children." 0x43 LDAP_NOT_ALLOWED_ON_RDN "You cannot preform that operation on a the relative distinguished name (RDN) of an object." -0x44 LDAP_ALREADY_EXISTS "The object already exists (usually you are trying to create a new object - on top of an existing one)" +0x44 LDAP_ALREADY_EXISTS "The object already exists. Usually you are trying to create a new object + on top of an existing one." 0x45 LDAP_NO_OBJECT_CLASS_MODS "ObjectClass modifications are not allolwed." 0x46 LDAP_RESULTS_TOO_LARGE "" @@ -74,7 +81,7 @@ 0x58 LDAP_USER_CANCELLED "The user cancelled the LDAP operation." 0x59 LDAP_PARAM_ERROR "An ldap routine was called with a bad parameter." -0x5a LDAP_NO_MEMORY "An memory allocation (e.g., malloc(3) +0x5a LDAP_NO_MEMORY "A memory allocation (e.g., malloc(3) or other dynamic memory allocator) call failed in an ldap library rou- tine." diff --git a/ldif_export.php b/ldif_export.php deleted file mode 100644 index cd9ff4f..0000000 --- a/ldif_export.php +++ /dev/null @@ -1,136 +0,0 @@ -"; -//print_r( $objects ); -//exit; - -$rdn = get_rdn( $dn ); -$friendly_rdn = get_rdn( $dn, 1 ); - -switch( $format ) { - case 'win': $br = "\r\n"; break; - case 'mac': $br = "\r"; break; - case 'unix': - default: $br = "\n"; break; -} - -if( ! $objects ) - pla_error( "Search on dn (" . htmlspecialchars($dn) . ") came back empty" ); - -// define the max length of a ldif line to 76 -// as it is suggested (implicitely) for (some) binary -// attributes in rfc 2849 (see note 10) - -define("MAX_LDIF_LINE_LENGTH",76); - -header( "Content-type: application/download" ); -header( "Content-Disposition: filename=$friendly_rdn.ldif" ); -header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); -header( "Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT" ); -header( "Cache-Control: post-check=0, pre-check=0", false ); - -echo "version: 1$br$br"; -echo "# LDIF Export for: " . utf8_decode( $dn ) . "$br"; -echo "# Generated by phpLDAPadmin on " . date("F j, Y g:i a") . "$br"; -echo "# Server: " . utf8_decode( $server_name ) . " ($server_host)$br"; -echo "# Search Scope: $scope$br"; -echo "# Total entries: " . count( $objects ) . "$br"; -echo $br; - -$counter = 0; -foreach( $objects as $dn => $attrs ) -{ - $counter++; - unset( $attrs['dn'] ); - unset( $attrs['count'] ); - - - // display "# Entry 3: cn=test,dc=example,dc=com..." - $title_string = "# Entry $counter: " . utf8_decode( $dn ); - if( strlen( $title_string ) > MAX_LDIF_LINE_LENGTH-3 ) - $title_string = substr( $title_string, 0, MAX_LDIF_LINE_LENGTH-3 ) . "..."; - echo "$title_string$br"; - - // display the DN - if( is_safe_ascii( $dn ) ) - multi_lines_display("dn: $dn"); - else - multi_lines_display("dn:: " . base64_encode( $dn )); - - // display all the attrs/values - foreach( $attrs as $attr => $val ) { - if( is_array( $val ) ) { - foreach( $val as $v ) { - if( is_safe_ascii( $v ) ) { - multi_lines_display("$attr: $v"); - } else { - multi_lines_display("$attr:: " . base64_encode( $v )); - } - } - } else { - $v = $val; - if( is_safe_ascii( $v ) ) { - multi_lines_display("$attr: $v"); - } else { - multi_lines_display("$attr:: " . base64_encode( $v )); - } - } - } - echo $br; -} - -function is_safe_ascii( $str ) -{ - for( $i=0; $i 127 ) - return false; - return true; -} - - -function multi_lines_display($str){ - global $br; - - $length_string = strlen($str); - $max_length = MAX_LDIF_LINE_LENGTH; - - while ($length_string > $max_length){ - echo substr($str,0,$max_length).$br." "; - $str= substr($str,$max_length,$length_string); - $length_string = strlen($str); - - // need to do minus one to align on the right - // the first line with the possible following lines - // as these will have an extra space - $max_length = MAX_LDIF_LINE_LENGTH-1; - } - echo $str."".$br; -} - - -?> diff --git a/ldif_functions.php b/ldif_functions.php index cbde523..2ad6595 100644 --- a/ldif_functions.php +++ b/ldif_functions.php @@ -1,25 +1,24 @@ dn=$dn; $this->changeType=$changeType; $this->attributes=$atts; } + /** + * Return the dn of the entry + * + * @return String the dn of the entry + */ function getDn(){ return $this->dn; } @@ -47,10 +50,8 @@ class LdifEntry{ /** * Setter method for the distinguished name * - * @return String the distinguished name of the entry + * @param String $dn the distinguished name of the entry */ - - function setDn($dn){ $this->dn = $dn; } @@ -58,34 +59,30 @@ class LdifEntry{ /** * Getter method for the change type * - * @param String $changeType the changetype - * + * @return String the change type of the entry */ - function getChangeType(){ return $this->changeType; } /** - * Setter method for the distinguished nae + * Setter method for the change type of the entry * - * @return String the distinguished name of the entry + * @param String $changeType the change type of the entry */ - function setChangeType($changeType){ - $this->changeType = $changeType; + $this->changeType = $changeType; } - + /** * Add the attributes to the entry * + * @param String[][] $atts the attributes of the entry */ - function setAttributes($atts){ $this->attributes = $atts; } - /** * Get the attributes of the entry * @@ -98,17 +95,14 @@ class LdifEntry{ } /** - * this exception is similar to the one in LdifReader + * This exception is similar to the one in LdifReader * Should be remove latter * see comment for the class Ldif_LdapEntryReader - * - * - * */ class LdifEntryReaderException{ - + var $lineNumber; var $currentLine; var $message; @@ -126,65 +120,58 @@ class LdifEntryReaderException{ $this->lineNumber = $lineNumber; $this->currentLine =$currentLine; $this->message = $message; - } } - /** * Class in charge of reading a paricular entry - * Strictly speaking,the fonction of this class - * could go to LdapLdifReader - * - * another reason to delegate to this class - * is that futur change for net_ldap will have to be done only - * in this class - * After we can put it back to the main reader */ - - class LdifEntryReader{ //the entry var $entry; + + // the lines of the entry fetch from the file var $lines; + + // the dn of the entry var $dn=""; - var $_error = 0; - var $_currentLineNumber=1; + + // error flag + var $_error; + + // the current line number of the entry; + var $_currentLineNumber; + /** * Constructor of the LdifEntryReader * * @param String[] $lines the line of the entry */ - - - function LdifEntryReader(&$lines){ + function LdifEntryReader( &$lines ){ $this->lines = &$lines; -//need to change the following lines -// $this->_currentLineNumber = $currentLineNumber- count($this->lines); - $dn=$this->_getDnValue(); - $changeType = $this->_readChangeType(); - $this->entry = new LdifEntry($dn,$changeType); + $this->_currentLineNumber = 1; + $this->_error = 0; } /** * Read the change type action associated with the entry - * Default action is add - * @return String the change type action of the entry * + * @return String the change type action of the entry */ - - function _readChangeType(){ $changeType ="add"; $arr = array(); + + // no lines after the dn one if(count($this->lines)==0){ $this->lines[0] = ""; $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"Missing attibutes or changetype attribute for entry",new LdifEntry($this->dn))); } - if(ereg("changetype:[ ]*(delete|add|modrdn|moddn|modify)",$this->lines[0],$arr)){ + // get the change type of the entry + elseif(ereg("changetype:[ ]*(delete|add|modrdn|moddn|modify)",$this->lines[0],$arr)){ $changeType = $arr[1]; array_shift($this->lines); $this->_currentLineNumber++; @@ -195,34 +182,28 @@ class LdifEntryReader{ /** * Check if the distinguished name is base 64 encoded * - * @return bool true if the dn is base 64 encoded + * @return boolean true if the dn is base 64 encoded, false otherwise */ - function _isDnBase64Encoded($dn){ return ereg("dn::",$dn)?1:0; } - /** * Return the base64 decoded value of an attribute * * @param $attr the attribute to be decoded * @return String base64 decoded value of an attribute */ - function _getBase64DecodedValue($attr){ return base64_decode(trim($attr)); } - /** * Fetch the dn value from a line of the ldif file * * @param String $currentDnLine line with a distinguished name * @return the value of the distinguished name */ - - function _getDnValue(){ $currentDnLine=$this->lines[0]; if($this->_isDNBase64Encoded($currentDnLine)){ @@ -230,29 +211,48 @@ class LdifEntryReader{ }else{ $currentDnValue = substr($currentDnLine,3,strlen($currentDnLine)-1); } - // echo $this->_currentLineNumber; + // switch to the next line array_shift($this->lines); $this->_currentLineNumber++; return trim($currentDnValue); } + /** + * Check if the dn line is valid + * + * @return boolean true if the dn is valid, false otherwise. + */ + function isValidDn(){ + return ereg("^dn:",$this->lines[0])?1:0; + } + /** * Return the entry read from the ldif lines * - * + * @return LdifEntry the entry */ - - function getEntry(){ + global $lang; - $changeType = $this->entry->getChangeType(); + // the dn is not valid, throw the exception and return the entry with the non valid dn + if (! $this->isValidDn() ){ + $dn = $this->lines[0]; + $changeType = $this->_readChangeType(); + //For the moment, overwrite the exception + $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],$lang['valid_dn_line_required'],new LdifEntry($this->dn))); + return new LdifEntry( $dn , $changeType ); + } + + $dn=$this->_getDnValue(); + $changeType = $this->_readChangeType(); + $this->entry = new LdifEntry($dn,$changeType); + if($changeType=="add"){ $this->_getAddAttributes(); } elseif($changeType=="delete"){ //do nothing } - // $atts = $this->entry->getAttributes(); elseif($changeType=="modrdn"||$changeType=="moddn"){ $this->_getModrdnAttributes(); } @@ -260,19 +260,15 @@ class LdifEntryReader{ $this->_getModifyAttributes(); } return $this->entry; - } /** * Checked if the parsing of the entry has raised some exception * * @return bool true if the reading of the entry raised some exceptions, else otherwise. - * */ - function hasRaisedException(){ return $this->_error; - } /** @@ -287,7 +283,7 @@ class LdifEntryReader{ $this->_error=1; $this->_ldifEntryReaderException= $ldifEntryReaderException; } - + /** * Return the exception handler of the entry Reader @@ -302,12 +298,7 @@ class LdifEntryReader{ /** * Method to retrieve the attribute value of a ldif line, * and get the base 64 decoded value if it is encoded - * - * - * */ - - function _getAttributeValue($attributeValuePart){ $attribute_value=""; if(substr($attributeValuePart,0,1)==":"){ @@ -343,6 +334,9 @@ class LdifEntryReader{ } + /** + * Build the attributes array when the change type is add. + */ function _getAddAttributes(){ if(count($this->lines)==0){ @@ -370,18 +364,18 @@ class LdifEntryReader{ // $this->entry->add($attrs); array_shift($this->lines); $this->_currentLineNumber++; - } else{ $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"Attribute not well formed",$this->entry)); //jetter l'exception } - } - } - + + /** + * Build the attributes array for the entry when the change type is modify + */ function _getModifyAttributes(){ if(count($this->lines)==0){ $this->lines[0]=""; @@ -400,72 +394,66 @@ class LdifEntryReader{ if(count($attribute)==2){ $action_attribute = trim($attribute[0]); $action_attribute_value =trim($attribute[1]); - if($action_attribute != "add" &&$action_attribute!= "delete" &&$action_attribute !=="replace"){ + + if($action_attribute != "add" && $action_attribute != "delete" && $action_attribute !="replace"){ $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"The attribute name should be add, delete or replace",$this->entry)); } // put the action attribute in the array $this->entry->attributes[$numberModification] = array(); $this->entry->attributes[$numberModification][$action_attribute] = $this->_getAttributeValue($action_attribute_value); - + $this->entry->attributes[$numberModification][$action_attribute_value] = array(); + // fetching the attribute for the following line array_shift($this->lines); - $currentLine=&$this->lines[0]; $this->_currentLineNumber++; - // while there is attributes for this entry - while(trim($currentLine)!="-"&&trim($currentLine)!=""&&$this->_error!=1 && $new_entry_mod !=1){ - if(ereg(":",$currentLine)){ - //get the position of the character ":" - $pos = strpos($currentLine,":"); - - //get the description of the attribute - $attribute_name = substr($currentLine,0, $pos); - - // get the value part of the attribute - $attribute_value_part = trim(substr($currentLine,$pos+1,strlen($currentLine))); - $attribute_value = $this->_getAttributeValue($attribute_value_part); + while(trim($currentLine)!="-" && $this->_error!=1 && count($this->lines)!=0 ){ - - // need to handle the special case when whe add an new attribute - if($attribute_name != "add"){ - $this->entry->attributes[$numberModification][$attribute_name][]=$this->_getAttributeValue($attribute_value); - if(count($this->lines)>1){ - array_shift($this->lines); - $this->_currentLineNumber++; - $currentLine = $this->lines[0]; - } - else{ - $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"Missing - ?",$this->entry)); - } + // if there is a valid line + if(ereg(":",$currentLine)){ + //get the position of the character ":" + $pos = strpos($currentLine,":"); + //get the name of the attribute to modify + $attribute_name = substr($currentLine,0, $pos); + + //check that it correspond to the one specified before + if ($attribute_name == $action_attribute_value){ + + // get the value part of the attribute + $attribute_value_part = trim(substr($currentLine,$pos+1,strlen($currentLine))); + $attribute_value = $this->_getAttributeValue($attribute_value_part); + $this->entry->attributes[$numberModification][$attribute_name][]=$attribute_value; + array_shift($this->lines); + $this->_currentLineNumber++; + + if(count($this->lines)!=0) + $currentLine = &$this->lines[0]; } else{ - // flag set to indicate that we need to build an new attribute array and leave the inner while loop - $new_entry_mod = 1; + $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"The attribute to modify doesn't match the one specified by the ".$action_attribute." attribute.",$this->entry)); } } else{ $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"Attribute is not valid",$this->entry)); } - - }//fin while - $this->_currentLineNumber++; - - //if we encountered the flag new_entry_mod(=1), rebuild an new array and therefore dot not shift - if($new_entry_mod!=1){ - + }// end inner while + + // we get a "-" charachter, we remove it from the array + if ($currentLine == "-"){ array_shift($this->lines); + $this->_currentLineNumber++; } $numberModification++; } - else{ - $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"Attribute is not valid",$this->entry)); - } - }// end while - } - + } + } + /** + * Build the attributes for the entry when the change type is modrdn + */ + function _getModrdnAttributes(){ $attrs = array(); @@ -507,7 +495,6 @@ $arr=array(); else{ $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"the attribute name should be newsuperior",$this->entry)); } - } else{ //as the first character is not ,,we "can write it this way for teh moment" @@ -518,8 +505,6 @@ $arr=array(); $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"Container is null",$this->entry)); } } - - } else{ $this->setLdifEntryReaderException(new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0],"a valid deleteoldrdn attribute should be specified",$this->entry)); @@ -535,10 +520,8 @@ $arr=array(); /** * Exception which can be raised during processing the ldif file - * */ - class LdifReaderException{ var $lineNumber; @@ -553,8 +536,6 @@ class LdifReaderException{ * @param String currentLine the line wich raised an exception * @param String the message associated the exception */ - - function LdifReaderException($lineNumber,$currentLine,$message){ $this->lineNumber = $lineNumber; $this->currentLine =$currentLine; @@ -562,6 +543,9 @@ class LdifReaderException{ } } +/** + * Helper base class to read file. + */ class FileReader{ @@ -590,13 +574,11 @@ class FileReader{ */ function eof(){ - return feof($this->_fp); + return @feof($this->_fp); } /** * Helper method to switch to the next line - * - * @static */ function _nextLine(){ @@ -622,19 +604,17 @@ class FileReader{ function _isBlankLine(){ return(trim($this->_currentLine)=="")?1:0; } - + + /** + * Close the handler + */ function close(){ return @fclose($this->_fp); - } - - } /** * Main parser of the ldif file - * - * @package Ldap */ class LdifReader extends FileReader{ @@ -658,6 +638,10 @@ class LdifReader extends FileReader{ var $_warningVersion; var $_dnLineNumber; + + // continuous mode operation flag + var $continuous_mode; + /** * Private constructor of the LDIFReader class. * Marked as private as we need to instantiate the class @@ -675,121 +659,106 @@ class LdifReader extends FileReader{ //need to change this one $this->_currentEntry = new LdifEntry(); } - + /** * Constructor of the class * * @param String $path2File path of the ldif file to read + * @param boolean $continuous_mode 1 if continuous mode operation, 0 otherwise */ - function LdifReader($path2File){ - parent::FileReader($path2File); - $this->_LdifReader(); + function LdifReader( $path2File , $continuous_mode = 0 ){ + parent::FileReader( $path2File ); + $this->continuous_mode = $continuous_mode; + $this->_LdifReader(); } - + /** * Returns the lines that generated the Ldif Entry. * * @return String[] The lines from the entry. */ - function getCurrentLines(){ return $this->_currentLines; } - - + /** * Check if it's a ldif comment line. * * @return bool true if it's a comment line,false otherwise */ - function _isCommentLine(){ return substr(trim($this->_currentLine),0,1)=="#"?1:0; } - - + /** * Check if the current line is a line containing the distinguished * name of an entry. * * @return bool true if the line contains a dn line, false otherwise. */ - function _isDnLine(){ return ereg("^dn:",$this->_currentLine)?1:0; } - + /** * Return the current entry object * * @return Ldap_Ldif_entry the current ldif entry - * */ - function getCurrentEntry(){ - return $this->_currentEntry; - } /** * Get the lines of the next entry * * @return String[] the lines (unfolded) of the next entry - * */ - function nextLines(){ $endEntryFound=0; //free the array (instance member) unset($this->_currentLines); + + // reset the error state + $this->_error = 0; - if($this->_error!=1){ + if( $this->_hasMoreEntries() && !$this->eof() ){ - //if we found a valid dn line go on - if($this->_hasValidDnLine()&&!$this->eof() && $this->_error!=1){ + //the first line is the dn one + $this->_currentLines[0]= trim($this->_currentLine); + + $count=0; + + // while we end on a blank line, fetch the attribute lines + while(!$this->eof() && !$endEntryFound ){ + //fetch the next line + $this->_nextLine(); - //the first line is the dn one - $this->_currentLines[0]= trim($this->_currentLine); + // if the next line begin with a space,we append it to the current row + // else we push it into the array (unwrap) - $count=0; - - // while we end on a blank line, fetch the attribute lines - while(!$this->eof() && !$endEntryFound && !$this->_ldifHasError()){ - //fetch the next line - $this->_nextLine(); - - // if the next line begin with a space,we append it to the current row - // else we push it into the array (unwrap) - - if(substr($this->_currentLine,0,1)==" "){ - $this->_currentLines[$count].=trim($this->_currentLine); - } - elseif(substr($this->_currentLine,0,1)=="#"){ - //do nothing - // echo $this->_currentLine; - } - elseif(trim($this->_currentLine)!=""){ - $this->_currentLines[++$count]=trim($this->_currentLine); - } - - + if(substr($this->_currentLine,0,1)==" "){ + $this->_currentLines[$count].=trim($this->_currentLine); + } + elseif(substr($this->_currentLine,0,1)=="#"){ + //do nothing + // echo $this->_currentLine; + } + elseif(trim($this->_currentLine)!=""){ + $this->_currentLines[++$count]=trim($this->_currentLine); + } else{ $endEntryFound=1; } - }//end while - //return the ldif entry array - return $this->_currentLines; - } - else{ - return false; - } - + }//end while + //return the ldif entry array + return $this->_currentLines; + } + else{ + return false; } - } - /** * Check if the ldif version is present in the ldif * @@ -815,49 +784,38 @@ class LdifReader extends FileReader{ } else{ $this->_warningVersion=1; - $this->_warningMessage = "No version found - assuming 1"; + global $lang; + $this->_warningMessage = $lang['warning_no_ldif_version_found']; $ldifLineFound=1; } - }// end while loop return $this->_warningVersion; } - + /** - * Private method to check if we have a valid dn line + * Private method to check if there is more entries in the file * - * - * return bool true if a valid dn line is found false otherwise. + * @return boolean true if an entry was found, false otherwise. */ - - - function _hasValidDnLine(){ - $dn_found=0; - while(!$this->_ldifHasError() && !$this->eof() && !$dn_found ){ - - //if it's a comment or blank line,switch to the next line - if($this->_isCommentLine() || $this->_isBlankLine()){ - //debug usage - // echo $this->_currentLineNumber." - " .($this->_isCommentLine()?"comment":"blank line\n")."
"; - $this->_nextLine(); - } - // case where a line with a distinguished name is found - elseif($this->_isDnLine()){ - $this->_currentDnLine = $this->_currentLine; - $this->dnLineNumber = $this->_currentLineNumber; - $dn_found=1; - //echo $this->_currentLineNumber." - ".$this->_currentLine."
"; - } - else{ - $this->setLdapLdifReaderException(new LdifReaderException($this->_currentLineNumber,$this->_currentLine,"A valid dn line is required")); - } - } - return $dn_found; + function _hasMoreEntries(){ + $entry_found = 0; + while( !$this->eof() && !$entry_found ){ + //if it's a comment or blank line,switch to the next line + if( $this->_isCommentLine() || $this->_isBlankLine() ){ + //debug usage + // echo $this->_currentLineNumber." - " .($this->_isCommentLine()?"comment":"blank line\n")."
"; + $this->_nextLine(); + } + else{ + $this->_currentDnLine = $this->_currentLine; + $this->dnLineNumber = $this->_currentLineNumber; + $entry_found=1; + } + } + return $entry_found; } - - - + /** * Associate the ldif reader with a exception which occurs during * proceesing the file. @@ -865,11 +823,10 @@ class LdifReader extends FileReader{ * * @param Ldap_LdifReaderException $ldifReaderException */ - - function setLdapLdifReaderException($ldifReaderException){ $this->_ldifReaderException= $ldifReaderException; - $this->done(); + if( !$this->continuous_mode ) + $this->done(); $this->_error=1; } @@ -878,7 +835,6 @@ class LdifReader extends FileReader{ * * @return Ldap_ldifReaderException */ - function getLdapLdifReaderException(){ return $this->_ldifReaderException; } @@ -889,8 +845,6 @@ class LdifReader extends FileReader{ * * @return true if an error was encountered, false otherwise */ - - function _ldifHasError(){ return $this->_error; } @@ -915,17 +869,15 @@ class LdifReader extends FileReader{ } /** - * Return an entry from the ldif file - * wrapper upon the NextLines method - * + * Return a ldif entry object + * + * @return LdifEntry the entry object buid from the lines of the ldif file */ function readEntry(){ - if($lines = $this->nextLines()){ $ldifEntryReader = new LdifEntryReader($lines); - //fetch entry $entry = $ldifEntryReader->getEntry(); $this->_currentEntry = $entry; @@ -934,28 +886,26 @@ class LdifReader extends FileReader{ $exception = $ldifEntryReader->getLdifEntryReaderException(); $faultyLineNumber = $this->dnLineNumber + $exception->lineNumber - 1; $this->setLdapLdifReaderException(new LdifReaderException($faultyLineNumber,$exception->currentLine,$exception->message)); - return false; - } - else{ - return $entry; + + if ( ! $this->continuous_mode ) + return 0; } + return $entry; } + else + return false; } function getWarningMessage(){ return $this->_warningMessage; - } } /** * Helper class to write entries into the ldap server - * - * */ - class LdapWriter{ var $ldapConnexion; @@ -963,18 +913,29 @@ class LdapWriter{ /** * Constructor - * - * */ function LdapWriter(&$conn){ $this->ldapConnexion = &$conn; } + /** + * Add a new entry to the ldap server + * + * @param LdifEntry $entry the entry to add + * @return true in case of success, false otherwise + */ function ldapAdd($entry){ return @ldap_add($this->ldapConnexion,$entry->dn,$entry->attributes); } + + /** + * Modify an entry + * + * @param LdifEntry $entry the entry to add + * @return true in case of success, false otherwise + */ function ldapModify($entry){ $changeType = $entry->getChangeType(); @@ -1016,7 +977,12 @@ class LdapWriter{ } return $this->_writeError; } - + + /** + * Close the connection to the ldap server + * + * @return boolean true in case of success, false otherwise + */ function ldapClose(){ return @ldap_close($this->ldapConnexion); } diff --git a/ldif_import.php b/ldif_import.php index 472ba5a..fbbab30 100644 --- a/ldif_import.php +++ b/ldif_import.php @@ -1,4 +1,6 @@ - 0 or pla_error( "Uploaded file is empty." ); -check_server_id( $server_id ) or pla_error( "Bad server_id: " . htmlspecialchars( $server_id ) ); -have_auth_info( $server_id ) or pla_error( "Not enough information to login to server. Please check your configuration." ); +is_array( $_FILES['ldif_file'] ) or pla_error( $lang['missing_uploaded_file'] ); +file_exists( $file ) or pla_error( $lang['no_ldif_file_specified'] ); +$file_len > 0 or pla_error( $lang['ldif_file_empty'] ); +check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] ); +have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] ); -include 'header.php'; ?> +include './header.php'; ?> -

Import LDIF File

+

- Server: - File: - ( bytes) + : + : + ()


@@ -61,10 +64,11 @@ $actionErrorMsg['moddn']= $lang['ldif_could_not_rename_object']; $actionErrorMsg['modify']= $lang['ldif_could_not_modify_object']; // get the connection -$ds = pla_ldap_connect( $server_id ) or pla_error( "Could not connect to LDAP server" ); +$ds = pla_ldap_connect( $server_id ); +pla_ldap_connection_is_error( $ds ); //instantiate the reader -$ldifReader = new LdifReader($file); +$ldifReader = new LdifReader($file,$continuous_mode); //instantiate the writer $ldapWriter = new LdapWriter($ds); @@ -73,28 +77,54 @@ $ldapWriter = new LdapWriter($ds); if(!$ldifReader->hasVersionNumber()){ display_warning($ldifReader->getWarningMessage()); } +$i=0; +// if .. else not mandatory but should be easier to maintain +if( $continuous_mode ){ + while( $ldifReader->readEntry() ){ + $i++; + // get the entry. + $currentEntry = $ldifReader->getCurrentEntry(); + $changeType = $currentEntry->getChangeType(); + echo "".$actionString[$changeType]." ".$currentEntry->dn; - + if($ldifReader->hasRaisedException()){ + echo " ".$lang['failed']."
"; + $exception = $ldifReader->getLdapLdifReaderException(); + echo "".$lang['ldif_line_number'].": ".$exception->lineNumber."
"; +echo "".$lang['ldif_line'].": ".$exception->currentLine."
"; +echo "".$lang['desc'].": ".$exception->message."
"; +} + else{ + if($ldapWriter->ldapModify($currentEntry)) + echo " ".$lang['success']."
"; + else{ + echo " ".$lang['failed']."
"; + echo "Error Code: ".ldap_errno($ds)."
"; + echo "".$lang['desc'].": ".ldap_error($ds)."
"; + } + } + if( 0 == $i % 5 ) + flush(); + }// end while +} +else{ //while we have a valid entry, while($entry = $ldifReader->readEntry()){ + $i++; $changeType = $entry->getChangeType(); echo "".$actionString[$changeType]." ".$entry->dn; if($ldapWriter->ldapModify($entry)){ echo " ".$lang['success']."
"; + if( 0 == $i % 5 ) flush(); } else{ echo " ".$lang['failed']."

"; reload_left_frame(); - pla_error( $actionErrorMsg[$changeType]. " " . htmlspecialchars( utf8_decode( $entry->dn ) ), ldap_error( $ds ), ldap_errno( $ds ) ); + pla_error( $actionErrorMsg[$changeType]. " " . htmlspecialchars( $entry->dn ), ldap_error( $ds ), ldap_errno( $ds ) ); } } -// close the file -$ldifReader->done(); - -//close the ldap connection -$ldapWriter->ldapClose(); // if any errors occurs during reading file ,"catch" the exception and display it here. if($ldifReader->hasRaisedException()){ @@ -110,6 +140,12 @@ echo "
"; echo "
"; display_pla_parse_error($exception,$currentEntry); } +} +// close the file +$ldifReader->done(); + +//close the ldap connection +$ldapWriter->ldapClose(); reload_left_frame(); diff --git a/ldif_import_form.php b/ldif_import_form.php index c6e8ae4..4a06201 100644 --- a/ldif_import_form.php +++ b/ldif_import_form.php @@ -1,4 +1,6 @@ - +include './header.php'; ?> @@ -26,15 +28,26 @@ include 'header.php'; ?>

-

+ -
-
- + +
+
+
+ +
+" . $lang['warning_file_uploads_disabled'] . "
"; + else + echo "
" . sprintf( $lang['max_file_size'], ini_get( 'upload_max_filesize' ) ) . "
"; +?> + +
diff --git a/login.php b/login.php index 00caf2e..ba6ccf5 100644 --- a/login.php +++ b/login.php @@ -1,8 +1,9 @@ -', $uid, get_login_string( $server_id ) ); + } else { + // This is a standard login_attr + + // Fake the auth_type of config to do searching. This way, the admin can specify + // the DN to use when searching for the login_attr user. + $servers[$server_id]['auth_type'] = 'config'; + + // search for the "uid" first + set_error_handler( 'temp_login_error_handler' ); + $ds = pla_ldap_connect( $server_id ); + pla_ldap_connection_is_error( $ds ); + restore_error_handler(); + $search_base = isset( $servers[$server_id]['base'] ) && '' != trim( $servers[$server_id]['base'] ) ? + $servers[$server_id]['base'] : + try_to_get_root_dn( $server_id, $ds ); + if (!empty($servers[$server_id]['login_class'])) { + $filter = '(&(objectClass='.$servers[$server_id]['login_class'].')('.$servers[$server_id]['login_attr'].'='.$uid.'))'; + } else { + $filter = $servers[$server_id]['login_attr'].'='.$uid; + } + $sr = @ldap_search($ds, $search_base, $filter, array('dn'), 0, 1); + $result = @ldap_get_entries($ds, $sr); + $dn = isset( $result[0]['dn'] ) ? $result[0]['dn'] : false; + if( ! $dn ) { + pla_error( $lang['bad_user_name_or_password'] ); + } + + // restore the original auth_type + $servers[$server_id]['auth_type'] = $auth_type; + } } +// We fake a 'config' server auth_type to omit duplicated code +$auth_type = $servers[$server_id]['auth_type']; +$servers[$server_id]['auth_type'] = 'config'; +$servers[$server_id]['login_dn'] = $dn; +$servers[$server_id]['login_pass'] = $pass; + // verify that the login is good -$ds = @ldap_connect( $host, $port ); -$ds or pla_error( "Could not connect to '" . htmlspecialchars( $host ) . "' on port '" . htmlentities( $port ) . "'" ); - -// go with LDAP version 3 if possible -@ldap_set_option( $ds, LDAP_OPT_PROTOCOL_VERSION, 3 ); -if( isset( $servers[ $server_id ][ 'tls' ] ) && $servers[ $server_id ][ 'tls' ] == true ) { - function_exists( 'ldap_start_tls' ) or pla_error( - "Your PHP install does not support TLS" ); - ldap_start_tls( $ds ) or pla_error( "Could not start - TLS. Please check your ". - "LDAP server configuration.", ldap_error( $ds ), ldap_errno( $ds ) ); -} - -if( $anon_bind ) - $bind_result = @ldap_bind( $ds ); +if( null == $dn && null == $pass ) + $ds = pla_ldap_connect( $server_id, true, false ); else - $bind_result = @ldap_bind( $ds, $dn, $pass ); + $ds = pla_ldap_connect( $server_id, false, false ); -if( ! $bind_result ) { +if( ! is_resource( $ds ) ) { if( $anon_bind ) - pla_error( "Could not bind anonymously to LDAP server.", ldap_error( $ds ), ldap_errno( $ds ) ); + pla_error( $lang['could_not_bind_anon'] ); else - pla_error( "Bad username/password. Try again" ); + pla_error( $lang['bad_user_name_or_password'] ); } -set_cookie_login_dn( $server_id, $dn, $pass, $anon_bind ) or pla_error( "Could not set cookie!" ); +$servers[$server_id]['auth_type'] = $auth_type; +set_login_dn( $server_id, $dn, $pass, $anon_bind ) or pla_error( $lang['could_not_set_cookie'] ); + +initialize_session_tree(); +$_SESSION['tree'][$server_id] = array(); +$_SESSION['tree_icons'][$server_id] = array(); -// Clear out any pre-existing tree data in the session for this server -session_start(); -if( session_is_registered( 'tree' ) ) - if( isset( $_SESSION['tree'][$server_id] ) ) - unset( $_SESSION['tree'][$server_id] ); -if( session_is_registered( 'tree_icons' ) ) - if( isset( $_SESSION['tree_icons'][$server_id] ) ) - unset( $_SESSION['tree_icons'][$server_id] ); session_write_close(); +include realpath( 'header.php' ); ?> - - - - - - - - - - - - - + +
+
+
+
+
+ + () +
+
+
" . htmlspecialchars( $errstr ) ); +} +?> + diff --git a/login_form.php b/login_form.php index 3c82fa6..ba40328 100644 --- a/login_form.php +++ b/login_form.php @@ -1,28 +1,37 @@ - +$anonymous_bind_allowed = is_anonymous_bind_allowed( $server_id ); + +isset( $servers[ $server_id ][ 'auth_type' ] ) or pla_error( $lang['error_auth_type_config'] ); +$auth_type = $servers[ $server_id ][ 'auth_type' ]; +if( $auth_type != 'cookie' && $auth_type != 'session' ) + pla_error( sprintf( $lang['unknown_auth_type'], htmlspecialchars( $auth_type ) ) ); + +include './header.php'; ?> - + + -
-

Authenticate to server

+


- +
-Warning: This web connection is unencrypted.
+ + + + +
+
@@ -61,20 +75,29 @@ include 'header.php'; ?> + - + + + + + + - - + + - - - - - + -
+ + + diff --git a/logout.php b/logout.php index c04a007..dca6a6b 100644 --- a/logout.php +++ b/logout.php @@ -1,42 +1,44 @@ - - - - - - - - - - -
-
-
- Logged out successfully from
-
- - - - + + + + +
+
+
+
+
+ + + + diff --git a/mass_delete.php b/mass_delete.php index f342769..d4705ed 100644 --- a/mass_delete.php +++ b/mass_delete.php @@ -1,4 +1,6 @@ \n"; -echo "

Mass Deleting

\n"; +echo "

" . $lang['mass_deleting'] . "

\n"; if( $confirmed == true ) { - echo "

Deletion progress on server '$server_name'

\n"; + echo "

" . sprintf( $lang['mass_delete_progress'], $server_name ) . "

\n"; echo "
"; echo "\n"; @@ -54,27 +54,27 @@ if( $confirmed == true ) { $failed_dns = array(); if( ! is_array( $mass_delete ) ) - pla_error( "Malformed mass_delete array" ); + pla_error( $lang['malformed_mass_delete_array'] ); if( count( $mass_delete ) == 0 ) { echo "
"; - echo "
You did not select any entries to delete.
"; + echo "
" . $lang['no_entries_to_delete'] . "
"; die(); } foreach( $mass_delete as $dn => $junk ) { - echo "Deleting " . htmlspecialchars($dn) . "... "; + echo sprintf( $lang['deleting_dn'], htmlspecialchars($dn) ); flush(); if( true === preEntryDelete( $server_id, $dn ) ) { $success = @ldap_delete( $ds, $dn ); if( $success ) { postEntryDelete( $server_id, $dn ); - echo "success.
\n"; + echo " " . $lang['success'] . ".
\n"; $successfully_delete_dns[] = $dn; } else { - echo "failed.\n"; + echo " " . $lang['failed'] . ".\n"; echo "(" . ldap_error( $ds ) . ")
\n"; $failed_dns[] = $dn; } @@ -90,15 +90,15 @@ if( $confirmed == true ) { $total_count = count( $mass_delete ); if( $failed_count > 0 ) { echo "\n"; - echo "$failed_count of $total_count entries failed to be deleted.\n"; + echo sprintf( $lang['total_entries_failed'], $failed_count, $total_count ) . "\n"; } else { echo "\n"; - echo "All entries deleted successfully!\n"; + echo $lang['all_entries_successful'] . "\n"; } // kill the deleted DNs from the tree browser session variable and // refresh the tree viewer frame (left_frame) - if( session_is_registered( 'tree' ) ) + if( array_key_exists( 'tree', $_SESSION ) ) { $tree = $_SESSION['tree']; foreach( $successfully_delete_dns as $dn ) { @@ -124,7 +124,7 @@ if( $confirmed == true ) { } else { $n = count( $mass_delete ); - echo "

Confirm mass delete of $n entries on server '$server_name'

\n"; + echo "

" . sprintf( $lang['confirm_mass_delete'], $n, $server_name ) . "

\n"; ?>
@@ -144,7 +144,7 @@ if( $confirmed == true ) {
-
+
diff --git a/new_attr.php b/new_attr.php deleted file mode 100644 index aefa511..0000000 --- a/new_attr.php +++ /dev/null @@ -1,67 +0,0 @@ - $val ); -$result = @ldap_mod_add( $ds, $dn, $new_entry ); - -if( $result ) - header( "Location: edit.php?server_id=$server_id&dn=$encoded_dn&modified_attrs[]=$encoded_attr" ); -else - pla_error( "Failed to add the attribute.", ldap_error( $ds ) , ldap_errno( $ds ) ); diff --git a/password_checker.php b/password_checker.php new file mode 100644 index 0000000..cf925be --- /dev/null +++ b/password_checker.php @@ -0,0 +1,49 @@ + + +

+ +
+ + + + + + + + + + + + + +
+ + "; + if( password_check( $hash, $check_password) ) + echo "" . $lang['passwords_match'] . ""; + else + echo "" . $lang['passwords_do_not_match'] . ""; + echo ""; + } ?> +
+
+ + diff --git a/purge_cache.php b/purge_cache.php new file mode 100644 index 0000000..a4b3df1 --- /dev/null +++ b/purge_cache.php @@ -0,0 +1,37 @@ + + + +

Purging Caches

+
+
+
+
+ + + +
+ + diff --git a/rdelete.php b/rdelete.php index 90971ac..ba5d9bd 100644 --- a/rdelete.php +++ b/rdelete.php @@ -1,4 +1,6 @@ -\n"; -echo "

Deleting" . htmlspecialchars( $dn) . "

\n"; -echo "

Recursive delete progress

\n"; +echo "

" . sprintf( $lang['deleting_dn'], htmlspecialchars($rdn) ) . "

\n"; +echo "

" . $lang['recursive_delete_progress'] . "

"; echo "

"; echo "\n"; flush(); @@ -44,7 +48,7 @@ if( $del_result ) // kill the DN from the tree browser session variable and // refresh the tree viewer frame (left_frame) - if( session_is_registered( 'tree' ) ) + if( array_key_exists( 'tree', $_SESSION ) ) { $tree = $_SESSION['tree']; @@ -52,7 +56,10 @@ if( $del_result ) if( isset( $tree[$server_id][$dn] ) ) unset( $tree[$server_id][$dn] ); - // search and destroy + // Get a tree in the session if not already gotten + initialize_session_tree(); + + // search and destroy from the tree sesssion foreach( $tree[$server_id] as $tree_dn => $subtree ) foreach( $subtree as $key => $sub_tree_dn ) if( 0 == strcasecmp( $sub_tree_dn, $dn ) ) @@ -68,13 +75,12 @@ if( $del_result ) parent.left_frame.location.reload(); - Object and sub-tree deleted successfully. - ' . htmlspecialchars( $dn ) . '' ); } else { - pla_error( "Could not delete the object: " . htmlspecialchars( $dn ), ldap_error( $ds ), ldap_errno( $ds ) ); + pla_error( sprintf( $lang['could_not_delete_entry'], htmlspecialchars( $dn ) ), ldap_error( $ds ), ldap_errno( $ds ) ); } @@ -83,36 +89,37 @@ exit; function pla_rdelete( $server_id, $dn ) { + global $lang; $children = get_container_contents( $server_id, $dn ); global $ds; $ds = pla_ldap_connect( $server_id ); if( ! is_array( $children ) || count( $children ) == 0 ) { - echo "Deleting " . htmlspecialchars( $dn ) . "..."; + echo "" . sprintf( $lang['deleting_dn'], htmlspecialchars( $dn ) ) . "..."; flush(); if( true === preEntryDelete( $server_id, $dn ) ) if( @ldap_delete( $ds, $dn ) ) { postEntryDelete( $server_id, $dn ); - echo " Success
\n"; + echo " " . $lang['success'] . "
\n"; return true; } else { - pla_error( "Failed to delete dn: " . htmlspecialchars( $dn ), - ldap_error( $ds ), ldap_errno( $ds ) ); + pla_error( sprintf( $lang['failed_to_delete_entry'], htmlspecialchars( $dn ) ), + ldap_error( $ds ), ldap_errno( $ds ) ); } } else { foreach( $children as $child_dn ) { pla_rdelete( $server_id, $child_dn ); } - echo "Deleting " . htmlspecialchars( $dn ) . "..."; + echo "" . sprintf( $lang['deleting_dn'], htmlspecialchars( $dn ) ) . "..."; flush(); if( true === preEntryDelete( $server_id, $dn ) ) if( @ldap_delete( $ds, $dn ) ) { postEntryDelete( $server_id, $dn ); - echo " Success
\n"; + echo " " . $lang['success'] . "
\n"; return true; } else { - pla_error( "Failed to delete dn: " . htmlspecialchars( ( $dn ) ), - ldap_error( $ds ), ldap_errno( $ds ) ); + pla_error( sprintf( $lang['failed_to_delete_entry'], htmlspecialchars( $dn ) ), + ldap_error( $ds ), ldap_errno( $ds ) ); } } diff --git a/refresh.php b/refresh.php index d173d12..10f55a2 100644 --- a/refresh.php +++ b/refresh.php @@ -1,4 +1,6 @@ - $children ) { - $tree[$server_id][$dn] = get_container_contents( $server_id, $dn ); + $tree[$server_id][$dn] = get_container_contents( $server_id, $dn, 0, '(objectClass=*)', get_tree_deref_setting() ); if( is_array( $tree[$server_id][$dn] ) ) { foreach( $tree[$server_id][$dn] as $child_dn ) $tree_icons[$server_id][$child_dn] = get_icon( $server_id, $child_dn ); diff --git a/rename.php b/rename.php index 001c08d..236cd5c 100644 --- a/rename.php +++ b/rename.php @@ -1,4 +1,6 @@ - 0 ) - pla_error( "You cannot rename an entry which has children entries - (eg, the rename operation is not allowed on non-leaf entries)" ); + pla_error( $lang['non_leaf_nodes_cannot_be_renamed'] ); -check_server_id( $server_id ) or pla_error( "Bad server_id: " . htmlspecialchars( $server_id ) ); -have_auth_info( $server_id ) or pla_error( "Not enough information to login to server. Please check your configuration." ); +check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] ); +have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] ); -$ds = pla_ldap_connect( $server_id ) or pla_error( "Could not connect to LDAP sever" ); +$ds = pla_ldap_connect( $server_id ); +pla_ldap_connection_is_error( $ds ); $container = get_container( $dn ); $new_dn = $new_rdn . ',' . $container; if( $new_dn == $dn ) - pla_error( "You did not change the RDN" ); + pla_error( $lang['no_rdn_change'] ); $dn_attr = explode( '=', $dn ); $dn_attr = $dn_attr[0]; @@ -45,6 +47,8 @@ $old_dn_value = pla_explode_dn( $dn ); $old_dn_value = explode( '=', $old_dn_value[0], 2 ); $old_dn_value = $old_dn_value[1]; $new_dn_value = explode( '=', $new_rdn, 2 ); +if( count( $new_dn_value ) != 2 || ! isset( $new_dn_value[1] ) ) + pla_error( $lang['invalid_rdn'] ); $new_dn_value = $new_dn_value[1]; // Add the new DN attr value to the DN attr (ie, add newName to cn) @@ -56,7 +60,7 @@ $remove_old_dn_attr = array( $dn_attr => $old_dn_value ); $add_dn_attr_success = @ldap_mod_add( $ds, $dn, $add_new_dn_attr ); if( ! @ldap_rename( $ds, $dn, $new_rdn, $container, false ) ) { - pla_error( "Could not rename the object.", ldap_error( $ds ), ldap_errno( $ds ), false ); + pla_error( $lang['could_not_rename'], ldap_error( $ds ), ldap_errno( $ds ), false ); // attempt to undo our changes to the DN attr if( $add_dn_attr_success ) @@ -67,9 +71,7 @@ else // attempt to remove the old DN attr value (if we can't, die a silent death) @ldap_mod_del( $ds, $new_dn, $remove_old_dn_attr ); - // update the session tree to reflect the name change - session_start(); - if( session_is_registered( 'tree' ) ) + if( array_key_exists( 'tree', $_SESSION ) ) { $tree = $_SESSION['tree']; $tree_icons = $_SESSION['tree_icons']; @@ -105,11 +107,11 @@ else location.href=''; - + - Redirecting... click here if you're impatient. + diff --git a/rename_form.php b/rename_form.php new file mode 100644 index 0000000..1230675 --- /dev/null +++ b/rename_form.php @@ -0,0 +1,46 @@ + + + + +

+

:     :

+ +
+
+
+ + + + +
+
+ + + diff --git a/schema.php b/schema.php index 8765b48..f01d3b1 100644 --- a/schema.php +++ b/schema.php @@ -1,4 +1,6 @@ " . htmlspecialchars($servers[$server_id]['name']) . ".
-
- - This could happen for several reasons, the most probable of which are: -
    -
  • The server does not fully support the LDAP protocol.
  • -
  • Your version of PHP does not correctly perform the query.
  • -
  • Or lastly, phpLDAPadmin doesn't know how to fetch the schema for your server.
  • -
- Please - report this as a bug"; +$schema_error_str = $lang['could_not_retrieve_schema_from']." " + . htmlspecialchars($servers[$server_id]['name']) + . ".

" + .$lang['reasons_for_error'] + ."
  • " + .$lang['schema_retrieve_error_1'] + . "
  • " + .$lang['schema_retrieve_error_2'] + ."
  • " + .$lang['schema_retrieve_error_3'] + ."
".$lang['please_report_this_as_a_bug'].""; ?> @@ -50,20 +53,20 @@ $schema_error_str = "Could not retrieve schema from " . htmlspecialchars($ser
objectClasses' ); ?> + $lang['objectclasses'] : + ''.$lang['objectclasses'].'' ); ?> | Attributes' ); ?> + $lang['attribute_types']: + ''. $lang['attribute_types'].'' ); ?> | Syntaxes' ); ?> + $lang['syntaxes'] : + ''.$lang['syntaxes'].'' ); ?> | Matching Rules' ); ?> + $lang['matchingrules'] : + ''.$lang['matchingrules'].'' ); ?>

@@ -78,7 +81,7 @@ if( $view == 'syntaxes' ) { echo "
" . $lang['syntax_oid'] . "" . $lang['desc'] . "
- getName())){ + + getName() ) ) { + if( ! is_null( $viewvalue ) ) + $viewed = true; flush(); echo "\n\n"; $counter = 0; echo "\n"; - echo "\n"; - echo "\n"; + echo "\n"; + echo "\n"; echo "\n\n"; - echo "\n"; - echo "\n"; + echo "\n"; echo "\n"; echo "\n\n"; echo "\n"; - echo "\n"; - echo "\n"; + echo '\n"; + echo "\n"; echo "\n\n"; echo "\n"; echo "\n"; echo "\n"; + echo "getSupAttribute() ) . "\">" . $attr->getSupAttribute() . "\n"; echo "\n\n"; echo "\n"; - echo "\n"; - echo "\n"; + echo "\n"; + echo "\n"; echo "\n\n"; echo "\n"; - echo "\n"; - echo "\n"; + echo "\n"; + echo "\n"; echo "\n\n"; echo "\n"; - echo "\n"; - echo "\n"; + echo "\n"; + echo "\n"; echo "\n\n"; echo "\n"; - echo "\n"; + echo "\n"; echo "\n"; - echo "\n"; - echo "\n"; + echo "\n"; + echo "\n"; echo "\n\n"; echo "\n"; - echo "\n"; - echo "\n"; + echo "\n"; + echo "\n"; echo "\n\n"; echo "\n"; - echo "\n"; - echo "\n"; + echo "\n"; + echo "\n"; echo "\n\n"; echo "\n"; - echo "\n"; - echo "\n"; + echo "\n"; + echo "\n"; echo "\n\n"; echo "\n"; - echo "\n"; - echo "\n"; + echo "\n"; + echo "\n"; echo "\n\n"; echo "\n"; - echo "\n"; + echo "\n"; echo ""; echo "\n\n"; echo "\n"; - echo "\n"; + echo "\n"; echo ""; echo "\n\n"; @@ -250,66 +251,106 @@ if( $view == 'syntaxes' ) { } elseif( $view == 'matching_rules' ) { //echo "
" . $lang['the_following_matching'] . "

\n\n"; + $schema_matching_rules = get_schema_matching_rules( $server_id, null, false ); + echo '' . $lang['jump_to_matching_rule'].'
'; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; echo "\n\n
getName() ) . "\">"; echo $attr->getName() . "
Description" . ( $attr->getDescription() == null ? '(no description)' : $attr->getDescription() ). "".$lang['desc']."" . ( $attr->getDescription() == null ? '('.$lang['no_description'].')' : $attr->getDescription() ). "
OID".$lang['oid']."" . $attr->getOID() . "
Obsolete?" . ( $attr->getIsObsolete() ? 'Yes' : 'No' ) . "'.$lang['obsolete']."?" . ( $attr->getIsObsolete() ? '' . $lang['yes'] . '' : $lang['no'] ) . "
".$lang['inherits'].""; if( $attr->getSupAttribute()==null ) - echo '(none)'; + echo '('.$lang['none'].')'; else - echo "getSupAttribute() ) . "\">" . $attr->getSupAttribute() . "
Equality" . ( $attr->getEquality() == null ? '(not specified)' : $attr->getEquality() ) . "".$lang['equality']."" . ( $attr->getEquality() == null ? '('.$lang['not_specified'].')' : "getEquality()."\">".$attr->getEquality() ) . "
Ordering" . ( $attr->getOrdering()==null? '(not specified)' : $attr->getOrdering() ) . "".$lang['ordering']."" . ( $attr->getOrdering()==null? '('.$lang['not_specified'].')' : $attr->getOrdering() ) . "
Substring Rule" . ( $attr->getSubstr()==null? '(not specified)' : $attr->getSubstr() ) . "".$lang['substring_rule']."" . ( $attr->getSubstr()==null? '('.$lang['not_specified'].')' : $attr->getSubstr() ) . "
Syntax".$lang['syntax'].""; if( null != $attr->getType() ) { echo "\n\n"; echo "
Single Valued" . ( $attr->getIsSingleValue() ? 'Yes' : 'No' ) . "".$lang['single_valued']."" . ( $attr->getIsSingleValue() ? $lang['yes'] : $lang['no'] ) . "
Collective?" . ( $attr->getIsCollective() ? 'Yes' : 'No' ) . "".$lang['collective']."?" . ( $attr->getIsCollective() ? $lang['yes'] : $lang['no'] ) . "
User Modification" . ( $attr->getIsNoUserModification() ? 'No' : 'Yes' ) . "".$lang['user_modification']."" . ( $attr->getIsNoUserModification() ? $lang['no'] : $lang['yes'] ) . "
Usage" . ( $attr->getUsage() ? $attr->getUsage() : '(not specified)' ) . "".$lang['usage']."" . ( $attr->getUsage() ? $attr->getUsage() : '('.$lang['not_specified'].')' ) . "
Maximum Length" . ( $attr->getMaxLength() === null ? - '(not applicable)' : - number_format( $attr->getMaxLength() ) . ' characters' ) . "".$lang['maximum_length'].""; + if ( $attr->getMaxLength() === null ) { echo '('.$lang['not_applicable'].')';} + else { + echo number_format( $attr->getMaxLength() ) ." "; + if ( $attr->getMaxLength()>1) {echo $lang['characters'];} + else { echo $lang['character'] ;} + } + echo "
Aliases".$lang['aliases'].""; if( count( $attr->getAliases() ) == 0 ) - echo "(none)"; + echo '('.$lang['none'].')'; else foreach( $attr->getAliases() as $alias_attr_name ) - echo "$alias_attr_name "; + echo "$alias_attr_name "; echo "
Used by objectClasses".$lang['used_by_objectclasses'].""; if( count( $attr->getUsedInObjectClasses() ) == 0 ) - echo "(none)"; + echo '('.$lang['none'].')'; else foreach( $attr->getUsedInObjectClasses() as $used_in_oclass) - echo "$used_in_oclass "; echo "
\n"; - echo "\n"; + echo "\n"; flush(); $counter=1; - $schema_matching_rules = get_schema_matching_rules( $server_id ); + $schema_matching_rules = get_schema_matching_rules( $server_id, null, false ); if( ! $schema_matching_rules ) pla_error( $schema_error_str ); foreach( $schema_matching_rules as $rule ) { $counter++; $oid = htmlspecialchars( $rule->getOID() ); $desc = htmlspecialchars( $rule->getName() ); - + if ( $viewvalue==null || $viewvalue==($rule->getName() )) { + if( ! is_null( $viewvalue ) ) + $viewed = true; if( null != $rule->getDescription() ) $desc .= ' (' . $rule->getDescription() . ')'; if( true === $rule->getIsObsolete() ) $desc .= ' ' . $lang['obsolete'] . ''; echo ""; - echo ""; - echo ""; + echo ""; + echo ""; echo "\n"; + } } echo "
" . $lang['matching_rule_oid'] . "" . $lang['name'] . "Used by Attributes
" . $lang['matching_rule_oid'] . "" . $lang['name'] . "".$lang['used_by_attributes']."
$oid$desc$oid$desc"; if( count( $rule->getUsedByAttrs() ) == 0 ) { - echo "
(" . $lang['none'] . ")


\n"; + echo "
(" . $lang['none'] . ")


\n"; } else { - echo "
"; + echo ""; + echo ""; + echo "\n"; + echo "
\n"; } echo "
\n"; } elseif( $view == 'objectClasses' ) { //echo "
" . $lang['the_following_objectclasses'] . "

\n"; flush(); - $schema_oclasses = get_schema_objectclasses( $server_id ); + $schema_oclasses = get_schema_objectclasses( $server_id, null, false ); if( ! $schema_oclasses ) pla_error( $schema_error_str ); ?> : -
- + + + $oclass ) { + echo ''; + } ?> +
+ + + + $oclass ) { + foreach( $oclass->getSupClasses() as $parent_name ) { + $parent_name = $parent_name; + if( isset( $schema_oclasses[ $parent_name ] ) ) { + $schema_oclasses[ $parent_name ]->addChildObjectClass( $oclass->getName() ); + } + } + + } ?> +
$oclass ) { - if ( $viewvalue==null || $viewvalue==$oclass->getName()){ - ?> - + if ( $viewvalue==null || 0 == strcasecmp( $viewvalue, $oclass->getName() ) ){ + if( ! is_null( $viewvalue ) ) + $viewed = true; + ?> +

getName(); ?>

: getOID(); ?>

getDescription() ) { ?>

: getDescription(); ?>

-

Type: getType(); ?>

- getIsObsolete() ) && */$oclass->getIsObsolete() == true ) { ?> +

: getType(); ?>

+ getIsObsolete() == true ) { ?>

@@ -319,13 +360,28 @@ if( $view == 'syntaxes' ) { else foreach( $oclass->getSupClasses() as $i => $object_class ) { echo '' . htmlspecialchars( $object_class ) . ''; if( $i < count( $oclass->getSupClasses() ) - 1 ) echo ', '; } ?> +

: getName(), 'top' ) ) + echo "(all)"; + elseif( count( $oclass->getChildObjectClasses() ) == 0 ) + echo "(" . $lang['none'] . ")"; + else + foreach( $oclass->getChildObjectClasses() as $i => $object_class ) { + echo '' . htmlspecialchars( $object_class ) . ''; + if( $i < count( $oclass->getChildObjectClasses() ) - 1 ) + echo ', '; + } + ?>

+ @@ -336,13 +392,13 @@ if( $view == 'syntaxes' ) { getMustAttrs($schema_oclasses) ) > 0 ) { echo '
    '; foreach( $oclass->getMustAttrs($schema_oclasses) as $attr ) { - echo "
  • getName() ). "\">" . htmlspecialchars($attr->getName()); echo ""; if( $attr->getSource() != $oclass->getName() ) { - echo "
      (inherited from "; - echo "getSource() . "\">" . $attr->getSource() . ""; + echo "
      (".$lang['inherited_from']." "; + echo "getSource() . "\">" . $attr->getSource() . ""; echo ")"; } echo "
  • \n"; @@ -357,13 +413,13 @@ if( $view == 'syntaxes' ) { if( count( $oclass->getMayAttrs($schema_oclasses) ) > 0 ) { echo '
      '; foreach( $oclass->getMayAttrs($schema_oclasses) as $attr ) { - echo "
    • getName() ) . "\">" . htmlspecialchars($attr->getName() ); echo "\n"; if( $attr->getSource() != $oclass->getName() ) { - echo "
         (inherited from "; - echo "getSource() . "\">" . $attr->getSource() . ""; + echo "
         (".$lang['inherited_from']." "; + echo "getSource() . "\">" . $attr->getSource() . ""; echo ")"; } echo "
    • "; @@ -381,6 +437,10 @@ if( $view == 'syntaxes' ) { + + diff --git a/schema_functions.php b/schema_functions.php index 63ee65f..07010ce 100644 --- a/schema_functions.php +++ b/schema_functions.php @@ -1,60 +1,88 @@ oid = null; + $this->description = null; + } + + /** Default constructor. */ + function SchemaItem() + { + $this->initVars(); + } + + function setOID( $new_oid ) { - $this->name=$name; - $this->source=$source; + $this->oid = $new_oid; } - /* getters */ - - function getName () + function setDescription( $new_desc ) { - return $this->name; + $this->description = $new_desc; } - function getSource () - { - return $this->source; - } + function getOID() + { + return $this->oid; + } + + function getDescription() + { + return $this->description; + } } -/* +/** * Represents an LDAP objectClass */ -class ObjectClass +class ObjectClass extends SchemaItem { - /* This objectClass' OID, ie "2.16.840.1.113730.3.2.2" */ - var $oid; - /* This objectClass' name, ie "inetOrgPerson" */ + /** This objectClass' name, ie "inetOrgPerson" */ var $name; - /* This objectClass' description */ - var $description; - /* array of objectClass names from which this objectClass inherits */ + /** array of objectClass names from which this objectClass inherits */ var $sup_classes; - /* one of STRUCTURAL, ABSTRACT, or AUXILIARY */ + /** one of STRUCTURAL, ABSTRACT, or AUXILIARY */ var $type; - /* arrays of attribute names that this objectClass requires */ + /** arrays of attribute names that this objectClass requires */ var $must_attrs; - /* arrays of attribute names that this objectClass allows, but does not require */ + /** arrays of attribute names that this objectClass allows, but does not require */ var $may_attrs; - /* boolean value indicating whether this objectClass is obsolete */ + /** boolean value indicating whether this objectClass is obsolete */ var $is_obsolete; + /** array of objectClasses which inherit from this one (must be set at runtime explicitly by the caller) */ + var $children_objectclasses; - /* Initialize the class' member variables */ + /** Initialize the class' member variables */ function initVars() { + parent::initVars(); $this->oid = null; $this->name = null; $this->description = null; @@ -63,10 +91,11 @@ class ObjectClass $this->must_attrs = array(); $this->may_attrs = array(); $this->is_obsolete = false; + $this->children_objectclasses = array(); } - /* - * Parses a raw LDAP objectClass string into this object's $this vars + /** + * Creates a new ObjectClass object given a raw LDAP objectClass string. */ function ObjectClass( $raw_ldap_schema_string ) { @@ -185,9 +214,20 @@ class ObjectClass $this->description = preg_replace("/\'$/", "", $this->description); } - - /* Getters */ - + /** + * Gets an array of AttributeType objects that entries of this ObjectClass must define. + * This differs from getMustAttrNames in that it returns an array of AttributeType objects + * + * @param array $oclasses An array of ObjectClass objects to use when traversing + * the inheritance tree. This presents some what of a bootstrapping problem + * as we must fetch all objectClasses to determine through inheritance which + * attributes this objectClass requires. + * @return array The array of required AttributeType objects. + * + * @see getMustAttrNames + * @see getMayAttrs + * @see getMayAttrNames + */ function getMustAttrs($oclasses = NULL) { $all_must_attrs = array(); @@ -207,6 +247,21 @@ class ObjectClass return $all_must_attrs; } + /** + * Gets an array of AttributeType objects that entries of this ObjectClass may define. + * This differs from getMayAttrNames in that it returns an array of AttributeType objects + * + * @param array $oclasses An array of ObjectClass objects to use when traversing + * the inheritance tree. This presents some what of a bootstrapping problem + * as we must fetch all objectClasses to determine through inheritance which + * attributes this objectClass provides. + * @return array The array of allowed AttributeType objects. + * + * @see getMustAttrNames + * @see getMustAttrs + * @see getMayAttrNames + * @see AttributeType + */ function getMayAttrs($oclasses = NULL) { $all_may_attrs = array(); @@ -226,6 +281,21 @@ class ObjectClass return $all_may_attrs; } + /** + * Gets an array of attribute names (strings) that entries of this ObjectClass must define. + * This differs from getMustAttrs in that it returns an array of strings rather than + * array of AttributeType objects + * + * @param array $oclasses An array of ObjectClass objects to use when traversing + * the inheritance tree. This presents some what of a bootstrapping problem + * as we must fetch all objectClasses to determine through inheritance which + * attributes this objectClass provides. + * @return array The array of allowed attribute names (strings). + * + * @see getMustAttrs + * @see getMayAttrs + * @see getMayAttrNames + */ function getMustAttrNames( $oclasses = null ) { $attrs = $this->getMustAttrs( $oclasses ); @@ -235,6 +305,21 @@ class ObjectClass return $attr_names; } + /** + * Gets an array of attribute names (strings) that entries of this ObjectClass must define. + * This differs from getMayAttrs in that it returns an array of strings rather than + * array of AttributeType objects + * + * @param array $oclasses An array of ObjectClass objects to use when traversing + * the inheritance tree. This presents some what of a bootstrapping problem + * as we must fetch all objectClasses to determine through inheritance which + * attributes this objectClass provides. + * @return array The array of allowed attribute names (strings). + * + * @see getMustAttrs + * @see getMayAttrs + * @see getMustAttrNames + */ function getMayAttrNames( $oclasses = null ) { $attrs = $this->getMayAttrs( $oclasses ); @@ -244,41 +329,74 @@ class ObjectClass return $attr_names; } + /** + * Adds an objectClass to the list of objectClasses that inherit + * from this objectClass. + * @param String $object_class_name The name of the objectClass to add + * @return bool Returns true on success or false on failure (objectclass already existed for example) + */ + function addChildObjectClass( $object_class_name ) + { + $object_class_name = trim( $object_class_name ); + if( ! is_array( $this->children_objectclasses ) ) + $this->children_objectclasses = array(); + foreach( $this->children_objectclasses as $existing_objectclass ) + if( 0 == strcasecmp( $object_class_name, $existing_objectclass ) ) + return false; + $this->children_objectclasses[] = $object_class_name; + return true; + } + /** + * Returns the array of objectClass names which inherit from this objectClass. + * @return Array Names of objectClasses which inherit from this objectClass. + */ + function getChildObjectClasses() + { + return $this->children_objectclasses; + } + + /** + * Gets the name of this objectClass (ie, "inetOrgPerson") + * @return string The name of the objectClass + */ function getName() { return $this->name; } - function getDescription() - { - return $this->description; - } - - function getOID() - { - return $this->oid; - } - + /** + * Gets the objectClass names from which this objectClass inherits. + * + * @return array An array of objectClass names (strings) + */ function getSupClasses() { return $this->sup_classes; } + /** + * Gets the type of this objectClass: STRUCTURAL, ABSTRACT, or AUXILIARY. + */ function getType() { return $this->type; } + /** + * Gets whether this objectClass is flagged as obsolete by the LDAP server. + */ function getIsObsolete() { return $this->is_obsolete; } - /* + /** * Adds the specified array of attributes to this objectClass' list of * MUST attributes. The resulting array of must attributes will contain * unique members. + * + * @param array $new_must_attrs An array of attribute names (strings) to add. */ function addMustAttrs( $new_must_attrs ) { @@ -289,9 +407,11 @@ class ObjectClass $this->must_attrs = array_values( array_unique( array_merge( $this->must_attrs, $new_must_attrs ) ) ); } - /* + /** * Behaves identically to addMustAttrs, but it operates on the MAY * attributes of this objectClass. + * + * @param array $new_may_attrs An array of attribute names (strings) to add. */ function addMayAttrs( $new_may_attrs ) { @@ -301,54 +421,95 @@ class ObjectClass return; $this->may_attrs = array_values( array_unique( array_merge( $this->may_attrs, $new_may_attrs ) ) ); } - } -/* + /** + * A simple class for representing AttributeTypes used only by the ObjectClass class. + * Users should never instantiate this class. It represents an attribute internal to + * an ObjectClass. If PHP supported inner-classes and variable permissions, this would + * be interior to class ObjectClass and flagged private. The reason this class is used + * and not the "real" class AttributeType is because this class supports the notion of + * a "source" objectClass, meaning that it keeps track of which objectClass originally + * specified it. This class is therefore used by the class ObjectClass to determine + * inheritance. + */ + class ObjectClassAttribute + { + /** This Attribute's name */ + var $name; + /** This Attribute's root */ + var $source; + + /** + * Creates a new ObjectClassAttribute with specified name and source objectClass. + * @param string $name the name of the new attribute. + * @param string $source the name of the ObjectClass which + * specifies this attribute. + */ + function ObjectClassAttribute ($name, $source) + { + $this->name=$name; + $this->source=$source; + } + + /** Gets this attribute's name */ + function getName () + { + return $this->name; + } + + /** Gets the name of the ObjectClass which originally specified this attribute. */ + function getSource () + { + return $this->source; + } + } + + +/** * Represents an LDAP AttributeType */ -class AttributeType +class AttributeType extends SchemaItem { - /* The OID of this attributeType: ie, 1.2.3.4*/ - var $oid; - /* The name of this attributeType */ + /** The name of this attributeType */ var $name; - /* string: the description */ - var $description; - /* boolean: is it obsoloete */ + /** string: the description */ var $is_obsolete; - /* The attribute from which this attribute inherits (if any) */ + /** The attribute from which this attribute inherits (if any) */ var $sup_attribute; - /* The equality rule used */ + /** The equality rule used */ var $equality; - /* The ordering of the attributeType */ + /** The ordering of the attributeType */ var $ordering; - /* Boolean: supports substring matching? */ + /** Boolean: supports substring matching? */ var $sub_str; - /* The full syntax string, ie 1.2.3.4{16} */ + /** The full syntax string, ie 1.2.3.4{16} */ var $syntax; - /* boolean: is single valued only? */ + /** boolean: is single valued only? */ var $is_single_value; - /* boolean: is collective? */ + /** boolean: is collective? */ var $is_collective; - /* boolean: can use modify? */ + /** boolean: can use modify? */ var $is_no_user_modification; - /* The usage string set by the LDAP schema */ + /** The usage string set by the LDAP schema */ var $usage; - /* An array of alias attribute names, strings */ + /** An array of alias attribute names, strings */ var $aliases; - /* The max number of characters this attribute can be */ + /** The max number of characters this attribute can be */ var $max_length; - /* A string description of the syntax type (taken from the LDAPSyntaxes) */ + /** A string description of the syntax type (taken from the LDAPSyntaxes) */ var $type; - /* An array of objectClasses which use this attributeType (must be set by caller) */ + /** An array of objectClasses which use this attributeType (must be set by caller) */ var $used_in_object_classes; + /** A list of object class names that require this attribute type. */ + var $required_by_object_classes = array(); - /* + /** * Initialize the class' member variables */ function initVars() { + parent::initVars(); $this->oid = null; $this->name = null; $this->description = null; @@ -367,14 +528,14 @@ class AttributeType $this->aliases = array(); $this->type = null; $this->used_in_object_classes = array(); + $this->required_by_object_classes = array(); } - /* - * Parses a raw LDAP objectClass string into this object's $this vars + /** + * Creates a new AttributeType objcet from a raw LDAP AttributeType string. */ function AttributeType( $raw_ldap_attr_string ) { - //echo "$raw_ldap_attr_string
      "; $this->initVars(); $attr = $raw_ldap_attr_string; $strings = preg_split ("/[\s,]+/", $attr, -1,PREG_SPLIT_DELIM_CAPTURE); @@ -448,7 +609,7 @@ class AttributeType $this->max_length = $this->max_length[1]; else $this->max_length = null; - if($strings[$i+1]=="{") { + if($i < count($strings) - 1 && $strings[$i+1]=="{") { do { $i++; $this->name .= " " . $strings[$i]; @@ -482,111 +643,175 @@ class AttributeType $this->syntax_oid = preg_replace("/\'$/", "", $this->syntax_oid ); } - /* Getters */ - function getOID() - { - return $this->oid; - } - + /** + * Gets this attribute's name + * @return string + */ function getName() { return $this->name; } - function getDescription() - { - return $this->description; - } - + /** + * Gets whether this attribute has been flagged as obsolete by the LDAP server + * @return bool + */ function getIsObsolete() { return $this->is_obsolete; } + /** + * Gets this attribute's usage string as defined by the LDAP server + * @return string + */ function getUsage() { return $this->usage; } + /** + * Gets this attribute's parent attribute (if any). If this attribute does not + * inherit from another attribute, null is returned. + * @return string + */ function getSupAttribute() { return $this->sup_attribute; } + /** + * Gets this attribute's equality string + * @return string + */ function getEquality() { return $this->equality; } + /** + * Gets this attribute's ordering specification. + * @return string + */ function getOrdering() { return $this->ordering; } + /** + * Gets this attribute's substring matching specification + * @return string + */ function getSubstr() { return $this->sub_str; } + /** + * Gets the names of attributes that are an alias for this attribute (if any). + * @return array An array of names of attributes which alias this attribute or + * an empty array if no attribute aliases this object. + */ function getAliases() { return $this->aliases; } - /* - * Returns the entire raw syntax string for this attr, for example: 1.2.3.4{16} + /** + * Returns whether the specified attribute is an alias for this one (based on this attribute's alias list). + * @param string $attr_name The name of the attribute to check. + * @return bool True if the specified attribute is an alias for this one, or false otherwise. + */ + function isAliasFor( $attr_name ) + { + foreach( $this->aliases as $alias_attr_name ) + if( 0 == strcasecmp( $alias_attr_name, $attr_name ) ) + return true; + return false; + + } + + /** + * Gets this attribute's raw syntax string (ie: "1.2.3.4{16}"). + * @return string The raw syntax string */ function getSyntaxString() { return $this->syntax; } - /* - * Differs from getSyntaxString() in that it only returns the actual OID with any length - * specification removed. Ie, if the syntax string is 1.2.3.4{16}, this retruns - * 1.2.3.4. + /** + * Gets this attribute's syntax OID. Differs from getSyntaxString() in that this + * function only returns the actual OID with any length specification removed. + * Ie, if the syntax string is "1.2.3.4{16}", this function only retruns + * "1.2.3.4". + * @return string The syntax OID string. */ function getSyntaxOID() { return $this->syntax_oid; } - /* - * Returns the maximum length specified by this attribute (ie, "16" in 1.2.3.4{16}) + /** + * Gets this attribute's the maximum length. If no maximum is defined by the LDAP server, null is returned. + * @return int The maximum length (in characters) of this attribute or null if no maximum is specified. */ function getMaxLength() { return $this->max_length; } + /** + * Gets whether this attribute is single-valued. If this attribute only supports single values, true + * is returned. If this attribute supports multiple values, false is returned. + * @return bool Returns true if this attribute is single-valued or false otherwise. + */ function getIsSingleValue() { return $this->is_single_value; } + /** + * Sets whether this attribute is single-valued. + * @param bool $is_single_value + */ function setIsSingleValue( $is_single_value ) { $this->is_single_value = $is_single_value; } - + /** + * Gets whether this attribute is collective. + * @return bool Returns true if this attribute is collective and false otherwise. + */ function getIsCollective() { return $this->is_collective; } + /** + * Gets whether this attribute is not modifiable by users. + * @return bool Returns true if this attribute is not modifiable by users. + */ function getIsNoUserModification() { return $this->is_no_user_modification; } + /** + * Gets this attribute's type + * @return string The attribute's type. + */ function getType() { return $this->type; } - /* - * Removes an attribute name from the alias array. + /** + * Removes an attribute name from this attribute's alias array. + * @param string $remove_alias_name The name of the attribute to remove. + * @return bool true on success or false on failure (ie, if the specified + * attribute name is not found in this attribute's list of aliases) */ function removeAlias( $remove_alias_name ) { @@ -600,44 +825,56 @@ class AttributeType return false; } - /* + /** * Adds an attribute name to the alias array. + * @param string $new_alias_name The name of a new attribute to add to this attribute's list of aliases. */ function addAlias( $new_alias_name ) { $this->aliases[] = $new_alias_name; } + /** + * Sets this attriute's name. + * @param string $new_name The new name to give this attribute. + */ function setName( $new_name ) { $this->name = $new_name; } - function setOID( $new_oid ) - { - $this->oid = $new_oid; - } - - function setDescription( $new_desc ) - { - $this->description = $new_desc; - } - + /** + * Sets this attriute's SUP attribute (ie, the attribute from which this attribute inherits). + * @param string $new_sup_attr The name of the new parent (SUP) attribute + */ function setSupAttribute( $new_sup_attr ) { $this->sup_attribute = $new_sup_attr; } + /** + * Sets this attribute's list of aliases. + * @param array $new_aliases The array of alias names (strings) + */ function setAliases( $new_aliases ) { $this->aliases = $new_aliases; } + /** + * Sets this attribute's type. + * @param string $new_type The new type. + */ function setType( $new_type ) { $this->type = $new_type; } + /** + * Adds an objectClass name to this attribute's list of "used in" objectClasses, + * that is the list of objectClasses which provide this attribute. + * @param string $object_class_name The name of the objectClass to add. + */ function addUsedInObjectClass( $object_class_name ) { foreach( $this->used_in_object_classes as $used_in_object_class ) @@ -647,31 +884,56 @@ class AttributeType return true; } + /** + * Gets the list of "used in" objectClasses, that is the list of objectClasses + * which provide this attribute. + * @return array An array of names of objectclasses (strings) which provide this attribute + */ function getUsedInObjectClasses() { return $this->used_in_object_classes; } + + /** + * Adds an objectClass name to this attribute's list of "required by" objectClasses, + * that is the list of objectClasses which must have this attribute. + * @param string $object_class_name The name of the objectClass to add. + */ + function addRequiredByObjectClass( $object_class_name ) + { + foreach( $this->required_by_object_classes as $required_by_object_class ) + if( 0 == strcasecmp( $required_by_object_class, $object_class_name ) ) + return false; + $this->required_by_object_classes[] = $object_class_name; + return true; + } + + /** + * Gets the list of "required by" objectClasses, that is the list of objectClasses + * which provide must have attribute. + * @return array An array of names of objectclasses (strings) which provide this attribute + */ + function getRequiredByObjectClasses() + { + return $this->required_by_object_classes; + } } -/* +/** * Represents an LDAP Syntax */ -class Syntax +class Syntax extends SchemaItem { - /* This Syntax OID, ie "2.16.840.1.113730.3.2.2" */ - var $oid; - /* This Syntax description */ - var $description; - - /* Initialize the class' member variables */ + /** Initializes the class' member variables */ function initVars() { + parent::initVars(); $this->oid = null; $this->description = null; } - /* - * Parses a raw LDAP objectClass string into this object's $this vars + /** + * Creates a new Syntax object from a raw LDAP syntax string. */ function Syntax( $raw_ldap_syntax_string ) { @@ -699,42 +961,26 @@ class Syntax $this->description = preg_replace("/^\'/", "", $this->description); $this->description = preg_replace("/\'$/", "", $this->description); } - - - /* Getters */ - - function getDescription() - { - return $this->description; - } - - function getOID() - { - return $this->oid; - } } -/* +/** * Represents an LDAP MatchingRule */ -class MatchingRule +class MatchingRule extends SchemaItem { - /* This rule's OID, ie "2.16.840.1.113730.3.2.2" */ - var $oid; - /* This rule's name */ + /** This rule's name */ var $name; - /* This rule's description */ - var $description; - /* This rule's syntax OID */ + /** This rule's syntax OID */ var $syntax; - /* Boolean value indicating whether this MatchingRule is obsolete */ + /** Boolean value indicating whether this MatchingRule is obsolete */ var $is_obsolete; - /* An array of attribute names who use this MatchingRule */ + /** An array of attribute names who use this MatchingRule */ var $used_by_attrs; - /* Initialize the class' member variables */ + /** Initialize the class' member variables */ function initVars() { + parent::initVars(); $this->oid = null; $this->name = null; $this->description = null; @@ -743,8 +989,8 @@ class MatchingRule $this->used_by_attrs = array(); } - /* - * Parses a raw LDAP objectClass string into this object's $this vars + /** + * Creates a new MatchingRule object from a raw LDAP MatchingRule string. */ function MatchingRule( $raw_ldap_matching_rule_string ) { @@ -803,15 +1049,16 @@ class MatchingRule $this->description = preg_replace("/\'$/", "", $this->description); } - /* + /** * Sets the list of used_by_attrs to the array specified by $attrs; + * @param array $attrs The array of attribute names (strings) which use this MatchingRule */ function setUsedByAttrs( $attrs ) { $this->used_by_attrs = $attrs; } - /* + /** * Adds an attribute name to the list of attributes who use this MatchingRule * @return true if the attribute was added and false otherwise (already in the list) */ @@ -824,55 +1071,58 @@ class MatchingRule return true; } - /* Getters */ - + /** + * Gets this MatchingRule's name. + * @return string The name. + */ function getName() { return $this->name; } - function getDescription() - { - return $this->description; - } - + /** + * Gets whether this MatchingRule is flagged as obsolete by the LDAP server. + * @return bool True if this MatchingRule is obsolete and false otherwise. + */ function getIsObsolete() { return $this->is_obsolete; } + /** + * Gets this MatchingRule's syntax string (an OID). + * @todo Is this function broken? + */ function getSyntax() { return $this->description; } - function getOID() - { - return $this->oid; - } - + /** + * Gets an array of attribute names (strings) which use this MatchingRule + * @return array The array of attribute names (strings). + */ function getUsedByAttrs() { return $this->used_by_attrs; } } -/* +/** * Represents an LDAP schema matchingRuleUse entry */ -class MatchingRuleUse +class MatchingRuleUse extends SchemaItem { - /* The OID of the MatchingRule this applies to */ - var $oid; - /* The name of the MathingRule this applies to */ + /** The name of the MathingRule this applies to */ var $name; - /* An array of attributeType names who make use of the mathingRule + /** An array of attributeType names who make use of the mathingRule * identified by $this->oid and $this->name */ var $used_by_attrs; - /* Initialize the class' member variables */ + /** Initialize the class' member variables */ function initVars() { + parent::initVars(); $this->oid = null; $this->name = null; $this->used_by_attrs = array(); @@ -880,6 +1130,7 @@ class MatchingRuleUse function MatchingRuleUse( $raw_matching_rule_use_string ) { + $this->initVars(); $strings = preg_split ("/[\s,]+/", $raw_matching_rule_use_string, -1,PREG_SPLIT_DELIM_CAPTURE); for($i=0; $iname)==0) + if( ! isset( $this->name ) || strlen( $this->name ) ==0 ) $this->name = $strings[$i]; else $this->name .= " " . $strings[$i]; @@ -939,36 +1190,44 @@ class MatchingRuleUse sort( $this->used_by_attrs ); } - /* Getters */ - - function getOID() - { - return $this->oid; - } - + /** + * Gets this MatchingRuleUse's name + * @return string The name + */ function getName() { return $this->name; } + /** + * Gets an array of attribute names (strings) which use this MatchingRuleUse object. + * @return array The array of attribute names (strings). + */ function getUsedByAttrs() { return $this->used_by_attrs; } } -/* +/** * Helper for _get_raw_schema() which fetches the DN of the schema object * in an LDAP server based on a DN. Entries should set the subSchemaSubEntry * attribute pointing to the DN of the server schema. You can specify the * DN whose subSchemaSubEntry you wish to retrieve of specify an empty string * to fetch the subScehamSubEntry from the Root DSE. + * + * @param int $server_id The ID of the server whose schema DN to fetch. + * @param string $dn The DN (may be null) which houses the subschemaSubEntry attribute which + * this function can use to determine the schema entry's DN. + * @param bool $debug Switch to true to see some nice and copious output. :) + * + * @return string The DN of the entry which houses this LDAP server's schema. */ function _get_schema_dn( $server_id, $dn, $debug=false ) { if( $debug ) echo "
      ";
       	$ds = pla_ldap_connect( $server_id );
      -	if( ! $ds )
      +	if( pla_ldap_connection_is_error( $ds, false ) )
       		return false;
       
       	$search = @ldap_read( $ds, $dn, 'objectClass=*', array( 'subschemaSubentry' ) );
      @@ -978,9 +1237,9 @@ function _get_schema_dn( $server_id, $dn, $debug=false )
       		return false;
       	}
       
      -	if( ldap_count_entries( $ds, $search ) == 0 ) {
      +	if( @ldap_count_entries( $ds, $search ) == 0 ) {
       		if( $debug ) echo "_get_schema_dn() returning false (ldap_count_entries() == 0).\n";
      -		return false;
      +        return false;
       	}
       
       	$entries = @ldap_get_entries( $ds, $search );
      @@ -1010,10 +1269,11 @@ function _get_schema_dn( $server_id, $dn, $debug=false )
       	return $schema_dn;
       }
       
      -/*
      +/**
        * Fetches the raw schema array for the subschemaSubentry of the server. Note,
        * this function has grown many hairs to accomodate more LDAP servers. It is
      - * needfully complicated. If you can find a better way to write it, feel free!
      + * needfully complicated as it now supports many popular LDAP servers that
      + * don't necessarily expose their schema "the right way".
        *
        * @param $server_id - The server ID whose server you want to retrieve
        * @param $schema_to_fetch - A string indicating which type of schema to 
      @@ -1036,13 +1296,12 @@ function _get_schema_dn( $server_id, $dn, $debug=false )
       function _get_raw_schema( $server_id, $schema_to_fetch, $dn='' )
       {
       	global $lang;
      -	static $cache = null;
       
       	// Swith to true to enable verbose output of schema fetching progress
       	$debug = false;
       
       	$ds = pla_ldap_connect( $server_id );
      -	if( ! $ds )
      +	if( pla_ldap_connection_is_error( $ds, false ) )
       		return false;
       
       	// error checking
      @@ -1050,14 +1309,11 @@ function _get_raw_schema( $server_id, $schema_to_fetch, $dn='' )
       	$valid_schema_to_fetch = array( 'objectclasses', 'attributetypes', 'ldapsyntaxes', 
       					'matchingrules', 'matchingruleuse'  );
       	if( ! in_array( $schema_to_fetch, $valid_schema_to_fetch ) )
      +        // This error message is not localized as only developers should ever see it
       		pla_error( "Bad parameter provided to function to _get_raw_schema(). '" 
       				. htmlspecialchars( $schema_to_fetch ) . "' is 
       				not valid for the schema_to_fetch parameter." );
       	
      -	// Minimize the hits to LDAP server by caching the result
      -	if( isset( $cache[ $server_id ][ $schema_to_fetch ] ) )
      -		return $cache[ $server_id ][ $schema_to_fetch ];
      -
       	// Try to get the schema DN from the specified entry. 
       	$schema_dn = _get_schema_dn( $server_id, $dn, $debug );
       
      @@ -1073,12 +1329,33 @@ function _get_raw_schema( $server_id, $schema_to_fetch, $dn='' )
       		$schema_search = @ldap_read( $ds, $schema_dn, '(objectClass=*)',
       							array( $schema_to_fetch ), 0, 0, 0, 
       							LDAP_DEREF_ALWAYS );
      -		if( $schema_search === false ) {
      -			if( $debug ) echo "Did not find the schema at DN: $schema_dn.\n";
      -			$schema_search = null;
      -			unset( $schema_dn );
      +
      +        // Were we not able to fetch the schema from the $schema_dn?
      +        $schema_entries = @ldap_get_entries( $ds, $schema_search );
      +		if( $schema_search === false || 
      +            0 == @ldap_count_entries( $ds, $schema_search ) ||
      +            ! isset( $schema_entries[0][$schema_to_fetch] ) ) {
      +                if( $debug ) echo "Did not find the schema with (objectClass=*). Attempting with (objetClass=subschema)\n";
      +
      +                // Try again with a different filter (some servers require (objectClass=subschema) like M-Vault)
      +                $schema_search = @ldap_read( $ds, $schema_dn, '(objectClass=subschema)',
      +                        array( $schema_to_fetch ), 0, 0, 0, 
      +                        LDAP_DEREF_ALWAYS );
      +                $schema_entries = @ldap_get_entries( $ds, $schema_search );
      +
      +                // Still didn't get it?
      +                if( $schema_search === false || 
      +                        0 == @ldap_count_entries( $ds, $schema_search ) ||
      +                        ! isset( $schema_entries[0][$schema_to_fetch] ) ) {
      +                    if( $debug ) echo "Did not find the schema at DN: $schema_dn (with objectClass=* nor objectClass=subschema).\n";
      +                    unset( $schema_entries );
      +                    unset( $schema_dn );
      +                    $schema_search = null;
      +                } else {
      +                    if( $debug ) echo "Found the schema at DN: $schema_dn (with objectClass=subschema).\n";
      +                }
       		} else {
      -			if( $debug ) echo "Found the schema at DN: $schema_dn.\n";
      +			if( $debug ) echo "Found the schema at DN: $schema_dn (with objectClass=*).\n";
       		}
       	} 
       
      @@ -1130,19 +1407,58 @@ function _get_raw_schema( $server_id, $schema_to_fetch, $dn='' )
       				array( $schema_to_fetch ), 0, 0, 0, LDAP_DEREF_ALWAYS );
       	}
       
      +	// Attempt to pull schema from Root DSE with scope "base"
      +	if( $schema_search == null ) {
      +		// try again, with a different schema DN
      +		if( $debug ) echo "Attempting to pull schema from Root DSE with scope \"base\"...\n";
      +		if( $base_dn != null )
      +			$schema_search = @ldap_read($ds, '', '(objectClass=*)',
      +				array( $schema_to_fetch ), 0, 0, 0, LDAP_DEREF_ALWAYS );
      +         $schema_entries = @ldap_get_entries( $ds, $schema_search );
      +         if( ! isset( $schema_entries[0][$schema_to_fetch] ) )
      +            $schema_search = null;
      +    }
      +    
      +	// Attempt to pull schema from Root DSE with scope "one" (work-around for Isode M-Vault X.500/LDAP)
      +	if( $schema_search == null ) {
      +		// try again, with a different schema DN
      +		if( $debug ) echo "Attempting to pull schema from Root DSE with scope \"one\"...\n";
      +		if( $base_dn != null )
      +			$schema_search = @ldap_list($ds, '', '(objectClass=*)',
      +				array( $schema_to_fetch ), 0, 0, 0, LDAP_DEREF_ALWAYS );
      +         $schema_entries = @ldap_get_entries( $ds, $schema_search );
      +         if( ! isset( $schema_entries[0][$schema_to_fetch] ) )
      +            $schema_search = null;
      +	}
      +
       	// Shall we just give up?
      -	if( $schema_search == null ) 
      +	if( $schema_search == null ) {
      +        if( $debug ) echo "Returning false since schema_search came back null
      \n"; + set_schema_cache_unavailable( $server_id ); return false; + } // Did we get something unrecognizable? if( 'resource' != gettype( $schema_search ) ) { - if( $debug ) "Returning false since schema_esarch is not of type 'resource'\n"; + if( $debug ) echo "Returning false since schema_esarch is not of type 'resource'. Dumping schema search:\n"; + if( $debug ) var_dump( $schema_search ); + if( $debug ) echo ""; + set_schema_cache_unavailable( $server_id ); return false; } $schema = @ldap_get_entries( $ds, $schema_search ); if( $schema == false ) { - if( $debug ) "Returning false since ldap_get_entries() returned false.\n"; + if( $debug ) echo "Returning false since ldap_get_entries() returned false.\n"; + set_schema_cache_unavailable( $server_id ); + return false; + } + + if( ! isset( $schema[0][$schema_to_fetch] ) ) { + if( $debug ) echo "Returning false since '$schema_to_fetch' isn't in the schema array. Showing schema array:\n"; + if( $debug ) var_dump( $schema ); + if( $debug ) echo ""; + set_schema_cache_unavailable( $server_id ); return false; } @@ -1151,35 +1467,32 @@ function _get_raw_schema( $server_id, $schema_to_fetch, $dn='' ) // [0] => "( 1.3.6.1.4.1.7165.1.2.2.4 NAME 'gidPool' DESC 'Pool ... // [1] => "( 1.3.6.1.4.1.7165.2.2.3 NAME 'sambaAccount' DESC 'Sa ... // etc. - if( ! isset( $schema[0][$schema_to_fetch] ) ) { - if( $debug ) "Returning false since '$schema_to_fetch' isn't in the schema array\n"; - return false; - } - $schema = $schema[0][$schema_to_fetch]; unset( $schema['count'] ); - // Store the results in cache for subsequent calls - $cache[ $server_id ][ $schema_to_fetch ] = $schema; - + if( $debug ) echo ""; return $schema; } -/* - * Returns an associative array of objectClasses for the specified - * $server_id. Each array entry's key is the name of the objectClass - * in lower-case. - * The sub-entries consist of sub-arrays called 'must_attrs' and - * 'may_attrs', and sub-entries called 'oid', 'name' and 'description'. +/** + * Gets an associative array of ObjectClass objects for the specified + * server. Each array entry's key is the name of the objectClass + * in lower-case and the value is an ObjectClass object. + * + * @param int $server_id The ID of the server whose objectClasses to fetch + * @param string $dn (optional) It is easier to fetch schema if a DN is provided + * which defines the subschemaSubEntry attribute (all entries should). + * + * @return array An array of ObjectClass objects. + * + * @see ObjectClass + * @see get_schema_objectclass */ -function get_schema_objectclasses( $server_id, $dn=null ) +function get_schema_objectclasses( $server_id, $dn=null, $use_cache=true ) { - // cache the schema to prevent multiple schema fetches from LDAP server - static $cache = array(); - if( isset( $cache[$server_id] ) ) { - //echo "Using oclass cache.
      "; - return $cache[$server_id]; - } + if( $use_cache && cached_schema_available( $server_id, 'objectclasses' ) ) { + return get_cached_schema( $server_id, 'objectclasses' ); + } $raw_oclasses = _get_raw_schema( $server_id, 'objectclasses', $dn ); if( ! $raw_oclasses ) @@ -1199,17 +1512,27 @@ function get_schema_objectclasses( $server_id, $dn=null ) ksort( $object_classes ); // cache the schema to prevent multiple schema fetches from LDAP server - $cache[ $server_id ] = $object_classes; + set_cached_schema( $server_id, 'objectclasses', $object_classes ); return( $object_classes ); } -/* - * Returns the schema for a single ObjectClass +/** + * Gets a single ObjectClass object specified by name. + * + * @param int $server_id The ID of the server which houses the objectClass to fetch. + * @param string $oclass_name The name of the objectClass to fetch. + * @param string $dn (optional) It is easier to fetch schema if a DN is provided + * which defines the subschemaSubEntry attribute (all entries should). + * + * @return ObjectClass The specified ObjectClass object or false on error. + * + * @see ObjectClass + * @see get_schema_objectclasses */ -function get_schema_objectclass( $server_id, $oclass_name, $dn=null ) +function get_schema_objectclass( $server_id, $oclass_name, $dn=null, $use_cache=true ) { $oclass_name = strtolower( $oclass_name ); - $oclasses = get_schema_objectclasses( $server_id, $dn ); + $oclasses = get_schema_objectclasses( $server_id, $dn, $use_cache ); if( ! $oclasses ) return false; if( isset( $oclasses[ $oclass_name ] ) ) @@ -1218,13 +1541,23 @@ function get_schema_objectclass( $server_id, $oclass_name, $dn=null ) return false; } -/* - * Retrieves the schema for a single attribute. +/** + * Gets a single AttributeType object specified by name. + * + * @param int $server_id The ID of the server which houses the AttributeType to fetch. + * @param string $oclass_name The name of the AttributeType to fetch. + * @param string $dn (optional) It is easier to fetch schema if a DN is provided + * which defines the subschemaSubEntry attribute (all entries should). + * + * @return AttributeType The specified AttributeType object or false on error. + * + * @see AttributeType + * @see get_schema_attributes */ -function get_schema_attribute( $server_id, $attr_name, $dn=null ) +function get_schema_attribute( $server_id, $attr_name, $dn=null, $use_cache=true ) { $attr_name = real_attr_name( $attr_name ); - $schema_attrs = get_schema_attributes( $server_id, $dn ); + $schema_attrs = get_schema_attributes( $server_id, $dn, $use_cache ); $attr_name = strtolower( $attr_name ); $schema_attr = isset( $schema_attrs[ $attr_name ] ) ? $schema_attrs[ $attr_name ] : @@ -1232,18 +1565,22 @@ function get_schema_attribute( $server_id, $attr_name, $dn=null ) return $schema_attr; } -/* - * Returns an array of AttributeType objects for the specified - * $server_id. Each array entry's key is the name of the attribute, - * in lower-case. +/** + * Gets an associative array of AttributeType objects for the specified + * server. Each array entry's key is the name of the attributeType + * in lower-case and the value is an AttributeType object. + * + * @param int $server_id The ID of the server whose AttributeTypes to fetch + * @param string $dn (optional) It is easier to fetch schema if a DN is provided + * which defines the subschemaSubEntry attribute (all entries should). + * + * @return array An array of AttributeType objects. */ -function get_schema_attributes( $server_id, $dn = null ) +function get_schema_attributes( $server_id, $dn = null, $use_cache=true ) { - // Cache gets filled in later (bottom). each subsequent call uses - // the cache which has the attributes already fetched and parsed - static $cache = null; - if( isset( $cache[ $server_id ] ) ) - return $cache[ $server_id ]; + if( $use_cache && cached_schema_available( $server_id, 'attributetypes' ) ) { + return get_cached_schema( $server_id, 'attributetypes' ); + } $raw_attrs = _get_raw_schema( $server_id, 'attributeTypes', $dn ); if( ! $raw_attrs ) @@ -1252,7 +1589,7 @@ function get_schema_attributes( $server_id, $dn = null ) // build the array of attribueTypes $syntaxes = get_schema_syntaxes( $server_id, $dn ); $attrs = array(); - /* + /** * bug 856832: create two arrays - one indexed by name (the standard * $attrs array above) and one indexed by oid (the new $attrs_oid array * below). This will help for directory servers, like IBM's, that use OIDs @@ -1271,7 +1608,7 @@ function get_schema_attributes( $server_id, $dn = null ) $key = strtolower( $name ); $attrs[ $key ] = $attr; - /* + /** * bug 856832: create an entry in the $attrs_oid array too. This * will be a ref to the $attrs entry for maintenance and performance * reasons @@ -1281,7 +1618,7 @@ function get_schema_attributes( $server_id, $dn = null ) } add_aliases_to_attrs( $attrs ); - /* + /** * bug 856832: pass the $attrs_oid array as a second (new) parameter * to add_sup_to_attrs. This will allow lookups by either name or oid. */ @@ -1289,12 +1626,42 @@ function get_schema_attributes( $server_id, $dn = null ) ksort( $attrs ); + // Add the used in and required_by values. + $schema_object_classes = get_schema_objectclasses( $server_id ); + + foreach( $schema_object_classes as $object_class ) { + $must_attrs = $object_class->getMustAttrNames($schema_object_classes); + $may_attrs = $object_class->getMayAttrNames($schema_object_classes); + $oclass_attrs = array_unique( array_merge( $must_attrs, $may_attrs ) ); + + // Add Used In. + foreach( $oclass_attrs as $attr_name ) { + if( isset( $attrs[ strtolower( $attr_name ) ] ) ) { + $attrs[ strtolower( $attr_name ) ]->addUsedInObjectClass( + $object_class->getName() ); + } else { + //echo "Warning, attr not set: $attr_name
      "; + } + } + + // Add Required By. + foreach( $must_attrs as $attr_name ) { + if( isset( $attrs[ strtolower( $attr_name ) ] ) ) { + $attrs[ strtolower( $attr_name ) ]->addRequiredByObjectClass( + $object_class->getName() ); + } else { + //echo "Warning, attr not set: $attr_name
      "; + } + } + + } + // cache the schema to prevent multiple schema fetches from LDAP server - $cache[ $server_id ] = $attrs; + set_cached_schema( $server_id, 'attributetypes', $attrs ); return( $attrs ); } -/* +/** * For each attribute that has multiple names, this function adds unique entries to * the attrs array for those names. Ie, attributeType has name 'gn' and 'givenName'. * This function will create a unique entry for 'gn' and 'givenName'. @@ -1319,7 +1686,7 @@ function add_aliases_to_attrs( &$attrs ) } } -/* +/** * Adds inherited values to each attributeType specified by the SUP directive. * Supports infinite levels of inheritance. * Bug 856832: require a second paramter that has all attributes indexed by OID @@ -1344,10 +1711,10 @@ function add_sup_to_attrs( &$attrs, &$attrs_oid ) // but just in case we get carried away, stop at 100. This shouldn't happen, but for // some weird reason, we have had someone report that it has happened. Oh well. $i = 0; - while( $i++ < 100 /* 100 == INFINITY ;) */ ) { + while( $i++ < 100 /** 100 == INFINITY ;) */ ) { if( $debug ) echo "Top of loop.\n"; - /* + /** * Bug 856832: check if sup is indexed by OID. If it is, * replace the OID with the appropriate name. Then reset * $sup_attr_name to the name instead of the OID. This will @@ -1434,18 +1801,15 @@ function add_sup_to_attrs( &$attrs, &$attrs_oid ) if( $debug ) echo "\n"; } -/* +/** * Returns an array of MatchingRule objects for the specified server. * The key of each entry is the OID of the matching rule. */ -function get_schema_matching_rules( $server_id, $dn=null ) +function get_schema_matching_rules( $server_id, $dn=null, $use_cache=true ) { - static $cache; - - // cache the schema to prevent multiple schema fetches from LDAP server - if( isset( $cache[$server_id] ) ) { - return $cache[$server_id]; - } + if( $use_cache && cached_schema_available( $server_id, 'matchingrules' ) ) { + return get_cached_schema( $server_id, 'matchingrules' ); + } // build the array of MatchingRule objects $raw_matching_rules = _get_raw_schema( $server_id, 'matchingRules', $dn ); @@ -1487,22 +1851,19 @@ function get_schema_matching_rules( $server_id, $dn=null ) } // cache the schema to prevent multiple schema fetches from LDAP server - $cache[$server_id] = $rules; + set_cached_schema( $server_id, 'matchingrules', $rules ); return $rules; } -/* +/** * Returns an array of Syntax objects that this LDAP server uses mapped to * their descriptions. The key of each entry is the OID of the Syntax. */ -function get_schema_syntaxes( $server_id, $dn=null ) +function get_schema_syntaxes( $server_id, $dn=null, $use_cache=true ) { - static $cache; - - // cache the schema to prevent multiple schema fetches from LDAP server - if( isset( $cache[$server_id] ) ) { - return $cache[$server_id]; - } + if( $use_cache && cached_schema_available( $server_id, 'ldapsyntaxes' ) ) { + return get_cached_schema( $server_id, 'ldapsyntaxes' ); + } $raw_syntaxes = _get_raw_schema( $server_id, 'ldapSyntaxes', $dn ); if( ! $raw_syntaxes ) @@ -1520,9 +1881,130 @@ function get_schema_syntaxes( $server_id, $dn=null ) ksort( $syntaxes ); // cache the schema to prevent multiple schema fetches from LDAP server - $cache[$server_id] = $syntaxes; + set_cached_schema( $server_id, 'ldapsyntaxes', $syntaxes ); return $syntaxes; } +// -------------------------------------------------------------------- +// Schema caching functions +// -------------------------------------------------------------------- + +/** + * Returns true if the schema for $schema_type has been cached and + * is availble. $schema_type may be one of (lowercase) the following: + * objectclasses + * attributetypes + * ldapsyntaxes + * matchingrules + * matchingruleuse + * Note that _get_raw_schema() takes a similar parameter. + */ +function cached_schema_available( $server_id, $schema_type ) +{ + // Check config to make sure session-based caching is enabled. + if( ! SCHEMA_SESSION_CACHE_ENABLED ) + return false; + + // Static memory cache available? + // (note: this memory cache buys us a 20% speed improvement over strictly + // checking the session, ie 0.05 to 0.04 secs) + $schema_type = strtolower( $schema_type ); + static $cache_avail; + if( isset( $cache_avail[ $server_id ][ $schema_type ] ) ) { + return true; + } + + // Session cache available? + if( isset( $_SESSION[ 'schema' ][ $server_id ][ $schema_type ] ) ) { + $cache_avail[ $server_id ][ $schema_type ] = true; + return true; + } elseif ( isset( $_SESSION[ 'schema' ][ $server_id ][ 'unavailable'] ) ) { + return true; + } else { + return false; + } +} + +/** + * Returns the cached array of schemaitem objects for the specified + * $schema_type. For list of valid $schema_type values, see above + * schema_cache_available(). Note that internally, this function + * utilizes a two-layer cache, one in memory using a static variable + * for multiple calls within the same page load, and one in a session + * for multiple calls within the same user session (spanning multiple + * page loads). + * + * Returns an array of SchemaItem objects on success or false on failure. + */ +function get_cached_schema( $server_id, $schema_type ) +{ + // Check config to make sure session-based caching is enabled. + if( ! SCHEMA_SESSION_CACHE_ENABLED ) + return false; + + static $cache; + $schema_type = strtolower( $schema_type ); + if( isset( $cache[ $server_id ][ $schema_type ] ) ) { + //echo "Getting memory-cached schema for \"$schema_type\"...
      \n"; + return $cache[ $server_id ][ $schema_type ]; + } + + //echo "Getting session-cached schema for \"$schema_type\"...
      \n"; + if( cached_schema_available( $server_id, $schema_type ) ) { + $schema = $_SESSION[ 'schema' ][ $server_id ][ $schema_type ]; + $cache[ $server_id ][ $schema_type ] = $schema; + return $schema; + } else { + return false; + } +} + +/** + * Caches the specified $schema_type for the specified $server_id. + * $schema_items should be an array of SchemaItem instances (ie, + * an array of ObjectClass, AttributeType, LDAPSyntax, MatchingRuleUse, + * or MatchingRule objects. + * + * Returns true on success of false on failure. + */ +function set_cached_schema( $server_id, $schema_type, $schema_items ) +{ + // Check config to make sure session-based caching is enabled. + if( ! SCHEMA_SESSION_CACHE_ENABLED ) + return false; + + //echo "Setting cached schema for \"$schema_type\"...
      \n"; + // Sanity check. The schema must be in the form of an array + if( ! is_array( $schema_items ) ) { + die( "While attempting to cache schema, passed a non-array for \$schema_items!" ); + return false; + } + // Make sure we are being passed a valid array of schema_items + foreach( $schema_items as $schema_item ) { + if( ! is_subclass_of( $schema_item, 'SchemaItem' ) && + ! 0 == strcasecmp( 'SchemaItem', get_class( $schema_item ) ) ) { + die( "While attempting to cache schema, one of the schema items passed is not a true SchemaItem instance!" ); + return false; + } + } + + $schema_type = strtolower( $schema_type ); + $_SESSION[ 'schema' ][ $server_id ][ $schema_type ] = $schema_items; + return true; +} + +/** + * Sets the schema entry for the server_id to be "unavailable" so that we realize + * that we tried to get the schema but could not, so quit trying next time to + * fetch it from the server. + */ +function set_schema_cache_unavailable( $server_id ) +{ + if( ! SCHEMA_SESSION_CACHE_ENABLED ) + return false; + $_SESSION['schema'][$server_id]['unavailable'] = true; + return true; +} + ?> diff --git a/search.php b/search.php index e51ed3b..2dc3ab7 100644 --- a/search.php +++ b/search.php @@ -1,4 +1,6 @@ -'; $server_info_list =array(); -foreach( $servers as $id => $server ) { +$server_menu_html = ''; +if (count($servers)>1){ + $server_menu_html = ''; +} else { + $server = reset($servers); + $id = key($servers); $base_dn = $server['base'] ? $server['base'] : try_to_get_root_dn( $id ); $server_info_list[$id]['id'] = $id; $server_info_list[$id]['name'] = $server['name']; $server_info_list[$id]['base_dn'] = $base_dn; - - if( $server['host'] ) { - $server_menu_html .= ''; - } + if( $server['host'] ) + $server_menu_html .= '' . + '' . $server['name'] . ''; } -$server_menu_html .= ''; $filter = isset( $_GET['filter'] ) ? $_GET['filter'] : null; -$filter = $filter; $attr = isset( $_GET['attribute'] ) ? $_GET['attribute'] : null; // grab the base dn for the search -if( isset( $_GET['base_dn'] ) ) +if( isset( $_GET['base_dn'] ) ) { $base_dn = $_GET['base_dn']; -elseif( '' != $servers[$server_id]['base'] ) + $base_dn_is_invalid = false; + $base_dn_does_not_exist = false; + if( trim( $base_dn ) ) + if( ! is_dn_string( $base_dn ) ) + $base_dn_is_invalid = true; + elseif( ! dn_exists( $server_id, $base_dn ) ) + $base_dn_does_not_exist = true; +} elseif( '' != $servers[$server_id]['base'] ) $base_dn = $servers[$server_id]['base']; else $base_dn = try_to_get_root_dn( $server_id ); $criterion = isset( $_GET['criterion'] ) ? $_GET['criterion'] : null; -$form = isset( $_GET['form'] ) ? $_GET['form'] : null; +$form = isset( $_GET['form'] ) ? $_GET['form'] : null; $scope = isset( $_GET['scope'] ) ? $_GET['scope'] : 'sub'; -include 'header.php'; ?> +include './header.php'; ?> @@ -73,22 +101,27 @@ include 'header.php'; ?> include 'search_form_advanced.php'; +} elseif( $form == 'predefined' ) { + + include 'search_form_predefined.php'; + } else /* Draw simple search form */ { process_config(); + if( count( $search_attributes ) != count( $search_attributes_display ) ) + pla_error( $lang['mismatched_search_attr_config'] ); include 'search_form_simple.php'; } ?> - - Searching...\n"; + echo "
      " . $lang['searching'] . "
      \n"; flush(); // prevent script from bailing early on a long delete @set_time_limit( 0 ); - // grab the time limit set in config.php + // grab the size limit set in config.php $size_limit = isset ( $search_result_size_limit ) && is_numeric( $search_result_size_limit ) ? $search_result_size_limit : - 0; + 50; + // Sanity check + if( $size_limit < 1 ) + $size_limit = 1; + + $page = isset( $_GET['page'] ) ? $_GET['page'] : 0; $time_start = utime(); if( $scope == 'base' ) $results = @ldap_read( $ds, $base_dn, $filter, $search_result_attributes, - 0, 0, 0, LDAP_DEREF_ALWAYS ); + 0, 0, 0, get_search_deref_setting() ); elseif( $scope == 'one' ) $results = @ldap_list( $ds, $base_dn, $filter, $search_result_attributes, - 0, 0, 0, LDAP_DEREF_ALWAYS ); + 0, 0, 0, get_search_deref_setting() ); else // scope == 'sub' $results = @ldap_search( $ds, $base_dn, $filter, $search_result_attributes, - 0, 0, 0, LDAP_DEREF_ALWAYS ); - + 0, 0, 0, get_search_deref_setting() ); $errno = @ldap_errno( $ds ); + if( ! $results ) { + pla_error( $lang['error_performing_search'], ldap_error( $ds ), ldap_errno( $ds ) ); + } + $time_end = utime(); $time_elapsed = round( $time_end - $time_start, 2 ); $count = @ldap_count_entries( $ds, $results ); + $start_entry = $page * $size_limit; + $end_entry = min( $start_entry + $size_limit + 1, $count+1 ); + ?> -
      - - (in seconds). - +
+ + + +
+ ' . number_format( $count ) ?>  + ( ) + - // The LDAP error code for the size limit exceeded error. - define( 'SIZE_LIMIT_EXCEEDED', 4 ); - if( $errno && $errno == SIZE_LIMIT_EXCEEDED ) { - echo "
Notice, search size limit exceeded.
\n"; - } - - if( $size_limit > 0 && $count > $size_limit ) { - echo "
Showing first $size_limit results.
\n"; - - } - - ?> - - -
-
+ + + " . + $lang['export_results'] . " ]"; ?> + ' . $lang['format'] . ':'; + foreach( $result_formats as $f ) { + echo ' '; + if( $format == $f ) { + echo '' . $lang[$f] . ''; + } else { + $php_self = $_SERVER['PHP_SELF']; + $query_string = array_to_query_string( $_GET, array( 'format' ) ); + $query_string .= "&format=$f"; + echo "" . $lang[$f] . ""; + } + } + ?> + ] + + + +
+ - - +
-
" . $lang['size_limit_exceeded'] . "

\n"; + } + + // Draw the paging links + $pager_html = ''; + $total_pages = $count / $size_limit; + $results_per_page = $size_limit; + if( $count > $size_limit ) { + echo sprintf( $lang['showing_results_x_through_y'], "" . number_format($start_entry+1) . "", "" . number_format($end_entry-1) . "" ) . "
\n"; + $php_self = $_SERVER['PHP_SELF']; + if( $page != 0 ) { + $query_string = array_to_query_string( $_GET, array( 'page' ) ); + $query_string .= '&page=' . ($page-1); + $pager_html .= "‹‹"; + } else { + $pager_html .= "‹‹"; + } + $pager_html .= '  '; + + // for large search results where we page beyone the first 20 pages, + // print elipsis instead of making the pager be super wide. + $elipsis_printed = false; + for( $i=0; $i<$count; $i+=$size_limit ) { + $page_num = $i/$size_limit; + if( $count > $size_limit * 20 && abs( $page_num - $page ) > 10 ) { + if( ! $elipsis_printed ) { + $pager_html .= '...  '; + $elipsis_printed = true; + } + } else if( $page == $page_num ) { + $pager_html .= '' . ($page_num + 1) . ''; + $pager_html .= '  '; + $elipsis_printed = false; + } else { + $query_string = array_to_query_string( $_GET, array( 'page' ) ); + $query_string .= '&page=' . $page_num; + $pager_html .= "" . ($page_num+1) . ""; + $pager_html .= '  '; + $elipsis_printed = false; + } + } + if( $page+1 < $total_pages ) { + $query_string = array_to_query_string( $_GET, array( 'page' ) ); + $query_string .= '&page=' . ($page+1); + $pager_html .= "››"; + } else { + $pager_html .= "››"; } - $friendly_attrs = process_friendly_attr_table(); - $entry_id = ldap_first_entry( $ds, $results ); + } - // Iterate over each entry - $i = 0; - while( $entry_id ) { - $i++; - // Only display the first $size_limit entries - if( $size_limit != 0 && $i > $size_limit ) { - break; - } - - $dn = ldap_get_dn( $ds, $entry_id ); - $encoded_dn = rawurlencode( $dn ); - $rdn = get_rdn( $dn ); - ?> - -
- - - - - -
-
-
- - - - "; - echo "\n"; - - // Iterate over each attribute for this entry - while( $attr ) { - - if( is_attr_binary( $server_id, $attr ) ) - $values = array( "(binary)" ); - else - $values = ldap_get_values( $ds, $entry_id, $attr ); - if( isset( $values['count'] ) ) - unset( $values['count'] ); - - if( isset( $friendly_attrs[ strtolower( $attr ) ] ) ) - $attr = "" . - htmlspecialchars( $friendly_attrs[ strtolower($attr) ] ) . - ""; - else - $attr = htmlspecialchars( $attr ); - ?> - - - - - - - -
dn" . htmlspecialchars($dn) . "
- \n"; - ?> -
- -

' . $lang['no_results'] . '

'; + else { + echo '
' . $pager_html . '

'; + flush(); + if( $format == 'list' ) + include realpath( './search_results_list.php' ); + elseif( $format == 'table' ) + include realpath( './search_results_table.php' ); + else + pla_error( sprintf( $lang['unrecoginzed_search_result_format'], htmlspecialchars( $format ) ) ); + echo '
' . $pager_html . '
'; + } ?> diff --git a/search_form_advanced.php b/search_form_advanced.php index 1452a44..0f942f8 100644 --- a/search_form_advanced.php +++ b/search_form_advanced.php @@ -1,20 +1,27 @@ - - + diff --git a/search_form_predefined.php b/search_form_predefined.php new file mode 100644 index 0000000..6c48da1 --- /dev/null +++ b/search_form_predefined.php @@ -0,0 +1,52 @@ +
+ diff --git a/search_form_simple.php b/search_form_simple.php index ded2aea..c49d5f6 100644 --- a/search_form_simple.php +++ b/search_form_simple.php @@ -1,23 +1,33 @@ - - + diff --git a/search_results_list.php b/search_results_list.php new file mode 100644 index 0000000..6e1f35a --- /dev/null +++ b/search_results_list.php @@ -0,0 +1,90 @@ += $end_entry ) + break; + $dn = ldap_get_dn( $ds, $entry_id ); + $encoded_dn = rawurlencode( $dn ); + $rdn = get_rdn( $dn ); + ?> + +
+ + + + + +
+
+
+ + + + "; + echo "\n"; + + // Iterate over each attribute for this entry + while( $attr ) { + + if( is_attr_binary( $server_id, $attr ) ) + $values = array( "(binary)" ); + else + $values = ldap_get_values( $ds, $entry_id, $attr ); + if( isset( $values['count'] ) ) + unset( $values['count'] ); + + if( isset( $friendly_attrs[ strtolower( $attr ) ] ) ) + $attr = "" . + htmlspecialchars( $friendly_attrs[ strtolower($attr) ] ) . + ""; + else + $attr = htmlspecialchars( $attr ); + ?> + + + + + + + +
dn" . htmlspecialchars($dn) . "
+ \n"; + ?> +
+ + 1, + 'dn' => 1 ); + +// Iterate over each entry and store the whole dang thing in memory (necessary to extract +// all attribute names and display in table format in a single pass) +$i = 0; +$entries = array(); +$entries_display = array(); +while( $entry_id ) { + $i++; + if( $i <= $start_entry ) { + $entry_id = ldap_next_entry( $ds, $entry_id ); + continue; + } + if( $i >= $end_entry ) + break; + $dn = ldap_get_dn( $ds, $entry_id ); + $dn_display = strlen( $dn ) > 40 ? "" . + htmlspecialchars( substr( $dn, 0, 40 ) . '...' ) . + "" + : htmlspecialchars( $dn ); + $encoded_dn = rawurlencode( $dn ); + $rdn = get_rdn( $dn ); + $icon = get_icon_use_cache( $server_id, $dn ); + $attrs = ldap_get_attributes( $ds, $entry_id ); + $attr = ldap_first_attribute( $ds, $entry_id, $attrs ); + $attrs_display = array(); + $edit_url = "edit.php?server_id=$server_id&dn=$encoded_dn"; + $attrs_display[''] = "
"; + $attrs_display['dn'] = "$dn_display"; + + // Iterate over each attribute for this entry and store in associative array $attrs_display + while( $attr ) { + //echo "getting values for dn $dn, attr $attr\n"; + + // Clean up the attr name + if( isset( $friendly_attrs[ strtolower( $attr ) ] ) ) + $attr_display = "" . + htmlspecialchars( $friendly_attrs[ strtolower($attr) ] ) . + ""; + else + $attr_display = htmlspecialchars( $attr ); + + if( ! isset( $all_attrs[ $attr_display ] ) ) + $all_attrs[ $attr_display ] = 1; + + // Get the values + $display = ''; + if( is_jpeg_photo( $server_id, $attr ) ) { + ob_start(); + draw_jpeg_photos( $server_id, $dn, $attr, false, false, 'align="center"' ); + $display = ob_get_contents(); + ob_end_clean(); + } elseif( is_attr_binary( $server_id, $attr ) ) { + $display = array( "(binary)" ); + } else { + $values = @ldap_get_values( $ds, $entry_id, $attr ); + if( ! is_array( $values ) ) { + $display = 'Error'; + } else { + if( isset( $values['count'] ) ) + unset( $values['count'] ); + foreach( $values as $value ) + $display .= str_replace( ' ', ' ', + htmlspecialchars( $value ) ) . "
\n"; + } + } + $attrs_display[ $attr_display ] = $display; + $attr = ldap_next_attribute( $ds, $entry_id, $attrs ); + } // end while( $attr ) + + $entries_display[] = $attrs_display; + + //echo '
';
+    //print_r( $attrs_display );
+    //echo "\n\n";
+    $entry_id = ldap_next_entry( $ds, $entry_id );
+
+} // end while( $entry_id )
+
+$all_attrs = array_keys( $all_attrs );
+
+/*
+echo "
";
+print_r( $all_attrs );
+print_r( $entries_display );
+echo "
"; +*/ + +// Store the header row so it can be repeated later +$header_row = "
$attr
\n"; + +for( $i=0; $i"; + else + echo ""; + foreach( $all_attrs as $attr ) { + echo "\n"; + } + echo "\n"; +} +echo "
"; + if( isset( $entry[ $attr ] ) ) + echo $entry[ $attr ]; + echo "
"; +echo ""; diff --git a/search_util.js b/search_util.js index 84232c3..4475171 100644 --- a/search_util.js +++ b/search_util.js @@ -3,7 +3,7 @@ // This JavaScript file defines some functions used by the two search forms for // auto-populating the base DN dynamically when a server is selected from the // drop-down. -// +// $Header: /cvsroot/phpldapadmin/phpldapadmin/search_util.js,v 1.2 2004/03/19 20:17:51 i18phpldapadmin Exp $ //the array to store the server var servers = new Array(); diff --git a/server_info.php b/server_info.php index dd904d4..e3321f7 100644 --- a/server_info.php +++ b/server_info.php @@ -1,4 +1,6 @@ - +

@@ -60,25 +96,26 @@ include 'header.php'; -
+ href="">
\n"; ?>
+ + diff --git a/session_functions.php b/session_functions.php new file mode 100644 index 0000000..92b8ac3 --- /dev/null +++ b/session_functions.php @@ -0,0 +1,119 @@ + diff --git a/style.css b/style.css index 2fd25d9..b5437cb 100644 --- a/style.css +++ b/style.css @@ -1,3 +1,14 @@ +/* $Header: /cvsroot/phpldapadmin/phpldapadmin/style.css,v 1.40 2004/10/23 21:13:16 uugdave Exp $ */ +span.hint { + font-size: small; + font-weight: normal; + color: #888; +} + +span.x-small { + font-size: x-small; +} + table.schema_oclasses { border-left: 1px solid black; border-right: 1px solid black; @@ -82,6 +93,10 @@ table.confirm th { font-weight: normal; } +table.confirm tr td { + padding: 4px; +} + table.confirm tr.spacer { background-color: #ddd; } @@ -90,17 +105,27 @@ table.confirm tr.even { background-color: #ccc; } -table.confirm tr.odd{ +table.confirm tr.odd { background-color: #eee; } -table.confirm tr td { - padding: 4px; - vertical-align: top; +table.confirm tr td.heading { + text-align: right; + font-size: 75%; } -table.confirm tr td.heading { - font-size: 75%; +table.confirm td.icon { + text-align: center; +} + +table.browse tr td { + border: 0; + margin: 0; + padding: 0; +} + +table.template_display tr td { + vertical-align: top; } table.templates tr td { @@ -112,6 +137,18 @@ table.templates tr { height: 25px; } +table.templates td.icon { + text-align: center; +} + +table.exporters tr td { + text-align: left; + vertical-align: center; +} + +table.exporters tr { + height: 25px; +} a img { border: 0px; @@ -241,27 +278,38 @@ h3.subtitle { font-weight: normal; } -table.edit_dn tr.spacer td { - height: 10px; -} - table.edit_dn { - width: 100%; + border-collapse: collapse; + border-spacing: 0px; + empty-cells: show; + width: 500px; } -table.edit_dn th { - background: #777; - color: white; - font-weight: normal; - font-size: 125%; - padding: 5px; +table.edit_dn input { + margin: 1px; +} + +table.edit_dn input.val { + font-size: 14px; + width: 350px; + font-family: arial, helvetica, sans-serif + background-color: white; +} + +table.edit_dn textarea.val { + font-size: 14px; + width: 350px; + font-family: arial, helvetica, sans-serif; + background-color: white; } table.edit_dn tr td { padding: 4px; + padding-right: 0px; } table.edit_dn tr td.attr { + background-color: #eee; vertical-align: top; } @@ -270,6 +318,11 @@ table.edit_dn tr td.heading { font-weight: bold; } +table.edit_dn tr td.attr_note { + text-align: right; + background-color: #eee; +} + table.edit_dn tr td.attr a { text-decoration: none; color: black; @@ -281,20 +334,35 @@ table.edit_dn tr td.attr a:hover { } table.edit_dn tr td.val { - text-align: right; + text-align: left; vertical-align: center; - padding-bottom: 15px; + padding-bottom: 10px; + padding-left: 80px; } -/* When an attr is updated, it is displayed in light blue to indicate such */ -table.edit_dn tr.updated_attr { - background: #def; + +/** When an attr is updated, it is highlighted to indicate such */ +table.edit_dn tr.updated_attr td.attr { + border-top: 1px dashed green; + border-left: 1px dashed green; + background-color: #ded; } -table.edit_dn tr.updated_attr td { - border-top: 1px solid black; - border-bottom: 1px solid black; - color: #005; +table.edit_dn tr.updated_attr td.attr_note { + border-top: 1px dashed green; + border-right: 1px dashed green; + background-color: #ded; +} + +/** An extra row that sits at the bottom of recently modified attrs to encase them in dashes */ +table.edit_dn tr.updated_attr td.bottom { + border-top: 1px dashed green; +} + +/** Formatting for the value cell when it is the attribute that has been recently modified */ +table.edit_dn tr.updated_attr td.val { + border-left: 1px dashed green; + border-right: 1px dashed green; } /* Neede to prevent sub-tables (like the one in which jpegPhotos are displayed) @@ -384,15 +452,44 @@ form.new_value { margin-left: 70px; } +table.search_result_table { + border-spacing: 0; + border-collapse: collapse; + empty-cells: show; +} + +table.search_result_table td { + vertical-align: top; + border: 1px solid gray; + padding: 4px; +} + +table.search_result_table th { + border: 1px solid gray; + padding: 10px; + padding-left: 20px; + padding-right: 20px; +} + +table.search_result_table tr.highlight { + background-color: #eee; +} + + ul.search { font-weight: bold; } +table.search_header { + background-color: #ddf; + width: 100%; + vertical-align: top; +} + div.search_result { list-style-type: none; - background: #ffb; padding: 6px; - padding-left: 10px; + padding-left: 20px; margin-right: 40px; } @@ -400,6 +497,7 @@ table.attrs { font-weight: normal; font-size: 75%; margin: 0px; + margin-left: 35px; } table.attrs td { @@ -421,6 +519,11 @@ table.edit_dn_menu { font-size: 75%; } +table.edit_dn_menu td.icon { + width: 16px; + text-align: center; +} + input.scary { background: red; font-weight: bold; @@ -467,6 +570,7 @@ table.create td.heading { div.add_value { font-size: 10pt; margin: 0px; + padding: 0px; } a.logged_in_dn { @@ -497,3 +601,21 @@ h2.doc { p.doc { margin-left: 100px; } + +table.export_form { + font-size: 75%; + width: 400px; + border-spacing: 10px; + border-collapse: separate; +} + +table.export_form tr td { + text-align: left; + vertical-align: top; + padding: 4px; +} + +img.chooser { + /* This makes the chooser image line up properly when placed next to a form element in a table cell*/ + vertical-align: bottom; +} diff --git a/templates/creation/custom.php b/templates/creation/custom.php index f82ed4f..10cbfa6 100644 --- a/templates/creation/custom.php +++ b/templates/creation/custom.php @@ -1,6 +1,5 @@ -

Step 1 of 2: Name and ObjectClass(es)

+

@@ -27,20 +28,22 @@ if( $step == 1 ) - - + + - + - + @@ -62,7 +65,7 @@ if( $step == 1 ) - +
RDN: (example: cn=MyNewObject):
Container:
ObjectClass(es): - + $oclass ) { + if( 0 == strcasecmp( "top", $name ) ) continue; ?> + @@ -53,7 +56,7 @@ if( $step == 1 ) - Hint: You must choose at least one structural objectClass +
@@ -72,17 +75,16 @@ if( $step == 1 ) if( $step == 2 ) { strlen( trim( $rdn ) ) != 0 or - pla_error( "You left the RDN field blank" ); + pla_error( $lang['rdn_field_blank'] ); strlen( trim( $container ) ) == 0 or dn_exists( $server_id, $container ) or - pla_error( "The container you specified (" . htmlspecialchars( $container ) . ") does not exist. " . - "Please go back and try again." ); + pla_error( sprintf( $lang['container_does_not_exist'], htmlspecialchars( $container ) ) ); $friendly_attrs = process_friendly_attr_table(); - $oclasses = $_POST['object_classes']; + $oclasses = isset( $_POST['object_classes'] ) ? $_POST['object_classes'] : null; if( count( $oclasses ) == 0 ) - pla_error( "You did not select any ObjectClasses for this object. Please go back and do so." ); - $dn = $rdn . ',' . $container; + pla_error( $lang['no_objectclasses_selected'] ); + $dn = trim( $container ) ? $rdn . ',' . $container : $rdn; // incrementally build up the all_attrs and required_attrs arrays $schema_oclasses = get_schema_objectclasses( $server_id ); @@ -101,9 +103,28 @@ if( $step == 2 ) $required_attrs = array_unique( $required_attrs ); $all_attrs = array_unique( $all_attrs ); + remove_aliases( $required_attrs, $server_id ); + remove_aliases( $all_attrs, $server_id ); sort( $required_attrs ); sort( $all_attrs ); - + + // if for some reason "ObjectClass" ends up in the list of + // $all_attrs or $required_attrs, remove it! This is a fix + // for bug 927487 + foreach( $all_attrs as $i => $attr_name ) + if( 0 == strcasecmp( $attr_name, 'objectClass' ) ) { + unset( $all_attrs[$i] ); + $all_attrs = array_values( $all_attrs ); + break; + } + + foreach( $required_attrs as $i => $attr_name ) + if( 0 == strcasecmp( $attr_name, 'objectClass' ) ) { + unset( $required_attrs[$i] ); + $required_attrs = array_values( $required_attrs ); + break; + } + // remove binary attributes and add them to the binary_attrs array $binary_attrs = array(); foreach( $all_attrs as $i => $attr_name ) { @@ -112,51 +133,26 @@ if( $step == 2 ) $binary_attrs[] = $attr_name; } } + + // If we trim any attrs out above, then we will have a gap in the index + // sequence and will get an "undefined index" error below. This prevents + // that from happening. + $all_attrs = array_values( $all_attrs ); - $attr_select_html = ""; - foreach( $all_attrs as $a ) { - // is there a user-friendly translation available for this attribute? - if( isset( $friendly_attrs[ strtolower( $a ) ] ) ) { - $attr_display = htmlspecialchars( $friendly_attrs[ strtolower( $a ) ] ) . " (" . - htmlspecialchars($a) . ")"; - } else { - $attr_display = htmlspecialchars( $a ); - } - - $attr_select_html .= "\n"; - } - - $binary_attr_select_html = ""; - if( count( $binary_attrs ) > 0 ) { - foreach( $binary_attrs as $a ) { - if( isset( $friendly_attrs[ strtolower( $a ) ] ) ) { - $attr_display = htmlspecialchars( $friendly_attrs[ strtolower( $a ) ] ) . " (" . - htmlspecialchars( $a ) . ")"; - } else { - $attr_display = htmlspecialchars( $a ); - } - - $binary_attr_select_html .= "\n"; - } - } - // add the required attribute based on the RDN provided by the user // (ie, if the user specifies "cn=Bob" for their RDN, make sure "cn" is // in the list of required attributes. $rdn_attr = trim( substr( $rdn, 0, strpos( $rdn, '=' ) ) ); $rdn_value = trim( substr( $rdn, strpos( $rdn, '=' ) + 1 ) ); + $rdn_value = @pla_explode_dn( $rdn ); + $rdn_value = @explode( '=', $rdn_value[0], 2 ); + $rdn_value = @$rdn_value[1]; if( in_array( $rdn_attr, $all_attrs ) && ! in_array( $rdn_attr, $required_attrs ) ) $required_attrs[] = $rdn_attr; ?> -

Step 2 of 2: Specify attributes and values

+

- Instructions: - Enter values for the required attributes.
- Then specify any optional attributes. 0 ) { ?> - Finally, you may
specify optional binary attributes from a file if needed. -
-
@@ -166,22 +162,18 @@ if( $step == 2 ) - + \n"; + echo "\n"; } else foreach( $required_attrs as $count => $attr ) { ?> - - - - - - + ?> + - + - + - - - - - - - + + + + + + 0 ) { ?> - + - - - - - - - + -
Required Attributes
(none)
(" . $lang['none'] . ")
+ " . + $attr_display = "" . htmlspecialchars( $friendly_attrs[ strtolower( $attr ) ] ) . ""; } else { $attr_display = htmlspecialchars( $attr ); @@ -189,47 +181,121 @@ if( $step == 2 ) echo $attr_display; - ?>
" name="required_attrs[]" - value="" size="40" /> + value="" size="40" />
Optional Attributes
(none)
()
-
Optional Binary Attributes
+
- + +
- +
+ - + + +$attr_display\n"; + } + return $attr_select_html; +} + +function get_binary_attr_select_html( $binary_attrs, $friendly_attrs, $highlight_attr=null ) +{ + $binary_attr_select_html = ""; + if( ! is_array( $binary_attrs ) ) + return null; + if( count( $binary_attrs ) == 0 ) + return null; + foreach( $binary_attrs as $a ) { + // is there a user-friendly translation available for this attribute? + if( isset( $friendly_attrs[ strtolower( $a ) ] ) ) { + $attr_display = htmlspecialchars( $friendly_attrs[ strtolower( $a ) ] ) . " (" . + htmlspecialchars( $a ) . ")"; + } else { + $attr_display = htmlspecialchars( $a ); + } + $binary_attr_select_html .= ""; + $attr1 = get_schema_attribute( $server_id, $attr_name1 ); + if( null == $attr1 ) + continue; + if( $attr1->isAliasFor( $attr_name2 ) ) { + //echo "* Removing attribute ". $attribute_list[ $k ] . "
"; + unset( $attribute_list[ $k ] ); + } + } + } + $attribute_list = array_values( $attribute_list ); +} +?> diff --git a/templates/creation/new_address_template.php b/templates/creation/new_address_template.php index fb8cabc..3d96c67 100755 --- a/templates/creation/new_address_template.php +++ b/templates/creation/new_address_template.php @@ -1,250 +1,249 @@ - - - - -

New Address Book Entry
-(InetOrgPerson)

-
- - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Name: - - -
Common name:
Organization:
Address:
City:
Postal code:
Work phone:
Fax:
Mobile:
Email:
Container: -

-
- - -

Confirm entry creation:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Common name:
First name:
Last name:
Organization:
City:
Postal code:
Street:
Work phone:
Fax:
Mobile:
Email:
Container:
-
-
- - - - - - + + + + +


+(InetOrgPerson)

+
+ + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
: + + +
:
:
:
:
:
:
:
:
:
: + +

+
+
+ + +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+ + + diff --git a/templates/creation/new_alias_template.php b/templates/creation/new_alias_template.php new file mode 100644 index 0000000..7765be0 --- /dev/null +++ b/templates/creation/new_alias_template.php @@ -0,0 +1,95 @@ + + +

New Alias

+ + + +
+ + + + +
+ + + + + + + + + + + + + + +
Container DN: + +
Alias To: + +

+
+
+ + +
+ + + + + + + + + + + + + + +
+ Really create this new Alias entry?
+
+ + + + +
Container
alias
+
+
+
+ + + diff --git a/templates/creation/new_dns_entry.php b/templates/creation/new_dns_entry.php index 597e8b3..55faf03 100755 --- a/templates/creation/new_dns_entry.php +++ b/templates/creation/new_dns_entry.php @@ -1,91 +1,91 @@ - - -

New DNS Entry

- - - -
- - - - -
- - - - - - - - - - - - - - - - - - - - -
DC Name: (hint: don't include "dc=")
Associated Domain:
Container DN: -

-
- - - - - - - - - - - - - - - - - - -
- Really create this new DC entry?
-
- - - - - -
Name
Domain
Container
-
-
- - + + +

New DNS Entry

+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
DC Name: (hint: don't include "dc=")
Associated Domain:
Container DN: + +

+
+
+ + +
+ + + + + + + + + + + + + + + +
+ Really create this new DC entry?
+
+ + + + + +
Name
Domain
Container
+
+
+ + diff --git a/templates/creation/new_kolab_template.php b/templates/creation/new_kolab_template.php new file mode 100644 index 0000000..b72a408 --- /dev/null +++ b/templates/creation/new_kolab_template.php @@ -0,0 +1,300 @@ + + + + +

New Kolab Entry
+(extended InetOrgPerson)

+
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name (First/Last): + + +
Common name:
Email (uid):
Password:
Title:
E-Mail Alias:
Organization:
Organizational Unit:
Room number:
Address:
Post Box:
City:
Postal code:
Country:
Work phone:
Fax:
Container: + +

+
+
+ + +

Confirm entry creation:

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Common name:
First name:
Last name:
Organization:
City:
Postal code:
Street:
Work phone:
Fax:
Email:
Container:
+
+
+
+ + diff --git a/templates/creation/new_mozillaOrgPerson_template.php b/templates/creation/new_mozillaOrgPerson_template.php new file mode 100644 index 0000000..d5d08d8 --- /dev/null +++ b/templates/creation/new_mozillaOrgPerson_template.php @@ -0,0 +1,224 @@ + + */ + +// customize this to your needs +$default_container = "ou=Addresses"; + +// Common to all templates +$container = $_POST['container']; +$server_id = $_POST['server_id']; + +// Unique to this template +$step = isset( $_POST['step'] ) ? $_POST['step'] : 1; + +check_server_id( $server_id ) or pla_error( "Bad server_id: " . htmlspecialchars( $server_id ) ); +have_auth_info( $server_id ) or pla_error( "Not enough information to login to server. Please check your configuration." ); + +/** +* Data definition incl. group names +*/ +$arDataDef = array( + 'name' => array( + 'givenName' => 'Given name', + 'sn' => 'Last name', + 'cn' => 'Common name', + 'mozillanickname' => 'mozillaNickname' + ), + 'internet' => array( + 'mail' => 'Email', + 'mozillaSecondEmail' => 'Second email', +// 'mozilla_AimScreenName' => 'Screen name', +// 'mozillausehtmlmail' => 'Use HTML mail' + ), + 'Phones' => array( + 'telephoneNumber' => 'Work', + 'homePhone' => 'Home', + 'facsimileTelephoneNumber' => 'Fax', + 'pager' => 'Pager', + 'mobile' => 'Mobile' + ), + 'Home address' => array( + 'homePostalAddress' => 'Address', + 'mozillaHomePostalAddress2' => 'Address 2', + 'mozillaHomeLocalityName' => 'City', + 'mozillaHomeState' => 'State', + 'mozillaHomePostalCode' => 'ZIP', +// 'mozillaHomeFriendlyCountryName' => 'friendly Country', + 'mozillaHomeCountryName' => 'Country', + 'mozillaHomeUrl' => 'Web page' + ), + 'Work address' => array( + 'title' => 'Title', + 'ou' => 'Department', + 'o' => 'Organization', + 'postalAddress' => 'Address', + 'mozillaPostalAddress2' => 'Address 2', + 'l' => 'City', + 'st' => 'State/Province', + 'postalCode' => 'ZIP', + 'c' => 'Country', + 'mozillaWorkUrl' => 'Web page' + ), + 'Other' => array( +// 'custom1' => 'Custom 1', +// 'custom2' => 'Custom 2', +// 'custom3' => 'Custom 3', +// 'custom4' => 'Custom 4', +// 'description' => 'Notes' + ) +/**/ +); + +?> + + + +

New Address Book Entry
+(MozillaOrgPerson)

+
+ + + +
+ + + + +
+ + $arGroup) + { + echo '' . "\r\n"; + foreach( $arGroup as $strId => $strName) + { + if( $strId == 'sn' || $strId == 'givenName') { + $strAutoChange = ' onChange="autoFillCommonName(this.form)"'; + } else { + $strAutoChange = ''; + } + echo '' . "\r\n"; + echo '' . "\r\n"; + echo '' . "\r\n"; + echo '' . "\r\n"; + echo '' . "\r\n"; + } + } + +?> + + + + + + + + + +
' . htmlspecialchars( $strGroupName) . '
' . htmlspecialchars( $strName) . '
Container: + +

+
+
+ + $strName) { + $arData[$strId] = trim( $_POST[$strId]); + } + } + $container = $_POST['container']; + + /* Critical assertions */ + 0 != strlen( $arData['cn']) or + pla_error( "You cannot leave the Common Name blank. Please go back and try again." ); + + ?> +

Confirm entry creation:

+ +
+ + + + + + + + + + $strName) { + echo '' . "\r\n"; + echo '' . "\r\n"; + } + } + ?> +
+ + $arGroup) + { + echo ''; + foreach( $arGroup as $strId => $strName) + { + echo '' . "\r\n"; + echo ' ' . "\r\n"; + echo ' ' . "\r\n"; + echo '' . "\r\n"; + $strEven = $strEven == 'even' ? 'odd' : 'even'; + } + } + + ?> + + + + +
' . $strGroupName . '
' . $strName . ':' . htmlspecialchars( $arData[$strId] ) . '
Container:
+
+
+
+ + + + + diff --git a/templates/creation/new_nt_machine.php b/templates/creation/new_nt_machine.php index 8db0d95..8563be0 100644 --- a/templates/creation/new_nt_machine.php +++ b/templates/creation/new_nt_machine.php @@ -1,6 +1,6 @@ @@ -52,7 +52,7 @@ if( get_schema_objectclass( $server_id, 'sambaAccount' ) == null ) Container: - + diff --git a/templates/creation/new_organizationalRole.php b/templates/creation/new_organizationalRole.php new file mode 100644 index 0000000..c9f52ee --- /dev/null +++ b/templates/creation/new_organizationalRole.php @@ -0,0 +1,240 @@ + +

New Organizational Role
+(organizationalRole)

+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Role CN: (hint: don't include "cn=")
Phone:
Fax:
Comments:
Occupant DN:
+
Street Address
Address:City:
State:
ZIP:
Mailing Address
Address:City:
State:
ZIP:
Registered Mail Address
Address:City:
State:
ZIP:
Container DN:

+
+
+ +

Confirm entry creation:

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + +
Role CN:
Phone:
Fax:
Comments:
Occupant DN:
Street:'.htmlspecialchars($street2):''); ?>
City:
State:
Mailing Address:'.htmlspecialchars($mail_street2):'') . ((!empty($mail_city)||!empty($mail_state)||!empty($mail_zip))?'
':'') . ((!empty($mail_city))?htmlspecialchars($mail_city):'') . ((!empty($mail_state))?', '.htmlspecialchars($mail_state):'') . ((!empty($mail_zip))?' '.htmlspecialchars($mail_zip):'') : '' ?>
Registered Address:'.htmlspecialchars($reg_street2):'') . ((!empty($reg_city)||!empty($reg_state)||!empty($reg_zip))?'
':'') . ((!empty($reg_city))?htmlspecialchars($reg_city):'') . ((!empty($reg_state))?', '.htmlspecialchars($reg_state):'') . ((!empty($reg_zip))?' '.htmlspecialchars($reg_zip):'') : '' ?>
Container DN:
+
+
+ diff --git a/templates/creation/new_ou_template.php b/templates/creation/new_ou_template.php index 83e4b86..c546bc8 100644 --- a/templates/creation/new_ou_template.php +++ b/templates/creation/new_ou_template.php @@ -1,15 +1,12 @@ Container DN: - + -

+

+
Container DN: - + - Users: - (example: dsmith)
- -
+ Users: + + +
-

+

+ + +

New Postfix Mail Account
+(CourierMailAccount)

+
+ + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
uid:
Home Directory:
Mailbox:
Email:
Password:
Password:
Encryption:
Container: +

+
+
+ + +

Confirm entry creation:

+ +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
uid:
Home Directory:
Mailbox:
Email:
Password:[secret]
Container:
+
+
+
+ + diff --git a/templates/creation/new_postfix_alias_template.php b/templates/creation/new_postfix_alias_template.php new file mode 100644 index 0000000..fc76671 --- /dev/null +++ b/templates/creation/new_postfix_alias_template.php @@ -0,0 +1,94 @@ + + +

New Postfix Alias

+ + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + +
Container DN: + +
Mail:
Maildrop:

+
+
+ + +
+ + + + + + + + + + + + + + + +
+ Really create this new Alias entry?
+
+ + + + + +
Container
mail
maildrop
+
+
+
+ + + diff --git a/templates/creation/new_security_object_template.php b/templates/creation/new_security_object_template.php index 87be204..fe070d1 100644 --- a/templates/creation/new_security_object_template.php +++ b/templates/creation/new_security_object_template.php @@ -1,6 +1,5 @@ - + - + @@ -102,7 +101,7 @@ function autoFillHomeDir( form ) - + @@ -111,14 +110,15 @@ function autoFillHomeDir( form ) echo htmlspecialchars( $container ); else echo htmlspecialchars( $default_container . ',' . $servers[$server_id]['base'] ); ?>" /> - + - +
User name:
Password:
Container:


+ "aliases" + ); + +// Unique to this template +$step = 1; +if( isset($_POST['step']) ) + $step = $_POST['step']; + +check_server_id( $server_id ) or pla_error( "Bad server_id: " . htmlspecialchars( $server_id ) ); +have_auth_info( $server_id ) or pla_error( "Not enough information to login to server. Please check your configuration." ); +?> + + + +
+

New Sendmail Alias

+
+
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Sendmail cluster name:
Sendmail host name:Leave blank
Email alias:
Recipient addresses:
+ +

+
+
+ + +

Confirm sendmail domain creation:

+ +
+ + + " /> + + + + + + + + + + + + + + + + + + + + + + + + $default_val ) { ?> + + + + + + +
+ + + + + +
Sendmail cluster name:
Sendmail host name:
Email alias:
Recipient addresses: + \n"; + } ?> +
+
+
+ + diff --git a/templates/creation/new_sendmail_cluster_template.php b/templates/creation/new_sendmail_cluster_template.php new file mode 100644 index 0000000..4922cb4 --- /dev/null +++ b/templates/creation/new_sendmail_cluster_template.php @@ -0,0 +1,118 @@ + + + + +
+

New Sendmail Cluster

+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + +
Sendmail cluster name:
+ +

+
+
+ + +

Confirm sendmail domain creation:

+ +
+ + + " /> + + + + + + + + + + + $default_val ) { ?> + + + + + + +
+ + +
Sendmail cluster name:
+
+
+ + diff --git a/templates/creation/new_sendmail_domain_template.php b/templates/creation/new_sendmail_domain_template.php new file mode 100644 index 0000000..b0e8d69 --- /dev/null +++ b/templates/creation/new_sendmail_domain_template.php @@ -0,0 +1,141 @@ + 'w', + ); + +// Unique to this template +$step = 1; +if( isset($_POST['step']) ) + $step = $_POST['step']; + +check_server_id( $server_id ) or pla_error( "Bad server_id: " . htmlspecialchars( $server_id ) ); +have_auth_info( $server_id ) or pla_error( "Not enough information to login to server. Please check your configuration." ); +?> + + + +
+

New Sendmail Domain

+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Sendmail cluster name:
Sendmail host name:Leave blank
Email domain:
+ +

+
+
+ + +

Confirm sendmail domain creation:

+ +
+ + + " /> + + + + + + + + + + + + + + + + + $default_val ) { ?> + + + + + + +
+ + + + +
Sendmail cluster name:
Sendmail host name:
Email domain:
+
+
+ + diff --git a/templates/creation/new_sendmail_relay_template.php b/templates/creation/new_sendmail_relay_template.php new file mode 100644 index 0000000..fca3b44 --- /dev/null +++ b/templates/creation/new_sendmail_relay_template.php @@ -0,0 +1,213 @@ + 'access', + ); + +// Unique to this template +$step = 1; +if( isset($_POST['step']) ) + $step = $_POST['step']; + +check_server_id( $server_id ) or pla_error( "Bad server_id: " . htmlspecialchars( $server_id ) ); +have_auth_info( $server_id ) or pla_error( "Not enough information to login to server. Please check your configuration." ); +?> + + + + + +
+

New Sendmail Relay

+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Sendmail cluster name:
Sendmail host name:Leave blank
Host/Network/Address:
Relay control: + +
Custom error
+ +

+
+
+ + + + +

Confirm sendmail domain creation:

+ +
+ + + " /> + + + + + + + + + + + + + + + + + + + + + + + $default_val ) { ?> + + + + + + +
+ + + + + + + +
Sendmail cluster name:
Sendmail host name:
Host/Network/Address:
Relay Control:
Custom error:
+
+
+ + diff --git a/templates/creation/new_sendmail_virthost_template.php b/templates/creation/new_sendmail_virthost_template.php new file mode 100644 index 0000000..a210cd0 --- /dev/null +++ b/templates/creation/new_sendmail_virthost_template.php @@ -0,0 +1,141 @@ + 'VirtHost', + ); + +// Unique to this template +$step = 1; +if( isset($_POST['step']) ) + $step = $_POST['step']; + +check_server_id( $server_id ) or pla_error( "Bad server_id: " . htmlspecialchars( $server_id ) ); +have_auth_info( $server_id ) or pla_error( "Not enough information to login to server. Please check your configuration." ); +?> + + + +
+

New Sendmail Virtual Domain

+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Sendmail cluster name:
Sendmail host name:Leave blank
Virtual email domain:
+ +

+
+
+ + +

Confirm sendmail domain creation:

+ +
+ + + " /> + + + + + + + + + + + + + + + + + $default_val ) { ?> + + + + + + +
+ + + + +
Sendmail cluster name:
Sendmail host name:
Email domain:
+
+
+ + diff --git a/templates/creation/new_sendmail_virtuser_template.php b/templates/creation/new_sendmail_virtuser_template.php new file mode 100644 index 0000000..4ee48a3 --- /dev/null +++ b/templates/creation/new_sendmail_virtuser_template.php @@ -0,0 +1,153 @@ + 'virtuser', + ); + +// Unique to this template +$step = 1; +if( isset($_POST['step']) ) + $step = $_POST['step']; + +check_server_id( $server_id ) or pla_error( "Bad server_id: " . htmlspecialchars( $server_id ) ); +have_auth_info( $server_id ) or pla_error( "Not enough information to login to server. Please check your configuration." ); +?> + + + +
+

New Sendmail Virtual User

+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Sendmail cluster name:
Sendmail host name:Leave blank
Virtual email address:use @domain.com to map entire domain
Recipient address:use %1 to map user name port of address
+ +

+
+
+ + +

Confirm sendmail domain creation:

+ +
+ + + " /> + + + + + + + + + + + + + + + + + + + + $default_val ) { ?> + + + + + + +
+ + + + + +
Sendmail cluster name:
Sendmail host name:
Virtual email address:
Recipient email address:
+
+
+ + diff --git a/templates/creation/new_smb3_nt_machine.php b/templates/creation/new_smb3_nt_machine.php index 2eaa527..ef078c8 100644 --- a/templates/creation/new_smb3_nt_machine.php +++ b/templates/creation/new_smb3_nt_machine.php @@ -1,6 +1,5 @@ + gidNumber = form.gid_number.value; + if( form.samba_group[0].checked ){ + form.custom_rid.value = ""; + } + else { + form.custom_rid.value = (2*gidNumber)+1001; + } +} +--> +

New Samba3 User Account

- + @@ -72,11 +95,14 @@
- + - + + @@ -84,9 +110,9 @@ + - - + @@ -101,28 +127,83 @@ + onChange="autoFillHomeDir(this.form)" onExit="autoFillHomeDir(this.form,this)" /> - + - + - + - + - + + + + + + + @@ -146,37 +227,62 @@ echo htmlspecialchars( $container ); else echo htmlspecialchars( $default_container . ',' . $servers[$server_id]['base'] ); ?>" /> - + - - - + + + + - + - + + + + + + + + +
+
Custom:
+
+ + +
+
+ + @@ -184,20 +290,22 @@ - + - - + + - +
UID Number: + (automatically determined)"; ?> +
-
First name: User name:
Password:User Password:
Password:User Password:
Encryption: - - crypt -
Samba Password: +
+
+ + Use Unix Password +
+
+ + Null Password +
+
+ + No Password +
+
+ + + + + +
New Password : +
+
+
+
+
+ + + + + + + +
Existing Password :
+
+ LM Password: + +
+
+ NT Password: + +
+
+
+
+
Login Shell:
Unix Group:: + + + +
+
Windows Group: +
+
+
Built-In:
+
+


Note: To change the value(s) of the samba domain sid, please edit the file :
templates/template_config.php
To change the value(s) of the samba domain sid, please edit the file :
templates/template_config.php
+
+ createSambaPasswords( $clearSambaPassword ) ){ + $sambaLMPassword = $mkntPassword->getsambaLMPassword(); + $sambaNTPassword = $mkntPassword->getsambaNTPassword(); + $smb_passwd_creation_success = 1; + } } ?> @@ -266,7 +420,7 @@ - + @@ -284,14 +438,13 @@ - +
@@ -299,14 +452,19 @@ User name: First name: Last name: - UID Number: - Login Shell: - Samba SID: - GID Number: + Login Shell: + UID Number: + Samba SID: + GID Number: + Samba Group Sid: Container: Home dir: + User Password:[secret] - Password:[secret] + Samba Password:[secret] + Password Last Set: + Password Can Change: + Password Must Change:
diff --git a/templates/creation/new_smbgroup_template.php b/templates/creation/new_smbgroup_template.php index 6f2aca1..4686d80 100644 --- a/templates/creation/new_smbgroup_template.php +++ b/templates/creation/new_smbgroup_template.php @@ -1,5 +1,5 @@

New Samba Group Mapping

@@ -66,19 +60,20 @@ function autoFillSambaRID( form ){ - - + + - + - + + + + + + + + - + + + + + + - + + + + + - - - - - - - - - - - - - - - - + - - - - - + + + + + + + - + + + + + + + + + + + + + + + + - 0 ) { if( $children_count == $max_children ) @@ -130,254 +110,139 @@ if( ($children_count = count( $children ) ) > 0 ) { ?> - - - - - - - 0 ) { ?> - - - - + + + + - - + - - - - + + + + - + - + 1 ) { ?> - + - + - - + $attr ) { + $modified_attrs[$i] = strtolower( $attr ); + } +} +?>
Samba Group Name: (example: admins, do not include "cn=")Unix Name: (example: admins, do not include "cn=")
Display Name:Windows Name:
GID Number: (example: 2000) (example: 2000)
Samba Sid: +
+
+
Built-In:
+
+ +
+
+
+
Custom:
+
+ + +
+
+
+
Container DN: -
SambaGroupType Number:SambaGroupType :
Description:
Members: (example: dsmith)
@@ -130,15 +170,31 @@ function autoFillSambaRID( form ){ - + @@ -161,16 +217,19 @@ function autoFillSambaRID( form ){ - + - " /> + - + + + + @@ -179,13 +238,14 @@ function autoFillSambaRID( form ){ Really create this new Posix Group entry?

- + - + - + @@ -195,5 +255,3 @@ function autoFillSambaRID( form ){ - - diff --git a/templates/creation/new_smbuser_template.php b/templates/creation/new_smbuser_template.php index dcb3853..9daddaa 100644 --- a/templates/creation/new_smbuser_template.php +++ b/templates/creation/new_smbuser_template.php @@ -1,5 +1,5 @@ " /> - + diff --git a/templates/creation/new_user_template.php b/templates/creation/new_user_template.php index e824199..8a33c44 100644 --- a/templates/creation/new_user_template.php +++ b/templates/creation/new_user_template.php @@ -1,6 +1,5 @@
-

New User Account

+

-Hint: To customize this template, edit the file templates/creation/new_user_template.php
+

@@ -98,41 +108,46 @@ function autoFillHomeDir( form )
- +
Name
Common Name
Container
display Name
gidNumber
sambaSid
sambaSID
sambaGroupType
Member UIDs +
description
Member UIDs $uid ) echo htmlspecialchars($uid) . "
"; ?>
- + - + - + - + + + + + + - + - + - + - + - + - + - + + - + - - + + - - + + + - +
First name::
Last name::
User name::
:
Password::
Password::
Encryption::
Login Shell::
Container:: -
Home Directory::
UID Number:: - (automatically determined)"; ?> + " . $lang['t_auto_det'] . ""; ?>
Group:: + + + +
+


+ + -

Confirm account creation:

+

:

+ + + @@ -245,10 +287,12 @@ function autoFillHomeDir( form ) - + + + @@ -270,17 +314,19 @@ function autoFillHomeDir( form )
- - - - - - - - - + + + + + + + + + +
User name:
First name:
Last name:
Password:[secret]
Login Shell:
UID Number:
GID Number:
Container:
Home dir:
:
:
:
:
:
:
:
:
:
-
+
+
diff --git a/templates/modification/default.php b/templates/modification/default.php index 224d412..c46afd2 100644 --- a/templates/modification/default.php +++ b/templates/modification/default.php @@ -1,4 +1,6 @@ -getMustAttrNames( $schema_oclasses ), - $schema_oclass->getMayAttrNames( $schema_oclasses ), - $avail_attrs ); - } - - $avail_attrs = array_unique( $avail_attrs ); - $avail_attrs = array_filter( $avail_attrs, "not_an_attr" ); - sort( $avail_attrs ); - - $avail_binary_attrs = array(); - foreach( $avail_attrs as $i => $attr ) { - if( is_attr_binary( $server_id, $attr ) ) { - $avail_binary_attrs[] = $attr; - unset( $avail_attrs[ $i ] ); - } - } -} - include 'header.php'; ?> @@ -73,55 +54,54 @@ include 'header.php'; ?>
- (mac) - (win) - (unix) -
">">
- (mac) - (win) - (unix) +
+ + +
+ - - -
- - - - - - - - - - - - - - - - - - - - - - - - 0 ) { ?> - - - - - - - - - - - - - - - - - $vals ) { $counter++; - $schema_href = "schema.php?server_id=$server_id&view=attributes&viewvalue=" . real_attr_name($attr); + $schema_href = "schema.php?server_id=$server_id&view=attributes&viewvalue=" . real_attr_name($attr); ?> - - + + \n"; + echo "\n"; } ?> - - - - - + - 0 ) - foreach( $hidden_attrs as $i => $attr_name ) - $hidden_attrs[$i] = strtolower( $attr_name ); - else - $hidden_attrs = array(); -?> + $vals ) { +if( ! $attrs || ! is_array( $attrs ) ) { + echo "\n"; + echo "
- -
- - - - -
-
-
- - - - - - 0 ) { ?> - - - - - - - - () - - -
- - - - - - - - - - -
- - - - - - - - - - - -() - - - - -
+
- -
- + + +
+ 1 ) { for( $i=1; $i<=count($vals); $i++ ) { ?> + "> ()
+ +
+ \n"; + } + } ?>
(" . $lang['none'] . ")
(" . $lang['no_internal_attributes'] . ")
- -
(" . $lang['no_attributes'] . ")
"; + echo ""; + die(); +} + +uksort( $attrs, 'sortAttrs' ); +foreach( $attrs as $attr => $vals ) { flush(); - if( ! is_server_read_only( $server_id ) ) { - $schema_attr = get_schema_attribute( $server_id, $attr, $dn ); - if( $schema_attr ) - $attr_syntax = $schema_attr->getSyntaxOID(); - else - $attr_syntax = null; - } + $schema_attr = get_schema_attribute( $server_id, $attr, $dn ); + if( $schema_attr ) + $attr_syntax = $schema_attr->getSyntaxOID(); + else + $attr_syntax = null; if( 0 == strcasecmp( $attr, 'dn' ) ) continue; - // has the config.php specified that this attribute is to be hidden? - if( in_array( strtolower( $attr ), $hidden_attrs ) ) - continue; + // has the config.php specified that this attribute is to be hidden or shown? + if( is_attr_hidden( $server_id, $attr)) + continue; + + // Setup the $attr_note, which will be displayed to the right of the attr name (if any) + $attr_note = ''; // is there a user-friendly translation available for this attribute? if( isset( $friendly_attrs[ strtolower( $attr ) ] ) ) { @@ -388,27 +253,53 @@ if( $show_internal_attrs ) { $attr_display = $attr; } + // is this attribute required by an objectClass? + $required_by = ''; + if( $schema_attr ) + foreach( $schema_attr->getRequiredByObjectClasses() as $required ) + if( in_array( strtolower( $required ), arrayLower( $attrs['objectClass'] ) ) ) + $required_by .= $required . ' '; + if( $required_by ) { + if( trim( $attr_note ) ) + $attr_note .= ', '; + $attr_note .= "" . $lang['required'] . " "; + } ?> - + + + - - - - - + - - - -
+ + + + + + + () + + + - + + + + + + \n"; + if( $is_modified_attr ) + echo ''; continue; } @@ -445,36 +339,51 @@ if( $show_internal_attrs ) {
- +
+ - '; + continue; } + /* * Note: at this point, the attribute must be text-based (not binary or jpeg) */ + /* - * If we are in read-only mode, simply draw the attribute values and continue. + * If this server is in read-only mode or this attribute is configured as read_only, + * simply draw the attribute values and continue. */ - if( is_server_read_only( $server_id ) ) { + if( is_server_read_only( $server_id ) || is_attr_read_only( $server_id, $attr ) ) { if( is_array( $vals ) ) { foreach( $vals as $i => $val ) { - $val = ( $val ); - if( $val == "" ) - echo "[empty]
\n"; + if( trim( $val ) == "" ) + echo "[" . $lang['empty'] . "]
\n"; + elseif( 0 == strcasecmp( $attr, 'userPassword' ) && obfuscate_password_display() ) + echo preg_replace( '/./', '*', $val ) . "
"; else - echo $val . "
"; + echo htmlspecialchars( $val ) . "
"; } } else { - echo ( $vals ) . "
"; + if( 0 == strcasecmp( $attr, 'userPassword' ) && obfuscate_password_display() ) + echo preg_replace( '/./', '*', $vals ) . "
"; + else + echo $vals . "
"; } + echo ""; + echo ""; + if( $is_modified_attr ) + echo ''; continue; } @@ -483,38 +392,13 @@ if( $show_internal_attrs ) { */ if( 0 == strcasecmp( $attr, 'userpassword' ) ) { $user_password = $vals[0]; - - /* Capture the stuff in the { } to determine if this is crypt, md5, etc. */ - if( preg_match( "/{([^}]+)}/", $user_password, $enc_type) ) - $enc_type = strtolower($enc_type[1]); - else - $enc_type = null; + $enc_type = get_enc_type( $user_password ); - // Set the default hashing type if the password is blank (must be newly created) - if( $val == '' ) { - $enc_type = $servers[$server_id]['default_hash']; - } ?> - - + // Set the default hashing type if the password is blank (must be newly created) + if( $user_password == '' ) { + $enc_type = get_default_hash( $server_id ); + } + ?> - + +
+ - + + + + + + + '; + continue; } /* * Is this a boolean attribute? */ - $type = ( $schema_attr = get_schema_attribute( $server_id, $attr, $dn ) ) ? - $schema_attr->getType() : - null; - - if( 0 == strcasecmp( 'boolean', $type ) ) { + if( is_attr_boolean( $server_id, $attr) ) { $val = $vals[0]; - ?> + + '; continue; } /* - * End of special case attributes. + * End of special case attributes (non plain text). */ + /* - * This is a normal attribute, to be displayed and edited in plain text. + * This is a plain text attribute, to be displayed and edited in plain text. */ foreach( $vals as $i => $val ) { - $val = ( $val ); ?> - + $input_name = "new_values[" . htmlspecialchars( $attr ) . "][$i]"; + // We smack an id="..." tag in here that doesn't have [][] in it to allow the + // draw_chooser_link() to identify it after the user clicks. + $input_id = "new_values_" . htmlspecialchars($attr) . "_" . $i; + + ?> + + + + type == 'structural') { + echo "$val (" . + $lang['structural'] . ")
"; + ?> + + - -
- -

- + + + + + + + + + + + + + + + + + 0 ) { + echo "
"; + $group = array_pop( $group ); + $group_dn = $group['dn']; + $group_name = explode( '=', get_rdn( $group_dn ) ); + $group_name = $group_name[1]; + $href = "edit.php?server_id=$server_id&dn=" . urlencode( $group_dn ); + echo ""; + echo "" . htmlspecialchars($group_name) . ""; + $description = isset( $group['description'] ) ? $group['description'] : null; + if( $description ) echo " (" . htmlspecialchars( $description ) . ")"; + echo ""; + } + } + + ?> + +
+ + + + + $vals ) */ ?> -
+
\n"; ?> diff --git a/templates/modification/group_of_names.php b/templates/modification/group_of_names.php new file mode 100644 index 0000000..4c0c921 --- /dev/null +++ b/templates/modification/group_of_names.php @@ -0,0 +1,142 @@ + + + + +
+ + + + + + + + +
+ +

Group:

+ +
+ Using the group of names template. + You may switch to the default template +
+ +List of Members (' . ( $unique ? 'unique' : 'non-unique' ) . ')

'; +if( ! is_array( $members ) || 0 == count( $members ) ) { + echo "(none)"; + echo "
"; + echo "
"; +} else { + echo "
    "; + for( $i=0; $i"; + echo ""; + echo htmlspecialchars( $member ) . ""; + echo " (remove)"; + + $member_cn = get_object_attr( $server_id, $member, 'cn' ); + $member_cn = @$member_cn[0]; + $member_sn = get_object_attr( $server_id, $member, 'sn' ); + $member_sn = @$member_sn[0]; + echo ''; + // Don't display the SN if it is a subset of the CN + if( false !== strpos( $member_cn, $member_sn ) ) + $member_sn = ' '; + if( $member_sn && $member_cn ) + echo '
      Name: ' . htmlspecialchars( $member_cn . ' ' . $member_sn ); + $object_classes = get_object_attr( $server_id, $member, 'objectClass' ); + if( is_array( $object_classes ) ) + echo '
      objectClasses: ' . implode( ', ', $object_classes ); + echo '
    '; + ""; + } + echo "
"; +} + +?> + + + + +
+ + + + +
+ Add a new member:
+ +
+ +
+
+ diff --git a/templates/modification/samba_account.php b/templates/modification/samba_account.php new file mode 100644 index 0000000..bc6c676 --- /dev/null +++ b/templates/modification/samba_account.php @@ -0,0 +1,32 @@ + + +

+
+ ' . $lang['samba_account_lcase'] . '' . $lang['template'] . '.'; ?> + ' . $lang['default_template'] . ''; ?> +
+

TO DO

+ + diff --git a/templates/modification/user.php b/templates/modification/user.php index da3de27..1694dac 100644 --- a/templates/modification/user.php +++ b/templates/modification/user.php @@ -1,4 +1,6 @@ - -
Using the user template. You may switch to the default template diff --git a/templates/template_config.php b/templates/template_config.php index 4734969..3f713c0 100644 --- a/templates/template_config.php +++ b/templates/template_config.php @@ -1,4 +1,6 @@ 'User Account', + array( 'desc' => $lang['user_account'], // 'User Account (posixAccount)', 'icon' => 'images/user.png', 'handler' => 'new_user_template.php' ); - // You can use the 'regexp' directive to restrict where - // entries can be created for this template + // You can use the 'regexp' directive to restrict where + // entries can be created for this template //'regexp' => '^ou=People,o=.*,c=.*$' - //'regexp' => '^ou=People,dc=.*,dc=.*$' + //'regexp' => '^ou=People,dc=.*,dc=.*$' $templates[] = - array( 'desc' => 'Address Book Entry (inetOrgPerson)', + array( 'desc' => $lang['address_book_inet'], // 'Address Book Entry (inetOrgPerson)', 'icon' => 'images/user.png', 'handler' => 'new_address_template.php' ); $templates[] = - array( 'desc' => 'Organizational Unit', + array( 'desc' => $lang['address_book_moz'], // 'Address Book Entry (mozillaOrgPerson)', + 'icon' => 'images/user.png', + 'handler' => 'new_mozillaOrgPerson_template.php' ); + +$templates[] = + array( 'desc' => $lang['kolab_user'], // 'Kolab User Entry', + 'icon' => 'images/user.png', + 'handler' => 'new_kolab_template.php' ); + +$templates[] = + array( 'desc' => $lang['organizational_unit'], // 'Organizational Unit', 'icon' => 'images/ou.png', 'handler' => 'new_ou_template.php' ); $templates[] = - array( 'desc' => 'Posix Group', + array( 'desc' => $lang['organizational_role'], // 'Organizational Role', + 'icon' => 'images/o.png', + 'handler' => 'new_organizationalRole.php' ); + +$templates[] = + array( 'desc' => $lang['posix_group'], // 'Posix Group', 'icon' => 'images/ou.png', 'handler' => 'new_posix_group_template.php' ); $templates[] = - array( 'desc' => 'Samba NT Machine', + array( 'desc' => $lang['samba_machine'], // 'Samba NT Machine', 'icon' => 'images/nt_machine.png', 'handler' => 'new_nt_machine.php' ); $templates[] = - array( 'desc' => 'Samba 3 NT Machine', + array( 'desc' => $lang['samba3_machine'], // 'Samba 3 NT Machine', 'icon' => 'images/nt_machine.png', 'handler' => 'new_smb3_nt_machine.php' ); -/*$templates[] = - array( 'desc' => 'Samba User', - 'icon' => 'images/nt_user.png', - 'handler' => 'new_smbuser_template.php' ); -*/ + $templates[] = - array( 'desc' => 'Samba 3 User', + array( 'desc' => $lang['samba3_user'], // 'Samba 3 User', 'icon' => 'images/nt_user.png', 'handler' => 'new_smb3_user_template.php' ); + $templates[] = - array( 'desc' => 'Samba 3 Group Mapping', + array( 'desc' => $lang['samba_user'], // 'Samba User', + 'icon' => 'images/nt_user.png', + 'handler' => 'new_smbuser_template.php' ); + +$templates[] = + array( 'desc' => $lang['samba3_group'], // 'Samba 3 Group Mapping', 'icon' => 'images/ou.png', 'handler' => 'new_smbgroup_template.php' ); $templates[] = - array( 'desc' => 'DNS Entry', + array( 'desc' => $lang['dns_entry'], // 'DNS Entry', 'icon' => 'images/dc.png', 'handler' => 'new_dns_entry.php' ); $templates[] = - array( 'desc' => 'Simple Security Object', - 'icon' => 'images/user.png', - 'handler' => 'new_security_object_template.php' ); + array( 'desc' => $lang['simple_sec_object'], // 'Simple Security Object', + 'icon' => 'images/user.png', + 'handler' => 'new_security_object_template.php' ); $templates[] = - array( 'desc' => 'Custom', - 'icon' => 'images/object.png', - 'handler' => 'custom.php' ); + array( 'desc' => $lang['courier_mail_account'], // 'Courier Mail Account', + 'icon' => 'images/mail_account.png', + 'handler' => 'new_postfix_account_template.php' ); + +$templates[] = + array( 'desc' => $lang['courier_mail_alias'], // 'Courier Mail Alias', + 'icon' => 'images/mail_alias.png', + 'handler' => 'new_postfix_alias_template.php' ); + +$templates[] = + array( 'desc' => $lang['ldap_alias'], // 'LDAP Alias', + 'icon' => 'images/go.png', + 'handler' => 'new_alias_template.php' ); +$templates[] = + array( 'desc' => $lang['sendmail_cluster'], // 'Sendmail Cluster', + 'icon' => 'images/mail.png', + 'handler' => 'new_sendmail_cluster_template.php' ); + + $templates[] = + array( 'desc' => $lang['sendmail_domain'], // 'Sendmail Domain', + 'icon' => 'images/mail.png', + 'handler' => 'new_sendmail_domain_template.php' ); + + $templates[] = + array( 'desc' => $lang['sendmail_alias'], // 'Sendmail Alias', + 'icon' => 'images/mail.png', + 'handler' => 'new_sendmail_alias_template.php' ); + + $templates[] = + array( 'desc' => $lang['sendmail_virt_dom'], // 'Sendmail Virtual Domain', + 'icon' => 'images/mail.png', + 'handler' => 'new_sendmail_virthost_template.php' ); + + $templates[] = + array( 'desc' => $lang['sendmail_virt_users'], // 'Sendmail Virtual Users', + 'icon' => 'images/mail.png', + 'handler' => 'new_sendmail_virtuser_template.php' ); + + $templates[] = + array( 'desc' => $lang['sendmail_relays'], // 'Sendmail Relays', + 'icon' => 'images/mail.png', + 'handler' => 'new_sendmail_relay_template.php' ); + +$templates[] = + array( 'desc' => $lang['custom'], // 'Custom', + 'icon' => 'images/object.png', + 'handler' => 'custom.php' ); + +/*##################################################################################### +## POSIX GROUP TEMPLATE CONFIGURATION ## +## ---------------------------------- ## +## ## +#####################################################################################*/ + +// uncomment to set the base dn of posix groups +// default is set to the base dn of the server +//$base_posix_groups="ou=People,dc=example,dc=com"; + + /*###################################################################################### @@ -92,20 +167,34 @@ $templates[] = ## ## ## In order to use the samba templates, you might edit the following properties: ## ## 1 - $mkntpwdCommand : the path to the mkntpwd utility provided with/by Samba. ## -## 2 - $default_samba3_domains : the domain name and the domain sid. ## +## 2 - $samba3_domains : the domain name and the domain sid. ## ## ## ######################################################################################*/ // path 2 the mkntpwd utility (Customize) -$mkntpwdCommand = "./templates/creation/mkntpwd"; +$mkntpwdCommand = "/usr/local/bin/mkntpwd"; // Default domains definition (Customize) -$default_samba3_domains = array(); -$default_samba3_domains[] = - array( 'name' => 'My Samba domain Name', - 'sid' => 'S-1-5-21-1234567891-123456789-123456789' ); +// (use `net getlocalsid` on samba server) +$samba3_domains = array(); +$samba3_domains[] = +array( 'name' => $lang['samba_domain_name'], // 'My Samba domain Name', + 'sid' => 'S-1-5-21-4147564533-719371898-3834029857' ); + +// The base dn of samba group. (CUSTOMIZE) +//$samba_base_groups = "ou=Groups,ou=samba,dc=example,dc=org"; +//Definition of built-in local groups +$built_in_local_groups = array( "S-1-5-32-544" => $lang['administrators'], // "Administrators", + "S-1-5-32-545" => $lang['users'], // "Users", + "S-1-5-32-546" => $lang['guests'], // "Guests", + "S-1-5-32-547" => $lang['power_users'], // "Power Users", + "S-1-5-32-548" => $lang['account_ops'], // "Account Operators", + "S-1-5-32-549" => $lang['server_ops'], // "Server Operators", + "S-1-5-32-550" => $lang['print_ops'], // "Print Operators", + "S-1-5-32-551" => $lang['backup_ops'], // "backup Operators", + "S-1-5-32-552" => $lang['replicator'] ); // "Replicator" ); /*###################################################################################### @@ -123,32 +212,32 @@ $default_samba3_domains[] = function get_template( $server_id, $dn ) { + // fetch and lowercase all the objectClasses in an array + $object_classes = get_object_attr( $server_id, $dn, 'objectClass', true ); - // For now, just use default. We will add more templates for 0.9.2. - // If you have custom modification templates, just modify this. - return 'default'; + if( $object_classes === null || $object_classes === false) + return 'default'; - // fetch and lowercase all the objectClasses in an array - $object_classes = get_object_attr( $server_id, $dn, 'objectClass', true ); + foreach( $object_classes as $i => $class ) + $object_classes[$i] = strtolower( $class ); - if( $object_classes === null || $object_classes === false) - return 'default'; + $rdn = get_rdn( $dn ); + if( in_array( 'groupofnames', $object_classes ) || + in_array( 'groupofuniquenames', $object_classes ) ) + return 'group_of_names'; + /* + if( in_array( 'person', $object_classes ) && + in_array( 'posixaccount', $object_classes ) ) + return 'user'; + */ + // TODO: Write other templates and criteria therefor + // else if ... + // return 'some other template'; + // else if ... + // return 'some other template'; + // etc. - foreach( $object_classes as $i => $class ) - $object_classes[$i] = strtolower( $class ); - - $rdn = get_rdn( $dn ); - if( in_array( 'person', $object_classes ) && - in_array( 'posixaccount', $object_classes ) ) - return 'user'; - // TODO: Write other templates and criteria therefor - // else if ... - // return 'some other template'; - // else if ... - // return 'some other template'; - // etc. - - return 'default'; + return 'default'; } /** @@ -157,11 +246,80 @@ function get_template( $server_id, $dn ) */ function get_samba3_domains(){ - global $default_samba3_domains; - + global $samba3_domains; + // do the search for the sambadomainname object here - // In the meantime, just return the default domains - return $default_samba3_domains; + // In the meantime, just return the domains defined in this config file + check_samba_setting(); + return $samba3_domains; +} + + +/** + * Utily class to get the samba passwords. + */ + +class MkntPasswdUtil{ + + + var $clearPassword = NULL; + var $sambaPassword ; + function MkntPasswdUtil(){ + $sambaPassword = array("sambaLMPassword" => NULL, + "sambaNTPassword" => NULL); + } + + function createSambaPasswords($password){ + global $mkntpwdCommand, $lang; + $this->clearPassword = $password; + file_exists ( $mkntpwdCommand ) && is_executable ( $mkntpwdCommand ) or pla_error( $lang['unable_smb_passwords'] ); + $sambaPassCommand = $mkntpwdCommand . " " . $password; + if($sambaPassCommandOutput = shell_exec($sambaPassCommand)){ + $this->sambaPassword['sambaLMPassword'] = trim( substr( $sambaPassCommandOutput , 0 , strPos( $sambaPassCommandOutput,':' ) ) ); + $this->sambaPassword['sambaNTPassword'] = trim( substr( $sambaPassCommandOutput, strPos( $sambaPassCommandOutput ,':' ) +1 ) ); + return true; + } + else{ + return false; + } + } + + function getSambaLMPassword(){ + return $this->sambaPassword['sambaLMPassword']; + } + + function getSambaNTPassword(){ + return $this->sambaPassword['sambaNTPassword']; + } + + function getSambaClearPassword(){ + return $this->clearPassword; + } + + function valueOf($key){ + return $this->sambaPassword[$key]; + } + +} + +function check_samba_setting(){ + global $samba3_domains; + + // check if the samba3_domains exist and is a array + ( isset($samba3_domains ) && is_array( $samba3_domains ) ) or pla_error($lang['err_smb_conf']); + //"Error: You have an error in your samba confguration."); + + // no definition for the samba domain + if(empty($samba3_domains)) + pla_error($lang['err_smb_no_name_sid']); + // "Error: A name and a sid for your samba domain need to be provided."); + else{ + // check if there is name or a sid declared for each domains + foreach($samba3_domains as $samba3_domain){ + isset($samba3_domain['name']) or pla_error($lang['err_smb_no_name']); // "Error: No name provided for samba domain."); + isset($samba3_domain['sid']) or pla_error($lang['err_smb_no_sid']); // "Error: No sid provided for samba domain."); + } + } } ?> diff --git a/tree.php b/tree.php index 90b2a35..16d4443 100644 --- a/tree.php +++ b/tree.php @@ -1,4 +1,5 @@ +// Close the session for faster page loading (we're done with session data anyway). +pla_session_close(); + +include './header.php'; +?> -

phpLDAPadmin -

+ + + - - + + + + + + + + + + + - - + + + +
- <?php echo $lang['light']; ?><?php echo $lang['bug']; ?>
<?php echo $lang['donate']; ?><?php echo $lang['purge_cache']; ?>
- <?php echo $lang['home']; ?><?php echo $lang['help']; ?>
@@ -67,193 +76,22 @@ include 'header.php'; ?> $server_tree ) { - if( $servers[$server_id]['host'] != '' ) { + $is_visible = ( ! isset( $servers[ $server_id ][ 'visible' ] ) + || ( $servers[ $server_id ][ 'visible' ] === true ) ); + if( isset( $servers[ $server_id ] ) + && trim( $servers[ $server_id ][ 'host' ] ) != '' + && $is_visible ) + { + $filename = get_custom_file( $server_id, 'tree_functions.php' ); + require_once( $filename ); - // Does this server want mass deletion availble? - if( mass_delete_enabled( $server_id ) ) { - echo "
\n"; - echo "\n"; - } - - $server_name = $servers[$server_id]['name']; - echo ''; - echo 'server'; - echo ''; - echo '' . htmlspecialchars( $server_name ) . ''; - echo ''; - - // do we have what it takes to authenticate here, or do we need to - // present the user with a login link (for 'form' auth_types)? - if( have_auth_info( $server_id ) ) { - - if( pla_ldap_connect( $server_id ) ) { - $schema_href = 'schema.php?server_id=' . $server_id . '" target="right_frame'; - $search_href= 'search.php?server_id=' . $server_id . '" target="right_frame'; - $refresh_href = 'refresh.php?server_id=' . $server_id; - $create_href = 'create_form.php?server_id=' . $server_id . '&container=' . - rawurlencode( $servers[$server_id]['base'] ); - $logout_href = 'logout.php?server_id=' . $server_id; - $info_href = 'server_info.php?server_id=' . $server_id; - $import_href = 'ldif_import_form.php?server_id=' . $server_id; - - // Draw the quick-links below the server name: - // ( schema | search | refresh | create ) - echo ''; - echo ''; - echo '( '; - echo '' . $lang['schema'] . ' | '; - echo '' . $lang['search'] . ' | '; - echo '' . $lang['refresh'] . ' | '; - echo '' . $lang['create'] . ' | '; - echo '' . $lang['info'] . ' | '; - echo '' . $lang['import'] . ''; - if( $servers[ $server_id ][ 'auth_type' ] == 'form' ) - echo ' | ' . $lang['logout'] . ''; - echo ' )'; - - if( $servers[$server_id]['auth_type'] == 'form' && have_auth_info( $server_id ) ) - echo "" . - $lang['logged_in_as'] . "" . - htmlspecialchars(get_logged_in_dn($server_id)) . "" . - ""; - if( is_server_read_only( $server_id ) ) - echo "" . - "(" . $lang['read_only'] . ")"; - - // Fetch and display the base DN for this server - if( null == $servers[ $server_id ]['base'] ) { - $base_dn = try_to_get_root_dn( $server_id ); - } else { - $base_dn = $servers[ $server_id ]['base']; - } - - // Did we get a base_dn for this server somehow? - if( $base_dn ) { - - echo "\n\n\n\n"; - - // is the root of the tree expanded already? - if( isset( $tree[$server_id][$base_dn] ) ) { - $expand_href = "collapse.php?server_id=$server_id&" . - "dn=" . rawurlencode( $base_dn ); - $expand_img = "images/minus.png"; - } else { - $expand_href = "expand.php?server_id=$server_id&" . - "dn=" . rawurlencode( $base_dn ); - $expand_img = "images/plus.png"; - } - - $edit_href = "edit.php?server_id=$server_id&dn=" . rawurlencode( $base_dn ); - - $icon = isset( $tree_icons[ $server_id ][ $base_dn ] ) ? - $tree_icons[ $server_id ][ $base_dn ] : - get_icon( $server_id, $base_dn ); - - // Shall we draw the "mass-delete" checkbox? - if( mass_delete_enabled( $server_id ) ) { - echo "\n"; - } - - echo ""; - echo ""; - echo ""; - echo "\n"; - echo "" . pretty_print_dn( $base_dn ) . "\n"; - echo "\n"; - - } else { // end if( $base_dn ) - - if( "" === $base_dn || null === $base_dn ) { - // The server refuses to give out the base dn - echo ""; - echo $lang['could_not_determine_root']; - echo '
'; - echo $lang['ldap_refuses_to_give_root']; - echo '
'; - echo $lang['please_specify_in_config']; - echo "
"; - // Proceed to the next server. We cannot draw anything else for this server. - continue; - } else { - // For some unknown reason, we couldn't determine the base dn - echo ""; - echo $lang['could_not_determine_root']; - echo '
'; - echo $lang['please_specify_in_config']; - echo "
"; - // Proceed to the next server. We cannot draw anything else for this server. - continue; - } - } - - flush(); - - // Is the root of the tree expanded already? - if( isset( $tree[$server_id][$base_dn] ) && is_array( $tree[$server_id][$base_dn] ) ) { - foreach( $tree[ $server_id ][ $base_dn ] as $child_dn ) - draw_tree_html( $child_dn, $server_id, 0 ); - if( ! is_server_read_only( $server_id ) ) { - echo ''; - echo '
'; - echo '' . $lang['create_new'] . ''; - } - } - - } else { // end if( pla_ldap_connect( $ds ) ) - // could not connect to LDAP server - echo "\n"; - echo "\n"; - echo "\n"; - echo "" . $lang['could_not_connect'] . "\n"; - echo "\n"; - - if( $servers[ $server_id ][ 'auth_type' ] == 'form' ) { - $logout_href = 'logout.php?server_id=' . $server_id; - echo "\n"; - echo "\n"; - echo "\n"; - echo ""; - echo "" . $lang['logout'] . "\n"; - echo "\n"; - } - - - // Proceed to the next server in the list. We cannot do anything mroe here. - continue; - } - - } else { // end if have_auth_info( $server_id ) - - // We don't have enough information to login to this server - // Draw the "login..." link - $login_href = "login_form.php?server_id=$server_id"; - echo ''; - echo ''; - echo ''; - echo 'login'; - echo '' . $lang['login_link'] . ''; - echo ''; - } - - if( mass_delete_enabled( $server_id ) ) { - echo "\n"; - echo "\n"; - echo "
\n"; - } + call_custom_function( $server_id, 'draw_server_tree' ); } } @@ -261,24 +99,23 @@ foreach( $servers as $server_id => $server_tree ) { "; print_r( $tree ); +// echo "
"; print_r( $tree ); 
 ?>
 
 
 
 
-
 		
 			
-			plus
+			-
 			
 		
-		(' . count( $tree[$server_id][$dn] ) . ')';
+			
 		
 			
-			minus
+			+
 			
 		
-		 $limit )
+                    $child_count = $limit . '+';
+            }
 	} ?>	
 
 	
 		
+		   name="_">img
 	
 	
 		
 			
-				
+				target="right_frame">
+				
+					()
+				
 		
 	
 	
@@ -340,26 +187,37 @@ function draw_tree_html( $dn, $server_id, $level=0 )
 	 10 )
+            if( show_create_enabled( $server_id ) )
+                draw_create_link( $server_id, $rdn, $level, $encoded_dn );
+		foreach( $tree[$server_id][$dn] as $dn )
 			draw_tree_html( $dn, $server_id, $level+1 );
-		}
-
-		// print the "Create New object" link.
-		$create_href = "create_form.php?server_id=$server_id&container=$encoded_dn";
-		echo '';
-		for( $i=0; $i<=$level; $i++ ) {
-			echo '';
-		}
-		echo '';
-		echo '';
-		echo '' . 
-		     $lang['create_new'] . '';
+        // Always draw the "create new" link at the bottom of the listing
+		if( show_create_enabled( $server_id ) )
+            draw_create_link( $server_id, $rdn, $level, $encoded_dn );
 	}
+}
 
-	echo '';
-
+function draw_create_link( $server_id, $rdn, $level, $encoded_dn )
+{
+    global $lang;
+    // print the "Create New object" link.
+    $create_html = "";
+    $create_href = "create_form.php?server_id=$server_id&container=$encoded_dn";
+    $create_html .= '';
+    for( $i=0; $i<=$level; $i++ ) {
+        $create_html .= '';
+    }
+    $create_html .= '';
+    $create_html .= '' . $lang['new'] . '';
+    $create_html .= '' . 
+        $lang['create_new'] . '';
+    $create_html .= '';
+    echo $create_html;
 }
 
 ?>
diff --git a/tree_functions.php b/tree_functions.php
new file mode 100644
index 0000000..90e0b24
--- /dev/null
+++ b/tree_functions.php
@@ -0,0 +1,264 @@
+_, so if I wanted to scroll to
+ * dc=example,dc=com for server 3, the URL would be: 
+ *	tree.php#3_dc%3Dexample%2Cdc%3Dcom
+ */
+function draw_server_tree()
+{
+	global $server_id;
+	global $servers;
+	global $lang;
+	global $tree;
+	global $tree_icons;
+
+	// Does this server want mass deletion availble?
+	if( mass_delete_enabled( $server_id ) ) {
+		echo "
\n"; + echo "\n"; + } + + $server_name = $servers[$server_id]['name']; + echo ''; + echo '' . $lang['server'] . ''; + echo ''; + echo '' . htmlspecialchars( $server_name ) . ''; + echo ''; + + // do we have what it takes to authenticate here, or do we need to + // present the user with a login link (for 'cookie' and 'session' auth_types)? + if( have_auth_info( $server_id ) ) { + if( ! pla_ldap_connection_is_error( pla_ldap_connect( $server_id ), false ) ) { + $schema_href = 'schema.php?server_id=' . $server_id . '" target="right_frame'; + $search_href = 'search.php?server_id=' . $server_id . '" target="right_frame'; + $refresh_href = 'refresh.php?server_id=' . $server_id; + $create_href = 'create_form.php?server_id=' . $server_id . '&container=' . + rawurlencode( $servers[$server_id]['base'] ); + $logout_href = get_custom_file( $server_id, 'logout.php') . '?server_id=' . $server_id; + $info_href = 'server_info.php?server_id=' . $server_id; + $import_href = 'ldif_import_form.php?server_id=' . $server_id; + $export_href = 'export_form.php?server_id=' . $server_id; + + // Draw the quick-links below the server name: + // ( schema | search | refresh | create ) + echo ''; + echo ''; + echo '( '; + echo '' . $lang['schema'] . ' | '; + echo '' . $lang['search'] . ' | '; + echo '' . $lang['refresh'] . ' | '; + if (show_create_enabled($server_id)) + echo '' . $lang['create'] . ' | '; + echo '' . $lang['info'] . ' | '; + echo '' . $lang['import'] . ' | '; + echo '' . $lang['export_lcase'] . ''; + if( $servers[ $server_id ][ 'auth_type' ] != 'config' ) + echo ' | ' . $lang['logout'] . ''; + echo ' )'; + + if( $servers[$server_id]['auth_type'] != 'config' ) { + $logged_in_dn = get_logged_in_dn( $server_id ); + echo "" . $lang['logged_in_as']; + if( strcasecmp( "anonymous", $logged_in_dn ) ) + echo "" . + pretty_print_dn( $logged_in_dn ) . ""; + else + echo "Anonymous"; + echo ""; + } + if( is_server_read_only( $server_id ) ) + echo "" . + "(" . $lang['read_only'] . ")"; + + // Fetch and display the base DN for this server + if( null == $servers[ $server_id ]['base'] ) + $base_dn = try_to_get_root_dn( $server_id ); + else + $base_dn = $servers[ $server_id ]['base']; + + // Did we get a base_dn for this server somehow? + if( $base_dn ) { + echo "\n\n\n\n"; + + // is the root of the tree expanded already? + if( isset( $tree[$server_id][$base_dn] ) ) { + $expand_href = "collapse.php?server_id=$server_id&" . + "dn=" . rawurlencode( $base_dn ); + $expand_img = "images/minus.png"; + $expand_alt = "-"; + $child_count = number_format( count( $tree[$server_id][$base_dn] ) ); + } else { + // Check if the LDAP server is not yet initialized + // (ie, the base DN configured in config.php does not exist) + if( ! dn_exists( $server_id, $base_dn ) ) { + $create_base_href = "creation_template.php?template=custom&server_id=$server_id"; + ?> + + + + + + + + + + + + +
+ + + + + + + + + + + $limit ) + $child_count = $limit . '+'; + } + } + } + + $edit_href = "edit.php?server_id=$server_id&dn=" . rawurlencode( $base_dn ); + + $icon = isset( $tree_icons[ $server_id ][ $base_dn ] ) + ? $tree_icons[ $server_id ][ $base_dn ] + : get_icon( $server_id, $base_dn ); + + // Shall we draw the "mass-delete" checkbox? + if( mass_delete_enabled( $server_id ) ) { + echo "\n"; + } + + echo ""; + echo "\"$expand_alt\""; + echo ""; + echo "\"img\"\n"; + echo "" . pretty_print_dn( $base_dn ) . ''; + if( $child_count ) + echo " ($child_count)"; + echo "\n"; + echo "\n"; + + if( show_create_enabled( $server_id ) && isset( $tree[ $server_id ][ $base_dn ]) + && count( $tree[ $server_id ][ $base_dn ] ) > 10 ) + draw_create_link( $server_id, $base_dn, -1, urlencode( $base_dn )); + + } else { // end if( $base_dn ) + + if( "" === $base_dn || null === $base_dn ) { + // The server refuses to give out the base dn + echo ""; + echo $lang['could_not_determine_root']; + echo '
'; + echo $lang['ldap_refuses_to_give_root']; + echo '
'; + echo $lang['please_specify_in_config']; + echo "
"; + // Proceed to the next server. We cannot draw anything else for this server. + return; + } else { + // For some unknown reason, we couldn't determine the base dn + echo ""; + echo $lang['could_not_determine_root']; + echo '
'; + echo $lang['please_specify_in_config']; + echo "
"; + // Proceed to the next server. We cannot draw anything else for this server. + return; + } + } + + flush(); + + // Is the root of the tree expanded already? + if( isset( $tree[$server_id][$base_dn] ) && is_array( $tree[$server_id][$base_dn] ) ) { + foreach( $tree[ $server_id ][ $base_dn ] as $child_dn ) + draw_tree_html( $child_dn, $server_id, 0 ); + if( ! is_server_read_only( $server_id ) ) { + echo ''; + if( show_create_enabled( $server_id ) ) { + echo '' . 
+							$lang['new'] . ''; + echo '' . $lang['create_new'] . ''; + } + } + } + + } else { // end if( pla_ldap_connect( $ds ) ) + // could not connect to LDAP server + echo "\n"; + echo "\n"; + echo "\""\n"; + echo "" . $lang['could_not_connect'] . "\n"; + echo "\n"; + + if( $servers[ $server_id ][ 'auth_type' ] != 'config' ) { + $logout_href = get_custom_file( $server_id, 'logout.php') . '?server_id=' . $server_id; + echo "\n"; + echo "\n"; + echo "\n"; + echo ""; + echo "" . $lang['logout'] . "\n"; + echo "\n"; + } + // Proceed to the next server in the list. We cannot do anything mroe here. + return; + } + + } else { // end if have_auth_info( $server_id ) + // We don't have enough information to login to this server + // Draw the "login..." link + $login_href = get_custom_file( $server_id, 'login_form.php' ) . "?server_id=$server_id"; + echo ''; + echo ''; + echo ''; + echo '' . $lang['login'] . ''; + echo '' . $lang['login_link'] . ''; + echo ''; + } + + if( mass_delete_enabled( $server_id ) ) { + echo "\n"; + echo "\n"; + echo "\n"; + } +} + +?> diff --git a/unit_test.php b/unit_test.php index e864232..e9e5838 100644 --- a/unit_test.php +++ b/unit_test.php @@ -1,17 +1,144 @@ "; require_once realpath( 'functions.php' ); -$dns1 = array( 'cn=joe,dc=example,dc=com', 'cn=joe,dc=example,dc=com', 'cn = bob, dc= example,dc =com' ); -$dns2 = array( 'cn=joe,dc=example,dc=com', 'CN =joe,dc=Example,dc =com', 'cn= bob, dc= example,dc =com' ); - -for( $i=0; $i"; } -// TESTING PLA_EXPLODE_DN() -var_dump( pla_explode_dn( "cn=,dc=example,dc=" ) ); -var_dump( ldap_explode_dn( "cn=,dc=example,dc=", 0 ) ); +// test pla_verbose_error() using ldap_error_codes.txt +if( false) { + for( $i=0; $i<255; $i++ ) { + $num = "0x" . str_pad( dechex( $i ), 2, "0", STR_PAD_LEFT ); + var_dump( $num ); + print_r( pla_verbose_error( $num ) ); + } +} + +// tests is_dn_string() +if( false ) { + $dn_strs = array( ' cn=joe,dc=example,dc=com', + 'cn = joe, dc= example, dc =com', + ' cn=asdf asdf, ou= foo bar, o =foo bar, dc=com', + 'cn=True!=False,dc=example,dc=com' ); + $not_dn_strs = array( ' asdf asdf ', + '== asdf asdf ', + ' = = = = = = = =' ); + + echo "All should be true:\n"; + foreach( $dn_strs as $str ) { + echo "\"$str\"\n"; + var_dump( is_dn_string( $str ) ); + } + echo "\nAll should be false:\n"; + foreach( $not_dn_strs as $str ) { + echo "\"$str\"\n"; + var_dump( is_dn_string( $str ) ); + } +} + +// tests pla_compare_dns() +if( false ) { + echo "Should all be 0:
"; + $dns1 = array( 'cn=joe,dc=example,dc=com', 'cn=joe,dc=example,dc=com', 'cn = bob, dc= example,dc =com' ); + $dns2 = array( 'cn=joe,dc=example,dc=com', 'CN =joe,dc=Example,dc =com', 'cn= bob, dc= example,dc =com' ); + + for( $i=0; $i"; + $dns1 = array( 'dc=test,dc=example,dc=com', 'cn=Fred,cn=joe,dc=example,dc=com', 'cn=joe2,dc=example,dc=com', 'cn = bob, dc= example,dc =com' ); + $dns2 = array( 'dc=example, dc=com', 'cn=joe,dc=example,dc=com', 'CN =joe,dc=Example2,dc =com', 'cn= 2bob, dc= example,dc =com' ); + + for( $i=0; $i\n"; + echo "Should be dc=com: "; + echo get_rdn( "dc=com" ); + echo "
\n"; + echo "Should be Fred: "; + echo get_rdn( "Fred" ); + echo "
\n"; +} + +// testing get_container() +if( false ) { + echo "Should be ou=People-copy1,ou=People-copy2,ou=People2,dc=example,dc=com: "; + var_dump( get_container( "uid=bäb,ou=People-copy1,ou=People-copy2,ou=People2,dc=example,dc=com" ) ); + echo "
\n"; + echo "Should be null: "; + var_dump( get_container( "dc=com" ) ); + echo "
\n"; + echo "Should be null: "; + var_dump( get_container( "Fred" ) ); + echo "
\n"; +} + +// tests pla_explode_dn() +if( false ) { + var_dump( pla_explode_dn( "cn=,dc=example,dc=" ) ); +} + +if( false ) { + $password = 'asdf@sadf'; + foreach( array('md5','md5crypt','sha','ssha','smd5','crypt','clear') as $enc_type ) { + $crypted_password = password_hash($password,$enc_type); + print "[".$enc_type."] ".$crypted_password."
"; + print " Test: " . (password_check($crypted_password,$password) ? "passed" : "failed" ); + print "\n"; + //unset($crypted_password); + flush(); + } +} + +if( true ) { + $secret = "foobar"; + $passwords = array( 'fun!244A', 'asdf', 'dc=stuff,ou=things', 'y()ikes' ); + + $passwords_encrypted = array(); + foreach( $passwords as $password ) { + $passwords_encrypted[] = pla_blowfish_encrypt( $password, $secret ); + } + + $passwords_decrypted = array(); + foreach( $passwords_encrypted as $password ) { + $passwords_decrypted[] = pla_blowfish_decrypt( $password, $secret ); + } + + foreach( $passwords_decrypted as $i => $password ) { + echo $passwords[$i] . ': ' . $passwords_encrypted[$i] . '
'; + if( $passwords[$i] == $passwords_decrypted[$i] ) + echo "passed
"; + else + echo "failed!
"; + } +} + +?> diff --git a/update.php b/update.php index 0ca1b27..87c312f 100644 --- a/update.php +++ b/update.php @@ -1,4 +1,6 @@ - '' foreach( $update_array as $attr => $val ) @@ -52,9 +55,19 @@ foreach( $update_array as $attr => $val ) // Call the custom callback for each attribute modification // and verify that it should be modified. -foreach( $update_array as $attr_name => $val ) +foreach( $update_array as $attr_name => $val ) { + + // Check to see if this is a unique Attribute + if( $badattr = checkUniqueAttr( $server_id, $dn, $attr_name, $val ) ) { + $search_href='search.php?search=true&form=advanced&server_id=' . $server_id . '&filter=' . $attr_name . '=' . $badattr; + pla_error(sprintf( $lang['unique_attr_failed'] , $attr_name,$badattr,$dn,$search_href ) ); + } + if( true !== preAttrModify( $server_id, $dn, $attr_name, $val ) ) unset( $update_array[ $attr_name ] ); + elseif( is_attr_read_only( $server_id, $attr ) ) + pla_error( sprintf( $lang['attr_is_read_only'], htmlspecialchars( $attr_name ) ) ); +} $ds = pla_ldap_connect( $server_id ); $res = @ldap_modify( $ds, $dn, $update_array ); @@ -71,10 +84,11 @@ if( $res ) if( 0 === strcasecmp( $attr_name, 'userPassword' ) && check_server_id( $server_id ) && isset( $servers[ $server_id ][ 'auth_type' ] ) && - $servers[ $server_id ][ 'auth_type' ] == 'form' && + ( $servers[ $server_id ][ 'auth_type' ] == 'cookie' || + $servers[ $server_id ][ 'auth_type' ] == 'session' ) && 0 === pla_compare_dns( get_logged_in_dn( $server_id ), $dn ) ) { - unset_cookie_login_dn( $server_id ); + unset_login_dn( $server_id ); include realpath( 'header.php' ); ?> @@ -84,10 +98,10 @@ if( $res )
- Modification successful!
+

- Since you changed your password, you must
- now login again with your new password. +   +
diff --git a/update_confirm.php b/update_confirm.php index f260bed..53400f7 100644 --- a/update_confirm.php +++ b/update_confirm.php @@ -1,215 +1,217 @@ - $vals ) - if( is_array( $vals ) ) - foreach( $vals as $i => $v ) - $old_values[ $attr ][ $i ] = utf8_decode( $v ); - else - $old_values[ $attr ] = utf8_decode( $vals ); -foreach( $new_values as $attr => $vals ) - if( is_array( $vals ) ) - foreach( $vals as $i => $v ) - $new_values[ $attr ][ $i ] = utf8_decode( $v ); - else - $new_values[ $attr ] = utf8_decode( $vals ); - -?> - - - -

-

Server:     :

- - $old_val ) -{ - // Did the user delete the field? - if( ! isset( $new_values[ $attr ] ) ) { - $update_array[ $attr ] = ''; - } - // did the user change the field? - elseif( $old_val != $new_values[ $attr ] ) { - - $new_val = $new_values[ $attr ]; - - // special case for userPassword attributes - if( 0 == strcasecmp( $attr, 'userPassword' ) && $new_val != '' ) - $new_val = password_hash( $new_val, $_POST['enc_type'] ); - $update_array[ $attr ] = $new_val; - } -} - -// special case check for a new enc_type for userPassword (not otherwise detected) -if( isset( $_POST['enc_type'] ) && - $_POST['enc_type'] != $_POST['old_enc_type'] && - $_POST['enc_type'] != 'clear' && - $_POST['new_values']['userpassword'] != '' ) { - - $new_password = password_hash( $_POST['new_values']['userpassword'], $_POST['enc_type'] ); - $update_array[ 'userpassword' ] = $new_password; -} - -// strip empty vals from update_array and ensure consecutive indices for each attribute -foreach( $update_array as $attr => $val ) { - if( is_array( $val ) ) { - foreach( $val as $i => $v ) - if( null == $v || 0 == strlen( $v ) ) - unset( $update_array[$attr][$i] ); - $update_array[$attr] = array_values( $update_array[$attr] ); - } -} - -// at this point, the update_array should look like this (example): -// Array ( -// cn => Array( -// [0] => 'Dave', -// [1] => 'Bob' ) -// sn => 'Smith', -// telephoneNumber => '555-1234' ) -// This array should be ready to be passed to ldap_modify() - -?> - 0 ) { ?> - -
-
- -
-
- - - - - - - - - $new_val ) { $counter++ ?> - - - - \n\n"; - } - - ?> - -
- "; - else - echo htmlspecialchars( utf8_encode( $old_values[ $attr ] ) ) . "
"; - echo "
"; - - // is this a multi-valued attribute? - if( is_array( $new_val ) ) { - foreach( $new_val as $i => $v ) { - if( $v == '' ) { - // remove it from the update array if it's empty - unset( $update_array[ $attr ][ $i ] ); - $update_array[ $attr ] = array_values( $update_array[ $attr ] ); - } else { - echo htmlspecialchars( utf8_encode( $v ) ) . "
"; - } - } - - // was this a multi-valued attribute deletion? If so, - // fix the $update_array to reflect that per update_confirm.php's - // expectations - if( $update_array[ $attr ] == array( 0 => '' ) || $update_array[ $attr ] == array() ) { - $update_array[ $attr ] = ''; - echo '' . $lang['attr_deleted'] . ''; - } - } - else - if( $new_val != '' ) - echo htmlspecialchars( $new_val ) . "
"; - else - echo '' . $lang['attr_deleted'] . ''; - echo "
-
- - - - - - -
- -
- - - $val ) { ?> - - $v ) { ?> - - - - - - - - - -
-
- -
- - - -
-
-
- - - - -
- - . -
- - - - - - - + + +

+

Server:     :

+ $old_val ) +{ + // Did the user delete the field? + if( ! isset( $new_values[ $attr ] ) ) { + $update_array[ $attr ] = ''; + } + // did the user change the field? + elseif( $old_val != $new_values[ $attr ] ) { + + $new_val = $new_values[ $attr ]; + + // special case for userPassword attributes + if( 0 == strcasecmp( $attr, 'userPassword' ) && $new_val != '' ) { + $new_val = password_hash( $new_val, $_POST['enc_type'] ); + $password_already_hashed = true; + } + // special case for samba password + else if (( 0 == strcasecmp($attr,'sambaNTPassword') || 0 == strcasecmp($attr,'sambaLMPassword')) && trim($new_val[0]) != '' ){ + $mkntPassword = new MkntPasswdUtil(); + $mkntPassword->createSambaPasswords( $new_val[0] ) or pla_error("Unable to create samba password. Please check your configuration in template_config.php"); + $new_val = $mkntPassword->valueOf($attr); + } + $update_array[ $attr ] = $new_val; + } +} + +// special case check for a new enc_type for userPassword (not otherwise detected) +if( isset( $_POST['enc_type'] ) && + ! isset( $password_already_hashed ) && + $_POST['enc_type'] != $_POST['old_enc_type'] && + $_POST['enc_type'] != 'clear' && + $_POST['new_values']['userpassword'] != '' ) { + + $new_password = password_hash( $_POST['new_values']['userpassword'], $_POST['enc_type'] ); + $update_array[ 'userpassword' ] = $new_password; +} + +// strip empty vals from update_array and ensure consecutive indices for each attribute +foreach( $update_array as $attr => $val ) { + if( is_array( $val ) ) { + foreach( $val as $i => $v ) + if( null == $v || 0 == strlen( $v ) ) + unset( $update_array[$attr][$i] ); + $update_array[$attr] = array_values( $update_array[$attr] ); + } +} + +// at this point, the update_array should look like this (example): +// Array ( +// cn => Array( +// [0] => 'Dave', +// [1] => 'Bob' ) +// sn => 'Smith', +// telephoneNumber => '555-1234' ) +// This array should be ready to be passed to ldap_modify() + +?> + 0 ) { ?> + +
+
+ +
+
+ + + + + + + + + $new_val ) { $counter++ ?> + + + + \n\n"; + } + + ?> + +
+ "; + else + if( 0 == strcasecmp( $attr, 'userPassword' ) && ( obfuscate_password_display() || is_null( get_enc_type( $old_values[ $attr ] ) ) ) ) + echo preg_replace( '/./', '*', $old_values[ $attr ] ) . "
"; + else + echo nl2br( htmlspecialchars( $old_values[ $attr ] ) ) . "
"; + echo "
"; + + // is this a multi-valued attribute? + if( is_array( $new_val ) ) { + foreach( $new_val as $i => $v ) { + if( $v == '' ) { + // remove it from the update array if it's empty + unset( $update_array[ $attr ][ $i ] ); + $update_array[ $attr ] = array_values( $update_array[ $attr ] ); + } else { + echo nl2br( htmlspecialchars( $v ) ) . "
"; + } + } + + // was this a multi-valued attribute deletion? If so, + // fix the $update_array to reflect that per update_confirm.php's + // expectations + if( $update_array[ $attr ] == array( 0 => '' ) || $update_array[ $attr ] == array() ) { + $update_array[ $attr ] = ''; + echo '' . $lang['attr_deleted'] . ''; + } + } + else + if( $new_val != '' ) + if( 0 == strcasecmp( $attr, 'userPassword' ) && ( obfuscate_password_display() || is_null( get_enc_type( $new_values[ $attr ] ) ) ) ) + echo preg_replace( '/./', '*', $new_val ) . "
"; + else + echo htmlspecialchars( $new_val ) . "
"; + else + echo '' . $lang['attr_deleted'] . ''; + echo "
+
+ + + + + + +
+ +
+ + + $val ) { ?> + + $v ) { ?> + + + + + + + + + +
+
+ +
+ + + +
+
+
+ + + + +
+ + . +
+ + + + + + + diff --git a/view_jpeg_photo.php b/view_jpeg_photo.php index 7645598..934ad40 100644 --- a/view_jpeg_photo.php +++ b/view_jpeg_photo.php @@ -1,6 +1,8 @@ +



-
+<?php echo $lang['pla_logo']; ?>





+ | - - + | + + +