diff --git a/po/ar.po b/po/ar.po index 96313ef7..c6f10d9a 100644 --- a/ po/ar.po+++ b/ po/ar.po@@ -8,2311 +8,3081 @@ # Hicham Amaoui <amaoui@altern.org>, 2004.
# Munzir Taha <munzirtaha@newhorizons.com.sa>, 2004.
# Mohammad Ghoniem <Mohammad.Ghoniem@laposte.net>, 2005.
-msgid ""
-msgstr ""
-"Project-Id-Version: ar\n"
-"PO-Revision-Date: 2005-08-23 10:00+0200\n"
-"Last-Translator: Mohammad Ghoniem <Mohammad.Ghoniem@laposte.net>\n"
-"Language-Team: Arabic\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.10.2\n"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1389
-msgid "No parameters given to setup a default route"
-msgstr "لم تُدخل أي مُعطيات لإعداد مسار افتراضيّ"
-
-#: /etc/rc.d/init.d/dhcpd:110
-msgid "Usage: $0 {start|stop|restart|condrestart|configtest|status}"
-msgstr "الاستعمال: $0 {start|stop|restart|condrestart|configtest|status}"
-
-#: /etc/rc.d/init.d/ups:52
-msgid "Starting UPS monitor (slave): "
-msgstr "جاري بدأ مراقب UPS (تابع): "
-
-#: /etc/rc.d/init.d/crond:66
-msgid "Reloading cron daemon configuration: "
-msgstr "تجري إعادة تحميل إعداد خادم cron: "
-
-#: /etc/sysconfig/network-scripts/ifup-ipv6:227
-msgid ""
-"Warning: configured MTU '$IPV6TO4_MTU' for 6to4 exceeds maximum limit of "
-"'$tunnelmtu', ignored"
-msgstr ""
-"تحذير: تهيئة MTU '$IPV6TO4_MTU' لـ6to4 تتعدّى الحدّ الأقصى لـ'$tunnelmtu'، تمّ "
-"التّجاهل"
-
-#: /etc/rc.d/init.d/ypxfrd:31
-msgid "Stopping YP map server: "
-msgstr "جاري إيقاف خادم الخرائط YP: "
-
-#: /etc/sysconfig/network-scripts/ifup:84
-msgid "Could not set 802.1Q VLAN parameters."
-msgstr "لم أستطع إعداد وسائط 802.1Q VLAN."
-
-#: /etc/sysconfig/network-scripts/ifup:94
-#: /etc/sysconfig/network-scripts/ifup-eth:83
-msgid "$alias device ${DEVICE} does not seem to be present, delaying initialization."
-msgstr "لا يبدو أنّ $alias جهاز ${DEVICE} حاضر، جاري تأخير التّمهيد."
-
-#: /etc/rc.d/init.d/amd:96 /etc/rc.d/init.d/autofs:559
-#: /etc/rc.d/init.d/bgpd:59 /etc/rc.d/init.d/gkrellmd:54
-#: /etc/rc.d/init.d/irda:72 /etc/rc.d/init.d/ospfd:60 /etc/rc.d/init.d/ripd:59
-#: /etc/rc.d/init.d/ripngd:59 /etc/rc.d/init.d/sshd:168
-#: /etc/rc.d/init.d/zebra:60
-msgid "Usage: $0 {start|stop|restart|reload|condrestart|status}"
-msgstr "الاستعمال: $0 {start|stop|restart|reload|condrestart|status}"
-
-#: /etc/rc.d/init.d/autofs:546
-msgid "Start $x"
-msgstr "إبدأ $x"
-
-#: /etc/rc.d/init.d/gpm:22
-msgid "Starting console mouse services: "
-msgstr "جاري بدأ خدمات الفأرة الطّرفية: "
-
-#: /etc/rc.d/init.d/rdisc:42
-#, fuzzy
-msgid "Shutting down router discovery services: "
-msgstr "جاري إيقاف خدمات استطلاع الموجهات : "
-
-#: /etc/rc.d/init.d/rhnsd:38
-msgid "Starting Red Hat Network Daemon: "
-msgstr "جاري بدأ عفريت الشّبكة لريدهات: "
-
-#: /etc/rc.d/init.d/dictd:28
-msgid "no dictionaries installed"
-msgstr "لم يسبق تثبيت أي قاموس"
-
-#: /etc/rc.d/init.d/ups:72
-msgid "Shutting down $MODEL: "
-msgstr "جاري غلق $MODEL: "
-
-#: /etc/sysconfig/network-scripts/ifup-ppp:142
-msgid "pppd started for ${DEVNAME} on ${MODEMPORT} at ${LINESPEED}"
-msgstr "تمّ تشغيل pppd لـ${DEVNAME} على ${MODEMPORT} بسرعة ${LINESPEED}"
-
-#: /etc/rc.d/init.d/ypbind:70
-msgid "Shutting down NIS services: "
-msgstr "جاري غلق خدمات NIS: "
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:313
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:368
-msgid "Missing parameter 'IPv6-gateway' (arg 2)"
-msgstr "الوسيط 'IPv6-gateway' مفقود )الوسيط الثاني(ني)"
-
-#: /etc/rc.d/init.d/netfs:114
-msgid "Unmounting CIFS filesystems: "
-msgstr "إزالة تثبيت نظام ملفات CIFS: "
-
-#: /etc/rc.d/init.d/functions:235
-msgid "Usage: pidfileofproc {program}"
-msgstr "الاستعمال: pidfileofproc {برنامج}"
-
-#: /etc/rc.d/init.d/vncserver:43
-msgid "vncserver start"
-msgstr "بدء vncserver"
-
-#: /etc/rc.d/init.d/gdm-early-login:29
-msgid "Shutting down display manager: "
-msgstr "جاري إيقاف مدير العرض:"
-
-#: /etc/rc.d/init.d/crond:93 /etc/rc.d/init.d/krb5kdc:80
-#: /etc/rc.d/init.d/saslauthd:75 /etc/rc.d/init.d/squid:160
-msgid "Usage: $0 {start|stop|status|reload|restart|condrestart}"
-msgstr "الاستعمال: $0 {start|stop|status|reload|restart|condrestart}"
-
-#: /etc/rc.d/init.d/rpcsvcgssd:44
-msgid "Starting RPC svcgssd: "
-msgstr "جاري تشغيلRPC svcgssd : "
-
-#: /etc/rc.d/init.d/amd:30 /etc/rc.d/init.d/anacron:15
-#: /etc/rc.d/init.d/arpwatch:28 /etc/rc.d/init.d/atd:29
-#: /etc/rc.d/init.d/auditd:42 /etc/rc.d/init.d/autofs:472
-#: /etc/rc.d/init.d/bgpd:29 /etc/rc.d/init.d/bootparamd:29
-#: /etc/rc.d/init.d/canna:28 /etc/rc.d/init.d/cpuspeed:29
-#: /etc/rc.d/init.d/crond:25 /etc/rc.d/init.d/cups:57
-#: /etc/rc.d/init.d/dc_client:33 /etc/rc.d/init.d/dc_server:29
-#: /etc/rc.d/init.d/dhcp6r:32 /etc/rc.d/init.d/dhcp6s:36
-#: /etc/rc.d/init.d/dhcpd:44 /etc/rc.d/init.d/dhcrelay:33
-#: /etc/rc.d/init.d/dictd:23 /etc/rc.d/init.d/dovecot:19
-#: /etc/rc.d/init.d/gkrellmd:24 /etc/rc.d/init.d/httpd:60
-#: /etc/rc.d/init.d/ipsec:144 /etc/rc.d/init.d/irda:23
-#: /etc/rc.d/init.d/irqbalance:46 /etc/rc.d/init.d/kadmin:44
-#: /etc/rc.d/init.d/kprop:30 /etc/rc.d/init.d/krb524:34
-#: /etc/rc.d/init.d/krb5kdc:34 /etc/rc.d/init.d/ldap:121
-#: /etc/rc.d/init.d/ldap:133 /etc/rc.d/init.d/lisa:35
-#: /etc/rc.d/init.d/lm_sensors:57 /etc/rc.d/init.d/mailman:77
-#: /etc/rc.d/init.d/mdmonitor:37 /etc/rc.d/init.d/mdmpd:38
-#: /etc/rc.d/init.d/mysqld:88 /etc/rc.d/init.d/mysqld:90
-#: /etc/rc.d/init.d/mysqld:93 /etc/rc.d/init.d/named:36
-#: /etc/rc.d/init.d/nscd:49 /etc/rc.d/init.d/ntpd:97
-#: /etc/rc.d/init.d/ospf6d:29 /etc/rc.d/init.d/ospfd:30
-#: /etc/rc.d/init.d/portmap:47 /etc/rc.d/init.d/radvd:38
-#: /etc/rc.d/init.d/rarpd:22 /etc/rc.d/init.d/ripd:29
-#: /etc/rc.d/init.d/ripngd:29 /etc/rc.d/init.d/rwalld:24
-#: /etc/rc.d/init.d/saslauthd:36 /etc/rc.d/init.d/sendmail:40
-#: /etc/rc.d/init.d/smartd:44 /etc/rc.d/init.d/snmpd:20
-#: /etc/rc.d/init.d/snmptrapd:23 /etc/rc.d/init.d/squid:60
-#: /etc/rc.d/init.d/sshd:106 /etc/rc.d/init.d/ups:43
-#: /etc/rc.d/init.d/vncserver:23 /etc/rc.d/init.d/xfs:63
-#: /etc/rc.d/init.d/xinetd:44 /etc/rc.d/init.d/zebra:27
-msgid "Starting $prog: "
-msgstr "جاري بدأ $prog: "
-
-#: /etc/sysconfig/network-scripts/ifup-sit:64
-msgid "Missing remote IPv4 address of tunnel, configuration is not valid"
-msgstr "عنوان IPv4 بعيد مفقود للنّفق، التّهيئة ليست صالحة"
-
-#: /etc/rc.d/init.d/mDNSResponder:36
-msgid "Shutting down mDNSResponder services: "
-msgstr "إيقاف خوادم mDNSResponder: "
-
-#: /etc/sysconfig/network-scripts/ifdown-eth:44
-#: /etc/sysconfig/network-scripts/ifup-eth:45
-msgid "Device ${DEVICE} has different MAC address than expected, ignoring."
-msgstr "الجهاز ${DEVICE} له عنوان MAC مُختلف عن المتوقّع، جاري التّجاهل."
-
-#: /etc/rc.d/init.d/diskdump:139
-msgid "$dev is not a dump device"
-msgstr "$dev ليس جهازا للإيداع"
-
-#: /etc/rc.d/init.d/messagebus:34
-msgid "Stopping system message bus: "
-msgstr "جاري إيقاف تشغيل ناقل الرّسائل: "
-
-#: /etc/rc.d/init.d/privoxy:268
-msgid "Usage: $PRIVOXY_PRG {start|stop|reload|restart|condrestart|status|top}"
-msgstr "الاستعمال: $PRIVOXY_PRG {start|stop|reload|restart|condrestart|status|top}"
-
-#: /etc/rc.d/init.d/yum:29
-msgid "Disabling nightly yum update: "
-msgstr "جاري تعطيل التّحديث اللّيلي لـyum: "
-
-#: /etc/rc.d/init.d/arptables_jf:171 /etc/rc.d/init.d/ip6tables:315
-#: /etc/rc.d/init.d/iptables:315
-msgid "Usage: $0 {start|stop|restart|condrestart|status|panic|save}"
-msgstr "الاستعمال: $0 {start|stop|restart|condrestart|status|panic|save}"
-
-#: /etc/rc.d/init.d/autofs:327
-msgid ""
-"Active Mount Points:\n"
-"--------------------"
-msgstr ""
-"أماكن التّجهيز النّشطة\n"
-": ---------------------"
-
-#: /etc/rc.d/init.d/firstboot:47
-msgid "X is not configured. Running system-config-display"
-msgstr "X غير مهيّئ. جاري تشغيل system-config-display"
-
-#: /etc/rc.d/init.d/ups:34
-msgid "Starting $MODEL: "
-msgstr "جاري بدأ $MODEL: "
-
-#: /etc/sysconfig/network-scripts/ifup-eth:99
-msgid "Enslaving ${DEVICE} to ${MASTER}"
-msgstr "جاري استعباد ${DEVICE} إلى ${MASTER}"
-
-#: /etc/rc.d/init.d/yum:60
-msgid "Nightly yum update is disabled."
-msgstr "تحديث yum اللّيلي معطّل."
-
-#: /etc/rc.d/init.d/rwhod:32
-msgid "Stopping rwho services: "
-msgstr "جاري إيقاف خدمات rwho: "
-
-#: /etc/rc.d/init.d/atalk:53
-msgid "Shutting down AppleTalk services: "
-msgstr "جاري غلق خدمات AppleTalk: "
-
-#: /etc/rc.d/rc:91
-msgid "Starting $subsys: "
-msgstr "جاري بدأ $subsys: "
-
-#: /etc/rc.d/init.d/arptables_jf:49
-msgid "Flushing all current rules and user defined chains:"
-msgstr "جاري مسح كل القواعد و السلاسل المعرفة من قبل المستخدم:"
-
-#: /etc/rc.d/init.d/crond:28
-msgid "cannot start crond: crond is already running."
-msgstr "لا يمكن تشغيل crond حيث أنه يعمل حاليا."
-
-#: /etc/rc.d/init.d/isicom:27
-msgid "Failed to load firmware."
-msgstr "فشلت في تحميل البرمجيات الضّمنية."
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1326
-msgid "Given IPv6 default gateway '$address' is not in proper format"
-msgstr "بوّابة IPv6 الافتراضيّة المُدخلة '$address' ليست بنسق مناسب"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1449
-msgid "Unsupported reason '$reason' for sending trigger to radvd"
-msgstr "'$reason' هو سبب غير مدعوم لإرسال مُطْلِق إلى radvd"
-
-#: /etc/rc.d/rc.sysinit:99
-msgid "\t\tWelcome to "
-msgstr "\t\tمرحبا في "
-
-#: /etc/rc.d/init.d/rstatd:31
-msgid "Stopping rstat services: "
-msgstr "جاري إيقاف خدمات rstat: "
-
-#: /etc/rc.d/init.d/cups-config-daemon:67 /etc/rc.d/init.d/haldaemon:71
-#: /etc/rc.d/init.d/innd:112 /etc/rc.d/init.d/kprop:67
-#: /etc/rc.d/init.d/krb524:70 /etc/rc.d/init.d/lm_sensors:133
-#: /etc/rc.d/init.d/mDNSResponder:69 /etc/rc.d/init.d/NetworkManager:76
-#: /etc/rc.d/init.d/nifd:70 /etc/rc.d/init.d/syslog:80
-#: /etc/rc.d/init.d/ypbind:109
-msgid "Usage: $0 {start|stop|status|restart|condrestart}"
-msgstr "الاستعمال: $0 {start|stop|status|restart|condrestart}"
-
-#: /etc/rc.d/init.d/halt:43
-msgid "$0: call me as 'halt' or 'reboot' please!"
-msgstr "$0: الرجاء الاستدعاء بـ 'halt' أو 'reboot'!"
-
-#: /etc/rc.d/init.d/isdn:252
-msgid "$NAME is attached to $DEVICE"
-msgstr "$NAME متعلّق بـ $DEVICE"
-
-#: /etc/rc.d/init.d/bgpd:36 /etc/rc.d/init.d/dhcp6r:42
-#: /etc/rc.d/init.d/dhcp6s:46 /etc/rc.d/init.d/dhcpd:63
-#: /etc/rc.d/init.d/dhcrelay:45 /etc/rc.d/init.d/dictd:43
-#: /etc/rc.d/init.d/gkrellmd:31 /etc/rc.d/init.d/ipsec:150
-#: /etc/rc.d/init.d/irda:34 /etc/rc.d/init.d/mailman:91
-#: /etc/rc.d/init.d/ntpd:106 /etc/rc.d/init.d/ospf6d:36
-#: /etc/rc.d/init.d/ospfd:37 /etc/rc.d/init.d/ripd:36
-#: /etc/rc.d/init.d/ripngd:36 /etc/rc.d/init.d/sendmail:104
-#: /etc/rc.d/init.d/smartd:51 /etc/rc.d/init.d/vncserver:49
-#: /etc/rc.d/init.d/vsftpd:49 /etc/rc.d/init.d/xfs:82
-#: /etc/rc.d/init.d/zebra:37
-msgid "Shutting down $prog: "
-msgstr "جاري غلق $prog: "
-
-#: /etc/rc.d/init.d/halt:184
-msgid "Unmounting file systems (retry): "
-msgstr "جاري إزالة تجهيز أنظمة الملفّات (إعادة المحاولة): "
-
-#: /etc/rc.d/init.d/NetworkManager:42
-msgid "Stopping NetworkManager daemon: "
-msgstr "جاري إيقاف خادم مدير الشبكةNetworkManager: "
-
-#: /etc/rc.d/init.d/atalk:91 /etc/rc.d/init.d/isdn:281
-#: /etc/rc.d/init.d/ldap:191
-msgid "Usage: $0 {start|stop|restart|status|condrestart}"
-msgstr "الاستعمال: $0 {start|stop|restart|status|condrestart}"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:124
-msgid "INFO "
-msgstr "معلومات "
-
-#: /etc/rc.d/init.d/netfs:80
-msgid "Unmounting network block filesystems (retry): "
-msgstr "جاري إزالة تجهيز أنظمة ملفّات كتلة الشّبكة (إعادة المحاولة): "
-
-#: /etc/rc.d/init.d/halt:59
-msgid "Sending all processes the TERM signal..."
-msgstr "إرسال إشارة TERMإلى كلّ العمليّات..."
-
-#: /etc/rc.d/init.d/crond:44 /etc/rc.d/init.d/crond:45
-msgid "cannot stop crond: crond is not running."
-msgstr "لا يمكن إيقاف crond حيث أنه لا يعمل حاليا."
-
-#: /etc/sysconfig/network-scripts/ifup-aliases:160
-msgid "error in $FILE: didn't specify device or ipaddr"
-msgstr "خطأ في $FILE: لم يتمّ تحديد الجهاز أو عنوان IP"
-
-#: /etc/rc.d/init.d/nfs:102
-msgid "Shutting down NFS daemon: "
-msgstr "جاري غلق عفريت NFS: "
-
-#: /etc/rc.d/init.d/netfs:115
-msgid "Unmounting NCP filesystems: "
-msgstr "جاري إزالة تجهيز أنظمة ملفّات NCP: "
-
-#: /etc/rc.d/init.d/postfix:62
-msgid "Shutting down postfix: "
-msgstr "جاري إيقاف postfix: "
-
-#: /etc/rc.d/init.d/innd:76
-msgid "Reloading INN Service: "
-msgstr "تجري إعادة تحميل خدمة INN: "
-
-#: /etc/rc.d/init.d/arptables_jf:85
-msgid "Flushing all chains:"
-msgstr "جاري إزالة كل السلاسل:"
-
-#: /etc/rc.d/init.d/mysqld:61
-msgid "Initializing MySQL database: "
-msgstr "جاري تمهيد قاعدة بيانات MySQL: "
-
-#: /etc/sysconfig/network-scripts/ifup-sl:35
-msgid "/usr/sbin/dip does not exist or is not executable for $DEVICE"
-msgstr "/usr/sbin/dip غير موجود أو ليس تنفيذيّاً لـ$DEVICE"
-
-#: /etc/rc.d/init.d/smb:121 /etc/rc.d/init.d/winbind:96
-msgid "Usage: $0 {start|stop|restart|reload|status|condrestart}"
-msgstr "الاستعمال: $0 {start|stop|restart|reload|status|condrestart}"
-
-#: /etc/rc.d/init.d/halt:144 /etc/rc.d/init.d/netfs:62
-msgid "Detaching loopback device $dev: "
-msgstr "جاري فصل جهاز loopback $dev: "
-
-#: /etc/rc.d/init.d/netfs:82
-msgid "Unmounting network block filesystems: "
-msgstr "جاري إزالة تجهيز أنظمة ملفّات كتلة الشّبكة: "
-
-#: /etc/rc.d/init.d/ip6tables:217
-msgid "Saving firewall rules to $IP6TABLES_DATA: "
-msgstr "جاري حفظ أحكام الجدار النّاري إلى $IP6TABLES_DATA: "
-
-#: /etc/rc.d/init.d/gdm-allow-login:35 /etc/rc.d/init.d/kudzu:65
-msgid "Usage: $0 {start|stop}"
-msgstr "الاستعمال: $0 {start|stop}"
-
-#: /etc/rc.d/init.d/gdm-allow-login:17
-msgid "Allow users to login from display manager:"
-msgstr "اسمح للمستخدمين بالدخول من خلال مدير العرض:"
-
-#: /etc/rc.d/init.d/cups:97 /etc/rc.d/init.d/httpd:76 /etc/rc.d/init.d/lisa:61
-#: /etc/rc.d/init.d/named:132 /etc/rc.d/init.d/nscd:103
-#: /etc/rc.d/init.d/radvd:61 /etc/rc.d/init.d/snmpd:48
-#: /etc/rc.d/init.d/sshd:128 /etc/rc.d/init.d/xfs:96
-msgid "Reloading $prog: "
-msgstr "تجري إعادة تحميل $prog: "
-
-#: /etc/rc.d/init.d/psacct:18
-msgid "Starting process accounting: "
-msgstr "جاري تشغيل مُحاسبة العمليّات: "
-
-#: /etc/rc.d/init.d/ypxfrd:22
-msgid "Starting YP map server: "
-msgstr "جاري بدأ خادم الخرائط YP: "
-
-#: /etc/rc.d/init.d/apmd:76
-msgid "Usage: apmd {start|stop|status|restart|reload|condrestart}"
-msgstr "الاستعمال: apmd {start|stop|status|restart|reload|condrestart}"
-
-#: /etc/rc.d/rc.sysinit:296
-msgid "Loading default keymap ($KEYTABLE): "
-msgstr "جاري تحميل خريطة المفاتيح الافتراضيّة ($KEYTABLE): "
-
-#: /etc/sysconfig/network-scripts/ifup-ippp:360
-#: /etc/sysconfig/network-scripts/ifup-isdn:360
-msgid ""
-"Warning: ipppd (kernel 2.4.x and below) doesn't support IPv6 using "
-"encapsulation 'syncppp'"
-msgstr "تحذير: ipppd (للنّواة 2.4.x وما قبلها) لا تدعم IPv6 باستخدام تضمين 'syncppp'"
-
-#: /etc/rc.d/init.d/gpm:33
-msgid "(no mouse is configured)"
-msgstr "(لم يتمّ تهيئة أيّة فأرة)"
-
-#: /etc/rc.d/init.d/xendomains:111
-msgid "Shutting down all Xen domains:"
-msgstr "جاري إيقاف جميع نطاقات Xen:"
-
-#: /etc/sysconfig/network-scripts/ifup-ipv6:102
-msgid ""
-"Global IPv6 forwarding is enabled in configuration, but not currently "
-"enabled in kernel"
-msgstr "تمرير IPv6 العامّ مُمكّن في التّهيئة، ولكن ليس كذلك حاليّاً في النّواة"
-
-#: /etc/rc.d/init.d/gdm-early-login:37
-msgid "Usage: $0 {start|stop)"
-msgstr "صيغة الاستعمال: $0 {start|stop}"
-
-#: /etc/rc.d/init.d/apmd:37
-msgid "Shutting down APM daemon: "
-msgstr "جاري إيقاف تشغيل عفريت APM: "
-
-#: /etc/rc.d/init.d/postfix:84
-msgid "postfix flush"
-msgstr "تفريغ postfix"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:560
-msgid "Cannot add IPv6 address '$address' on dev '$device'"
-msgstr "لا يمكن إضافة عنوان '$address' من طراز IPv6 إلى جهاز '$device'"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:877
-msgid "Given address '$addr' is not a valid IPv4 one (arg 1)"
-msgstr "العُنوان المُعطى '$addr' ليس صالحاً كعنوان IPv4 (المُعطى الأوّل)"
-
-#: /etc/rc.d/init.d/postfix:72
-msgid "postfix reload"
-msgstr "إعادة تحميل postfix"
-
-#: /etc/rc.d/init.d/netfs:121
-msgid "Configured NFS mountpoints: "
-msgstr "تمّت تهيئة أماكن تجهيز NFS: "
-
-#: /etc/rc.d/init.d/hidd:34
-msgid "Shutting down hidd: "
-msgstr "جاري إيقاف تشغيل hidd: "
-
-#: /etc/rc.d/init.d/halt:166
-msgid "Unmounting pipe file systems: "
-msgstr "جاري إزالة تجهيز أنظمة ملفّات pipe: "
-
-#: /etc/rc.d/rc:37
-msgid "Entering interactive startup"
-msgstr "دخول التشغيل التفاعلى"
-
-#: /etc/rc.d/init.d/xfs:134
-msgid "Usage: $prog {start|stop|status|restart|reload|condrestart}"
-msgstr "الاستعمال: $prog {start|stop|status|restart|reload|condrestart}"
-
-#: /etc/rc.d/init.d/ups:61
-msgid "Stopping UPS monitor: "
-msgstr "جاري إيقاف مُراقب UPS: "
-
-#: /etc/rc.d/init.d/microcode_ctl:25
-msgid "$0: $DEVICE not a character device?"
-msgstr "$0: الجهاز $DEVICE ليس جهازا حرفيا؟"
-
-#: /etc/sysconfig/network-scripts/ifup-aliases:306
-msgid "error in $FILE: IPADDR_START and IPADDR_END don't agree"
-msgstr "خطأ في $FILE: لاتتوافق IPADDR_START وIPADDR_END"
-
-#: /etc/rc.d/init.d/functions:214
-msgid "$base $killlevel"
-msgstr "$base $killlevel"
-
-#: /etc/sysconfig/network-scripts/ifup-ppp:60
-msgid "adsl-start does not exist or is not executable for ${DEVICE}"
-msgstr "adsl-start غير موجود أو أنّه ليس تنفيذيّاً لـ${DEVICE}"
-
-#: /etc/rc.d/init.d/isdn:190
-msgid "Shutting down $prog"
-msgstr "جاري إيقاف تشغيل $prog"
-
-#: /etc/rc.d/init.d/pcmcia:145
-msgid "cardmgr (pid $pid) is running..."
-msgstr "مُدير البطاقات cardmgr (رقم العمليّة $pid) يعمل..."
-
-#: /etc/rc.d/rc:39
-msgid "Entering non-interactive startup"
-msgstr "دخول التشغيل غير التفاعلى"
-
-#: /etc/sysconfig/network-scripts/ifup-ipv6:119
-msgid ""
-"Global IPv6 forwarding is disabled in configuration, but not currently "
-"disabled in kernel"
-msgstr "تمرير IPv6 العامّ مُعطّل في التّهيئة، ولكن ليس كذلك حاليّاً في النّواة"
-
-#: /etc/rc.d/init.d/iptables:217
-msgid "Saving firewall rules to $IPTABLES_DATA: "
-msgstr "جاري حفظ أحكام الجدار النّاري إلى $IPTABLES_DATA: "
-
-#: /etc/rc.d/init.d/rpcgssd:99 /etc/rc.d/init.d/rpcidmapd:85
-#: /etc/rc.d/init.d/rpcsvcgssd:98
-msgid "Usage: $0 {start|stop|restart|condstart|condrestart|status}"
-msgstr "الاستعمال: $0 {start|stop|restart|condstart|condrestart|status}"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:286
-msgid ""
-"IPv6 forwarding per device cannot be controlled via sysctl - use netfilter6 "
-"instead"
-msgstr ""
-"تمرير IPv6 لكلّ جهاز لا يمكن التّحكّم به عبر sysctl - استخدم netfilter6 بدلاً من "
-"ذلك"
-
-#: /etc/rc.d/init.d/innd:59
-msgid "Stopping INNFeed service: "
-msgstr "جاري إيقاف خدمة INNFeed: "
-
-#: /etc/rc.d/init.d/httpd:79
-msgid "not reloading due to configuration syntax error"
-msgstr "لن تتم إعادة التحميل نظرا لوجود خطأ انشائي في التنصيبة "
-
-#: /etc/rc.d/init.d/mdmpd:44 /etc/rc.d/init.d/mdmpd:49
-msgid "mdmpd"
-msgstr "mdmpd"
-
-#: /etc/rc.d/init.d/postfix:129
-msgid ""
-"Usage: postfix {start|stop|restart|reload|abort|flush|check|status|"
-"condrestart}"
-msgstr ""
-"صيغة الاستعمال: postfix {start|stop|restart|reload|abort|flush|check|status|"
-"condrestart}"
-
-#: /etc/rc.d/init.d/network:267
-msgid "Shutting down loopback interface: "
-msgstr "جاري إيقاف تشغيل واجهة loopback: "
-
-#: /etc/rc.d/init.d/dovecot:60
-msgid "Usage: $0 {condrestart|start|stop|restart|reload|status}"
-msgstr "الاستعمال: $0 {condrestart|start|stop|restart|reload|status}"
-
-#: /etc/rc.d/init.d/syslog:37
-msgid "Starting kernel logger: "
-msgstr "جاري تشغيل مُسجّل النّواة: "
-
-#: /etc/rc.d/init.d/yppasswdd:49
-msgid "Stopping YP passwd service: "
-msgstr "جاري إيقاف خدمة كلمة مرور YP: "
-
-#: /etc/rc.d/rc.sysinit:454
-msgid "Checking local filesystem quotas: "
-msgstr "جاري التّحقّق من الحصص النّسبيّة لأنظمة الملفّات المحليّة: "
-
-#: /etc/rc.d/init.d/single:44
-msgid "Telling INIT to go to single user mode."
-msgstr "جاري إخبار INIT أن ينتقل إلى وضْع المستخدم المُفرد."
-
-#: /etc/rc.d/init.d/pcmcia:81
-msgid "Starting PCMCIA services: "
-msgstr "جاري بدأ خدمات PCMCIA: "
-
-#: /etc/rc.d/init.d/halt:214
-msgid "$message"
-msgstr "$message"
-
-#: /etc/rc.d/init.d/postfix:40
-msgid "determination of alias_database"
-msgstr "تحديد alias_database"
-
-#: /etc/sysconfig/network-scripts/ifup-eth:178
-msgid " done."
-msgstr " تمّ."
-
-#: /etc/rc.d/init.d/halt:138 /etc/rc.d/init.d/netfs:56
-msgid "Unmounting loopback filesystems (retry):"
-msgstr "جاري إزالة تجهيز أنظمة الملفّات loopback (إعادة المحاولة):"
-
-#: /etc/rc.d/init.d/hidd:25
-msgid "Starting hidd: "
-msgstr "جارى تشغيل hidd: "
-
-#: /etc/rc.d/init.d/named:139
-msgid "$prog reload"
-msgstr "إعادة تحميل $prog"
-
-#: /etc/rc.d/init.d/cups-config-daemon:33
-msgid "Stopping cups-config-daemon: "
-msgstr "جاري إيقاف cups-config-daemon: "
-
-#: /etc/rc.d/init.d/readahead:19 /etc/rc.d/init.d/readahead_early:19
-msgid "Starting background readahead: "
-msgstr "جاري تشغيل القراءةالمسبقة الخلفيّ: "
-
-#: /etc/sysconfig/network-scripts/ifup:22
-#: /etc/sysconfig/network-scripts/ifup:30
-msgid "Usage: ifup <device name>"
-msgstr "الاستعمال: ifup <اسم الجهاز>"
-
-#: /etc/rc.d/init.d/sshd:60 /etc/rc.d/init.d/sshd:63
-msgid "RSA key generation"
-msgstr "توليد مفاتيح RSA"
-
-#: /etc/rc.d/init.d/halt:126
-msgid "Turning off quotas: "
-msgstr "جاري إيقاف تشغيل الحصص النّسبيّة: "
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1499
-msgid "Pidfile '$pidfile' is empty, cannot send trigger to radvd"
-msgstr "ملف رقم العمليّة '$pidfile' فارغ، لا يُمكن إرسال مُطلِق إلى radvd"
-
-#: /etc/rc.d/init.d/rpcsvcgssd:76
-msgid "Shutting down RPC svcgssd: "
-msgstr "جاري إيقاف RPC svcgssd: "
-
-#: /etc/rc.d/init.d/netfs:38
-msgid "Mounting NFS filesystems: "
-msgstr "جاري تجهيز أنظمة ملفّات NFS: "
-
-#: /etc/rc.d/init.d/NetworkManager:33
-msgid "Starting NetworkManager daemon: "
-msgstr "جاري تشغيل خادم مدير التشبيك: "
-
-#: /etc/rc.d/init.d/named:95
-msgid "Error in configuration file /etc/named.conf : $named_err"
-msgstr "خطأ في ملف الإعداد /etc/named.conf : $named_err"
-
-#: /etc/sysconfig/network-scripts/ifup-ipv6:290
-msgid "Error occurred while calculating the IPv6to4 prefix"
-msgstr "حدث خطأ خلال حساب بادئة IPv6to4"
-
-#: /etc/rc.d/init.d/arptables_jf:165 /etc/rc.d/init.d/arptables_jf:166
-msgid "Saving current rules to $ARPTABLES_CONFIG"
-msgstr "جاري حفظ أحكام الجدار النّاري إلى $ARPTABLES_CONFIG: "
-
-#: /etc/rc.d/init.d/smartd:76
-msgid "Usage: $0 {start|stop|reload|report|restart|status}"
-msgstr "الاستعمال: $0 {start|stop|restart|condrestart|status}"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1283
-msgid "Given IPv6 MTU '$ipv6_mtu' is out of range"
-msgstr "IPv6 MTU '$ipv6_mtu' المُعطى هو خارج المدى"
-
-#: /etc/rc.d/init.d/nfs:160
-msgid "Usage: nfs {start|stop|status|restart|reload|condrestart}"
-msgstr "الاستعمال: nfs {start|stop|status|restart|reload|condrestart}"
-
-#: /etc/sysconfig/network-scripts/ifup-aliases:67
-msgid "usage: ifup-aliases <net-device> [<parent-config>]\n"
-msgstr "الاستعمال: ifup-aliases <جهاز الشّبكة> [<التّهيئة الأبويّة>]\n"
-
-#: /etc/rc.d/rc.sysinit:301
-msgid "Loading default keymap"
-msgstr "جاري تحميل خريطة المفاتيح الافتراضيّة"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:147
-msgid "ERROR: [ipv6_log] Cannot log to channel '$channel'"
-msgstr "خطأ: [ipv6_log] لا يمكنه التّسجيل إلى قناة '$channel'"
-
-#: /etc/rc.d/init.d/network:66
-msgid "Bringing up loopback interface: "
-msgstr "جاري تشغيل واجهة loopback: "
-
-#: /etc/rc.d/init.d/kadmin:58 /etc/rc.d/init.d/krb5kdc:48
-msgid "Reopening $prog log file: "
-msgstr "جاري إعادة فتح ملفّ السجلّ $prog: "
-
-#: /etc/rc.d/init.d/functions:207 /etc/rc.d/init.d/functions:218
-msgid "$base shutdown"
-msgstr "إيقاف تشغيل $base"
-
-#: /etc/rc.d/init.d/smb:77 /etc/rc.d/init.d/winbind:65
-msgid "Reloading smb.conf file: "
-msgstr "جاري إعادة تحميل ملف smb.conf: "
-
-#: /etc/rc.d/init.d/crond:29
-msgid "cannot start crond: crond already running."
-msgstr "لا يمكن تشغيل crond حيث أنه يعمل حاليا"
-
-#: /etc/rc.d/init.d/psacct:36
-msgid "Process accounting is enabled."
-msgstr "مُحاسبة العمليّات مُمكّنة."
-
-#: /etc/sysconfig/network-scripts/ifup-eth:166
-msgid "Determining IP information for ${DEVICE}..."
-msgstr "جاري إقرار معلومات IP للجهاز ${DEVICE}..."
-
-#: /etc/rc.d/init.d/postgresql:208
-msgid "Stopping ${NAME} service: "
-msgstr "جاري إيقاف خدمة ${NAME}: "
-
-#: /etc/rc.d/init.d/postfix:79
-msgid "postfix abort"
-msgstr "اجهاض postfix"
-
-#: /etc/rc.d/init.d/functions:152 /etc/rc.d/init.d/mDNSResponder:29
-msgid "$base startup"
-msgstr "بدء تشغيل $base"
-
-#: /etc/sysconfig/network-scripts/ifup-ipv6:293
-msgid "radvd control enabled, but config is not complete"
-msgstr "تمّ تمكين تحكّم radvd، إلّا أنّ التهيئة غير مكتملة"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:862
-msgid "Missing parameter 'address' (arg 1)"
-msgstr "مُعطى 'العنوان' مفقود (المُعطى الأوّل)"
-
-#: /etc/rc.d/init.d/isdn:246
-msgid "$0: Link is down"
-msgstr "$0: الرّابط متوقّف"
-
-#: /etc/rc.d/init.d/psacct:38
-msgid "Process accounting is disabled."
-msgstr "مُحاسبة العمليّات مُعطّلة."
-
-#: /etc/rc.d/init.d/auditd:79 /etc/rc.d/init.d/xinetd:78
-msgid "Reloading configuration: "
-msgstr "جاري تحميل التّهيئة: "
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:115
-msgid "ERROR "
-msgstr "خطأ "
-
-#: /etc/rc.d/init.d/innd:26
-msgid "Please run makehistory and/or makedbz before starting innd."
-msgstr "رجاء قم بتشغيل makehistory و/أو makedbz قبل تشغيل innd."
-
-#: /etc/rc.d/init.d/ip6tables:172
-msgid "Loading additional $IP6TABLES modules: "
-msgstr "جاري تحميل وحدات $IP6TABLES الإضافيّة: "
-
-#: /etc/rc.d/init.d/mDNSResponder:24
-msgid "Starting mDNSResponder... "
-msgstr "جاري بدأ mDNSResponder... "
-
-#: /etc/rc.d/init.d/netfs:149
-msgid "Active NCP mountpoints: "
-msgstr "أماكن تجهيز NCP النّشطة: "
-
-#: /etc/rc.d/init.d/rpcgssd:77
-msgid "Shutting down RPC gssd: "
-msgstr "جاري إيقاف RPC gssd: "
-
-#: /etc/rc.d/init.d/sshd:119
-msgid "Stopping $prog"
-msgstr "جاري إيقاف $prog:"
-
-#: /etc/rc.d/init.d/bootparamd:69 /etc/rc.d/init.d/pcmcia:55
-#: /etc/rc.d/init.d/psacct:48
-msgid "Usage: $0 {start|stop|status|restart|reload}"
-msgstr "الاستعمال: $0 {start|stop|status|restart|reload}"
-
-#: /etc/rc.d/init.d/functions:441
-msgid "yY"
-msgstr "yYن"
-
-#: /etc/sysconfig/network-scripts/ifup-aliases:226
-#: /etc/sysconfig/network-scripts/ifup-aliases:236
-msgid "error in ifcfg-${parent_device}: files"
-msgstr "خطأ في ifcfg-${parent_device}: الملفّات"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1007
-msgid "Missing parameter 'local IPv4 address' (arg 2)"
-msgstr "مُعطى 'عنوان IPv4 المحلّي' مفقود (المُعطى الثّاني)"
-
-#: /etc/rc.d/init.d/nfs:106
-msgid "Shutting down NFS quotas: "
-msgstr "جاري إيقاف تشغيل حصص NFS النّسبيّة: "
-
-#: /etc/rc.d/init.d/functions:90 /etc/rc.d/init.d/functions:118
-msgid "$0: Usage: daemon [+/-nicelevel] {program}"
-msgstr "$0: الاستعمال: daemon [+/-nicelevel] {البرنامج}"
-
-#: /etc/rc.d/init.d/functions:307
-msgid "${base} dead but subsys locked"
-msgstr "${base} قد مات لكنّ subsys مُقفل"
-
-#: /etc/rc.d/init.d/named:33
-msgid "$prog: already running"
-msgstr "$prog: يعمل مُسبقاً"
-
-#: /etc/rc.d/init.d/rstatd:21
-msgid "Starting rstat services: "
-msgstr "جاري تشغيل خدمات rstat: "
-
-#: /etc/rc.d/init.d/netfs:129
-msgid "Configured CIFS mountpoints: "
-msgstr "تمّت تهيئة أماكن تثبيت CIFS: "
-
-#: /etc/sysconfig/network-scripts/ifup:109
-#: /etc/sysconfig/network-scripts/ifup:110
-msgid "ERROR: could not add vlan ${VID} as ${DEVICE} on dev ${PHYSDEV}"
-msgstr "خطأ: لم يمكن إضافة vlan ${VID} كجهاز ${DEVICE} على الجهاز ${PHYSDEV}"
-
-#: /etc/rc.d/init.d/vncserver:42
-msgid "vncserver startup"
-msgstr "بدء تشغيل vncserver"
-
-#: /etc/sysconfig/network-scripts/init.ipv6-global:181
-msgid "Usage: $0 {start|stop|reload|restart|showsysctl}"
-msgstr "الاستعمال: $0 {start|stop|reload|restart|showsysctl}"
-
-#: /etc/rc.d/init.d/network:272
-msgid "Disabling IPv4 packet forwarding: "
-msgstr "جاري تعطيل تمرير رزم IPv4: "
-
-#: /etc/sysconfig/network-scripts/ifup-ppp:47
-msgid "ifup-ppp for ${DEVICE} exiting"
-msgstr "يقوم ifup-ppp لجهاز ${DEVICE} بالخروج"
-
-#: /etc/rc.d/init.d/haldaemon:35
-msgid "Stopping HAL daemon: "
-msgstr "جاري إيقاف خادم HAL: "
-
-#: /etc/rc.d/init.d/network:84
-msgid "No 802.1Q VLAN support available in kernel."
-msgstr "لا يوجد دعم لشبكات 802.1Q VLAN في النّواة."
-
-#: /etc/rc.d/init.d/rpcgssd:46
-msgid "Starting RPC gssd: "
-msgstr "جاري تشغيل RPC gssd: "
-
-#: /etc/rc.d/init.d/nfs:149
-msgid "reload"
-msgstr "إعادة التّحميل"
-
-#: /etc/rc.d/rc.sysinit:337
-msgid "Setting up Logical Volume Management:"
-msgstr "جاري إعداد إدارة الكتل المنطقيّة:"
-
-#: /etc/rc.d/rc.sysinit:143
-msgid "Initializing hardware... "
-msgstr "تهيئة العتاد للعمل: "
-
-#: /etc/rc.d/init.d/netfs:141
-msgid "Active SMB mountpoints: "
-msgstr "أماكن تجهيز SMB النّشطة: "
-
-#: /etc/rc.d/init.d/kadmin:39
-msgid "Extracting kadm5 Service Keys: "
-msgstr "جاري استخراج مفاتيح خدمة kadm5: "
-
-#: /etc/rc.d/init.d/privoxy:206
-msgid "Starting $PRIVOXY_PRG: "
-msgstr "جاري تشغيل $PRIVOXY_PRG: "
-
-#: /etc/rc.d/init.d/innd:66
-msgid "Stopping INN actived service: "
-msgstr "جاري إيقاف خدمة INN المُنشّطة: "
-
-#: /etc/sysconfig/network-scripts/ifup-aliases:156
-msgid "error in $FILE: already seen device $parent_device:$DEVNUM in $devseen"
-msgstr "خطأ في الملفّ $FILE: تمّت رؤية الجهاز $parent_device:$DEVNUM في $devseen"
-
-#: /etc/rc.d/init.d/syslog:44
-msgid "Shutting down kernel logger: "
-msgstr "جاري إيقاف تشغيل مُسجّل النّواة: "
-
-#: /etc/rc.d/init.d/ups:48
-msgid "Starting UPS monitor (master): "
-msgstr "جاري تشغيل مُراقب UPS (الأساسي): "
-
-#: /etc/rc.d/init.d/autofs:535
-msgid "Stop $command"
-msgstr "إيقاف $command"
-
-#: /etc/rc.d/init.d/halt:35
-msgid "Halting system..."
-msgstr "جاري إيقاف النّظام..."
-
-#: /etc/sysconfig/network-scripts/ifup:75
-#, fuzzy
-msgid "PHYSDEV should be set for device ${DEVICE}"
-msgstr "يجب تحديد متغير PHYSDEV الخاص بجهاز ${DEVICE}"
-
-#: /etc/rc.d/init.d/iptables:158
-msgid "Applying $IPTABLES firewall rules: "
-msgstr "جاري تطبيق أحكام الجدار النّاري $IPTABLES: "
-
-#: /etc/rc.d/init.d/functions:285
-msgid "Usage: status {program}"
-msgstr "الاستعمال: status {البرنامج}"
-
-#: /etc/rc.d/init.d/amd:93
-msgid "Reloading $prog:"
-msgstr "جاري إعادة تحميل $prog:"
-
-#: /etc/rc.d/init.d/rhnsd:46
-msgid "Stopping Red Hat Network Daemon: "
-msgstr "جاري إيقاف عفريت شبكة ردهات: "
-
-#: /etc/rc.d/init.d/xendomains:84
-msgid "Starting auto Xen domains:"
-msgstr "جاري تشغيل نطاقات Xen التلقائية:"
-
-#: /etc/rc.d/init.d/multipathd:44
-msgid "Stopping $prog daemon: "
-msgstr "جاري إيقاف خادم $prog: "
-
-#: /etc/sysconfig/network-scripts/ifup-ipv6:277
-msgid "Using 6to4 and RADVD IPv6 forwarding usually should be enabled, but it isn't"
-msgstr "يجب أن يكون تمرير 6to4 وRADVD IPv6 مستخدماً عادة، لكنّه ليس كذلك"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:267
-msgid "Forwarding control parameter isn't valid '$fw_control' (arg 1)"
-msgstr "مُعطى تّحكّم التّمرير '$fw_control' ليس صالحاً (المُعطى الأوّل)"
-
-#: /etc/rc.d/init.d/rusersd:35
-msgid "Stopping rusers services: "
-msgstr "جاري إيقاف خدمات المستخدمين البعيدين (rusers): "
-
-#: /etc/rc.d/init.d/dund:25
-msgid "Starting dund: "
-msgstr "جاري تشغيل dund: "
-
-#: /etc/rc.d/rc.sysinit:611
-msgid "Enabling swap space: "
-msgstr "جاري تمكين مساحة الذّاكرة البديلة: "
-
-#: /etc/rc.d/init.d/messagebus:26
-msgid "Starting system message bus: "
-msgstr "جاري تشغيل نظام ناقل الرّسائل: "
-
-#: /etc/sysconfig/network-scripts/ifup:29
-msgid "$0: configuration for ${1} not found."
-msgstr "$0: لم يُعثر على تهيئة ${1}."
-
-#: /etc/rc.d/init.d/privoxy:221
-msgid "Stopping $PRIVOXY_PRG: "
-msgstr "جاري إيقاف $PRIVOXY_PRG: "
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1069
-msgid ""
-"Given remote address '$addressipv4tunnel' on tunnel device '$device' is "
-"already configured on device '$devnew'"
-msgstr ""
-"العنوان البعيد المُدخل '$addressipv4tunnel' على جهاز النّفق '$device' مُهيّأ "
-"مسبقاً على الجهاز '$devnew'"
-
-#: /etc/sysconfig/network-scripts/ifup-sl:44
-msgid "/etc/sysconfig/network-scripts/dip-$DEVICE does not exist"
-msgstr "/etc/sysconfig/network-scripts/dip-$DEVICE غير موجود"
-
-#: /etc/sysconfig/network-scripts/ifdown-sit:46
-#: /etc/sysconfig/network-scripts/ifup-sit:59
-msgid ""
-"Device '$DEVICE' isn't supported here, use IPV6_AUTOTUNNEL setting and "
-"restart (IPv6) networking"
-msgstr ""
-"الجهاز '$DEVICE' غير مدعوم هنا، استخدم إعداد IPV6_AUTOTUNNEL وقُم بإعادة "
-"تشغيل تشبيك (IPv6)"
-
-#: /etc/rc.d/init.d/yum:22
-msgid "Enabling nightly yum update: "
-msgstr "جاري تمكين تحديث yum اللّيلي: "
-
-#: /etc/rc.d/init.d/yum:65
-msgid "Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}"
-msgstr "الاستعمال: $0 {start|stop|status|restart|reload|force-reload|condrestart}"
-
-#: /etc/rc.d/init.d/postfix:71
-msgid "Reloading postfix: "
-msgstr "جاري إعادة تحميل postfix: "
-
-#: /etc/rc.d/init.d/isicom:36
-msgid "Disabling PLX devices... "
-msgstr "جاري تعطيل أجهزة PLX... "
-
-#: /etc/rc.d/init.d/vsftpd:37
-msgid "$prog $site"
-msgstr "$prog $site"
-
-#: /etc/rc.d/init.d/netplugd:33
-msgid "Starting network plug daemon: "
-msgstr "جاري تشغيل عفريت قابس الشّبكة: "
-
-#: /etc/rc.d/init.d/network:295
-msgid "Currently active devices:"
-msgstr "الأجهزة النّشطة حاليا:"
-
-#: /etc/rc.d/init.d/NetworkManager:31
-msgid "Setting network parameters... "
-msgstr "جاري إعداد معطيات وسائط الشّبكة: "
-
-#: /etc/rc.d/init.d/isicom:63
-msgid "Usage: ${0##*/} {start|stop|status|restart|reload|condrestart}"
-msgstr "الاستعمال: ${0##*/} {start|stop|status|restart|reload|condrestart}"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:822
-msgid "Missing parameter 'IPv4 address' (arg 1)"
-msgstr "مُعطى 'عنوان IP4v' مفقود (المُدخل الأوّل)"
-
-#: /etc/rc.d/init.d/rarpd:65
-msgid "Usage: $0 {start|stop|restart|condrestart|reload|status}"
-msgstr "الاستعمال: $0 {start|stop|restart|condrestart|reload|status}"
-
-#: /etc/rc.d/init.d/netplugd:59 /etc/rc.d/init.d/rdisc:77
-#: /etc/rc.d/init.d/rstatd:63 /etc/rc.d/init.d/rusersd:66
-#: /etc/rc.d/init.d/rwalld:64 /etc/rc.d/init.d/rwhod:63
-msgid "Usage: $0 {start|stop|status|restart}"
-msgstr "الاستعمال: $0 {start|stop|status|restart}"
-
-#: /etc/rc.d/init.d/postfix:63
-msgid "postfix stop"
-msgstr "إيقاف postfix"
-
-#: /etc/rc.d/init.d/smartd:63
-msgid "Checking SMART devices now: "
-msgstr "فحص اﻷجهزة المجهزة ب SMART: "
-
-#: /etc/sysconfig/network-scripts/ifup-ippp:55
-#: /etc/sysconfig/network-scripts/ifup-isdn:55
-msgid "$*"
-msgstr "$*"
-
-#: /etc/rc.d/init.d/dc_client:74 /etc/rc.d/init.d/dc_server:70
-msgid "Usage: $prog {start|stop|restart|condrestart|status|help}"
-msgstr "الاستعمال: $prog {start|stop|restart|condrestart|status|help}"
-
-#: /etc/rc.d/init.d/ypbind:44
-msgid "Listening for an NIS domain server."
-msgstr "جاري الاستماع لخادم نطاق NIS."
-
-#: /etc/rc.d/rc.sysinit:414
-msgid "(Repair filesystem)"
-msgstr "(إصلاح نظام الملفّات)"
-
-#: /etc/rc.d/init.d/httpd:80
-msgid "not reloading $httpd due to configuration syntax error"
-msgstr "لن تجري إعادة تحميل خادم $httpd لوجود خطأ انشائي في التنصيبة"
-
-#: /etc/rc.d/init.d/postgresql:169
-msgid "Initializing database: "
-msgstr "جاري تمهيد قاعدة البيانات: "
-
-#: /etc/rc.d/init.d/vncserver:20
-msgid "VNC server"
-msgstr "خادم VNC"
-
-#: /etc/sysconfig/network-scripts/ifup-eth:62
-msgid "Bridge support not available in this kernel"
-msgstr "دعم الجسر غير متوفّر في هذه النّواة"
-
-#: /etc/rc.d/init.d/pand:36
-msgid "Shutting down pand: "
-msgstr "جاري إيقاف تشغيل pand: "
-
-#: /etc/sysconfig/network-scripts/ifup-routes:5
-msgid "usage: ifup-routes <net-device> [<nickname>]"
-msgstr "الاستعمال: ifup-routes <جهاز الشّبكة> [<الاسم المستعار>]"
-
-#: /etc/rc.d/init.d/clvmd:162
-msgid "Usage: $0 {start|stop|restart|status}"
-msgstr "صيغة الاستعمال: $0 {start|stop|restart|reload|status}"
-
-#: /etc/sysconfig/network-scripts/ifup-ppp:81
-msgid "/etc/sysconfig/network-scripts/chat-${DEVNAME} does not exist for ${DEVICE}"
-msgstr "/etc/sysconfig/network-scripts/chat-${DEVNAME} غير متوفّر للجهاز ${DEVICE}"
-
-#: /etc/rc.d/init.d/pcmcia:98
-msgid "using yenta_socket instead of $PCIC"
-msgstr "جاري استعمال yenta_socket بدلا من $PCIC"
-
-#: /etc/rc.d/init.d/radiusd:37
-msgid "Starting RADIUS server: "
-msgstr "جاري تشغيل خادم RADIUS: "
-
-#: /etc/sysconfig/network-scripts/ifdown:13
-#: /etc/sysconfig/network-scripts/ifdown:20
-msgid "usage: ifdown <device name>"
-msgstr "الاستعمال: ifdown <اسم الجهاز>"
-
-#: /etc/rc.d/init.d/nfslock:58
-msgid "Starting NFS locking: "
-msgstr "جاري بدأ قفل NFS: "
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1049
-msgid "Missing parameter 'IPv4-tunnel address' (arg 2)"
-msgstr "المُعطى 'عنوان نفق IPv4' مفقود (المُعطى الثّاني)"
-
-#: /etc/rc.d/init.d/postgresql:160
-msgid "An old version of the database format was found."
-msgstr "تم العثور على إصدار قديم من صيغة قاعدة البيانات."
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1444
-msgid "No reason given for sending trigger to radvd"
-msgstr "لم يُعطى أيّ سبب لإرسال مُطْلِقٍ إلى radvd"
-
-#: /etc/rc.d/init.d/arptables_jf:74
-msgid "Applying arptables firewall rules: "
-msgstr "جاري تطبيق أحكام الجدار النّاري: "
-
-#: /etc/rc.d/init.d/isicom:20
-msgid "Loading isicom firmware... "
-msgstr "جاري تحميل البرمجيّات الضّمنيّة لـisicom... "
-
-#: /etc/rc.d/init.d/microcode_ctl:95
-msgid "Usage: $0 {start|stop|restart}"
-msgstr "صيغة الاستعمال: $0 {start|stop|restart}"
-
-#: /etc/rc.d/init.d/rwhod:23
-msgid "Starting rwho services: "
-msgstr "جاري تشغيل خدمات rwho: "
-
-#: /etc/rc.d/init.d/innd:45
-msgid "Stopping INND service: "
-msgstr "جاري إيقاف خدمة INND: "
-
-#: /etc/rc.d/init.d/psacct:23
-msgid "Shutting down process accounting: "
-msgstr "جاري إيقاف تشغيل مُحاسبة العمليّات: "
-
-#: /etc/rc.d/init.d/dund:34
-msgid "Shutting down dund: "
-msgstr "جاري إيقاف تشغيل dund: "
-
-#: /etc/rc.d/init.d/gpm:61
-msgid "Shutting down console mouse services: "
-msgstr "جاري إيقاف تشغيل خدمات فأرة الشّاشة الطّرفيّة: "
-
-#: /etc/rc.d/init.d/ypbind:29 /etc/rc.d/init.d/ypserv:30
-msgid "Setting NIS domain name $NISDOMAIN: "
-msgstr "جاري تحديد اسم نطاق NIS $NISDOMAIN: "
-
-#: /etc/rc.d/init.d/kudzu:25
-msgid "Checking for new hardware"
-msgstr "جاري تفحّص وجود عتاد جديد"
-
-#: /etc/rc.d/init.d/ip6tables:27
-msgid "ipchains and $IP6TABLES can not be used together."
-msgstr "ipchains و $IP6TABLES لا يمكن استخدامها سويّة."
-
-#: /etc/rc.d/init.d/isdn:179 /etc/rc.d/init.d/isdn:182
-msgid "Starting $prog"
-msgstr "جاري تشغيل $prog"
-
-#: /etc/rc.d/init.d/autofs:539
-msgid "Reload map $command"
-msgstr "إعادة تحميل خريطة $command"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1332
-msgid ""
-"Given IPv6 default gateway '$address' has scope '$device_scope' defined, "
-"given default gateway device '$device' will be not used"
-msgstr ""
-"عنوان IPv6 للبوّابة الافتراضية '$address' له مجال '$device_scope' مُعرّف، لن "
-"يتم استخدام جهاز البوّابة الافتراضيّ المُدخل '$device'"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1478
-msgid "Unsupported mechanism '$mechanism' for sending trigger to radvd"
-msgstr "'$mechanism' هي آليّة غير مدعومة لإرسال المُطْلِق إلى radvd"
-
-#: /etc/rc.d/init.d/postgresql:268
-msgid ""
-"Usage: $0 {start|stop|status|restart|condrestart|condstop|reload|force-"
-"reload}"
-msgstr "الاستعمال: $0 {start|stop|status|restart|condrestart|reload|force-reload}"
-
-#: /etc/sysconfig/network-scripts/ifup-ipv6:199
-msgid "Given IPv4 address '$ipv4addr' is not globally usable"
-msgstr "عنوان IPv4 المُدخل '$ipv4addr' لا يمكن استخدامه بشكل عامّ"
-
-#: /etc/rc.d/init.d/smb:58 /etc/rc.d/init.d/smb:63 /etc/rc.d/init.d/winbind:51
-msgid "Shutting down $KIND services: "
-msgstr "جاري إيقاف خدمات $KIND: "
-
-#: /etc/rc.d/init.d/ip6tables:257 /etc/rc.d/init.d/ip6tables:262
-#: /etc/rc.d/init.d/iptables:257 /etc/rc.d/init.d/iptables:262
-msgid "Firewall is not configured. "
-msgstr "الجداري الناريّ غير مُهيّأ: "
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:178
-msgid "Kernel is not compiled with IPv6 support"
-msgstr "لم يتم ترجمة النّواة لتدعم IPv6"
-
-#: /etc/rc.d/init.d/arptables_jf:106
-msgid "Resetting built-in chains to the default ACCEPT policy:"
-msgstr "جاري إعادة تعيين السلاسل المدمجة إلى سياسة القبول الافتراضية (ACCEPT): "
-
-#: /etc/rc.d/init.d/functions:439
-msgid "Start service $1 (Y)es/(N)o/(C)ontinue? [Y] "
-msgstr "بدء الخدمة $1 (ن)عم\\(ل)ا\\ (و)اصل ؟ [ن] "
-
-#: /etc/rc.d/init.d/radiusd:56
-msgid "Reloading RADIUS server: "
-msgstr "جاري إعادة تحميل خادم RADIUS: "
-
-#: /etc/rc.d/rc.sysinit:378
-msgid "Checking filesystems"
-msgstr "جاري فحص أنظمة الملفّات"
-
-#: /etc/rc.d/init.d/arptables_jf:96
-msgid "Removing user defined chains:"
-msgstr "إزالة السلاسل المعرفة من قبل المستخدم:"
-
-#: /etc/rc.d/init.d/multipathd:36
-msgid "Starting $prog daemon: "
-msgstr "جاري تشغيل خادم $prog: "
-
-#: /etc/rc.d/rc.sysinit:411
-msgid "*** Dropping you to a shell; the system will reboot"
-msgstr "*** جاري إهباطك إلى الصًّدَفة، سيقوم النّظام بإعادة التّشغيل"
-
-#: /etc/rc.d/init.d/ip6tables:158
-msgid "Applying $IP6TABLES firewall rules: "
-msgstr "جاري تطبيق الأحكام $IP6TABLES للجداري النّاري: "
-
-#: /etc/rc.d/init.d/httpd:118
-msgid ""
-"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|"
-"graceful|help|configtest}"
-msgstr ""
-"الاستعمال: $prog {start|stop|restart|condrestart|reload|status|fullstatus|"
-"graceful|help|configtest}"
-
-#: /etc/rc.d/init.d/postgresql:124
-msgid "Starting ${NAME} service: "
-msgstr "جاري تشغيل خدمة ${NAME}: "
-
-#: /etc/rc.d/init.d/netfs:145
-msgid "Active CIFS mountpoints: "
-msgstr "أماكن تثبيت CIFS النّشطة: "
-
-#: /etc/rc.d/init.d/syslog:33
-msgid "Starting system logger: "
-msgstr "جاري تشغيل مُسجّل النّظام: "
-
-#: /etc/rc.d/init.d/nscd:67 /etc/rc.d/init.d/nscd:69
-msgid "$prog shutdown"
-msgstr "إيقاف تشغيل $prog"
-
-#: /etc/rc.d/init.d/sshd:53
-msgid "Generating SSH2 RSA host key: "
-msgstr "جاري توليد مفتاح SSH2 RSA للمضيف: "
-
-#: /etc/sysconfig/network-scripts/ifup-eth:238
-msgid "Error adding address ${IPADDR} for ${DEVICE}."
-msgstr "خطأ في إضافة العنوان ${IPADDR} للجهاز ${DEVICE}."
-
-#: /etc/rc.d/init.d/pcmcia:105
-msgid "cardmgr is already running."
-msgstr "cardmgr يعمل مسبقاً."
-
-#: /etc/rc.d/init.d/innd:33
-msgid "Starting INND system: "
-msgstr "جاري تشغيل نظام INND: "
-
-#: /etc/rc.d/init.d/arptables_jf:138 /etc/rc.d/init.d/ip6tables:270
-#: /etc/rc.d/init.d/iptables:270
-msgid "Table: $table"
-msgstr "الجدول: $table"
-
-#: /etc/rc.d/init.d/netfs:125
-msgid "Configured SMB mountpoints: "
-msgstr "أماكن تجهيز SMB المُهيّئة: "
-
-#: /etc/rc.d/init.d/postfix:36
-msgid "Starting postfix: "
-msgstr "جاري تشغيل postfix: "
-
-#: /etc/rc.d/init.d/ip6tables:118 /etc/rc.d/init.d/iptables:118
-msgid "Setting chains to policy $policy: "
-msgstr "جاري وضْع السلاسل للاستراتيجية $policy: "
-
-#: /etc/rc.d/init.d/nfs:146 /etc/rc.d/init.d/nfslock:121
-msgid "restart"
-msgstr "إعادة التّشغيل"
-
-#: /etc/sysconfig/network-scripts/ifup-eth:219
-msgid "Error, some other host already uses address ${IPADDR}."
-msgstr "خطأ، مضيف آخر ما يستخدم العنوان ${IPADDR} مسبقاً."
-
-#: /etc/rc.d/init.d/nfs:119
-msgid "Shutting down NFS services: "
-msgstr "جاري إيقاف تشغيل خدمات NFS: "
-
-#: /etc/rc.d/init.d/netfs:133
-msgid "Configured NCP mountpoints: "
-msgstr "أماكن تجهيز NCP المُهيّئة: "
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:637
-msgid "Cannot delete IPv6 address '$address' on dev '$device'"
-msgstr "لا يمكن حذف عنوان '$address' من طراز IPv6 من جهاز '$device'"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:519
-msgid "Missing parameter 'IPv6-address' (arg 2)"
-msgstr "المُعطى 'عنوان IPv6' مفقود (المُعطى الثّاني)"
-
-#: /etc/rc.d/init.d/functions:329
-msgid "FAILED"
-msgstr "فَشِل"
-
-#: /etc/rc.d/init.d/smb:42 /etc/rc.d/init.d/smb:47 /etc/rc.d/init.d/winbind:40
-msgid "Starting $KIND services: "
-msgstr "جاري تشغيل خدمات $KIND: "
-
-#: /etc/rc.d/init.d/pcmcia:148
-msgid "cardmgr is stopped"
-msgstr "cardmgr مُتوقّف"
-
-#: /etc/rc.d/init.d/acpid:77 /etc/rc.d/init.d/auditd:118
-#: /etc/rc.d/init.d/messagebus:75 /etc/rc.d/init.d/multipathd:87
-#: /etc/rc.d/init.d/readahead:46 /etc/rc.d/init.d/readahead_early:46
-#: /etc/rc.d/init.d/rhnsd:82 /etc/rc.d/init.d/snmpd:86
-#: /etc/rc.d/init.d/snmptrapd:76 /etc/rc.d/init.d/xinetd:117
-msgid "Usage: $0 {start|stop|status|restart|condrestart|reload}"
-msgstr "الاستعمال: $0 {start|stop|status|restart|condrestart|reload}"
-
-#: /etc/sysconfig/network-scripts/ifup-ipv6:241
-msgid "Warning: interface 'tun6to4' does not support 'IPV6_DEFAULTGW', ignored"
-msgstr "تحذير: الواجهة 'tun6to4' لا تدعم 'IPV6_DEFAULTGW'، تمّ التّجاهل"
-
-#: /etc/sysconfig/network-scripts/ifup-eth:85
-#, fuzzy
-msgid "Device ${DEVICE} does not seem to be present, delaying initialization."
-msgstr "لا يبدو أنّ جهاز ${DEVICE} حاضر، جاري تأخير التّمهيد."
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:724
-msgid "Given IPv4 address '$testipv4addr_valid' has no proper format"
-msgstr "عنوان IPv4 المُدخل '$testipv4addr_valid' ليس له نسق مُلائم"
-
-#: /etc/rc.d/init.d/network:277
-msgid "Disabling IPv4 automatic defragmentation: "
-msgstr "جاري تعطيل إزالة كِسَر IPv4 الآليّة: "
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:341
-msgid "Unknown error"
-msgstr "خطأ مجهول"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:491
-msgid "Tunnel device 'sit0' is still up"
-msgstr "جهاز النّفق 'sit0' يا يزال يعمل"
-
-#: /etc/rc.d/init.d/mdmonitor:43 /etc/rc.d/init.d/mdmonitor:47
-msgid "mdadm"
-msgstr "mdadm"
-
-#: /etc/sysconfig/network-scripts/ifup-sit:72
-msgid "Device '$DEVICE' is already up, please shutdown first"
-msgstr "الجهاز '$DEVICE' يعمل مسبقاً، رجاء قم بإيقاف تشغيله أوّلاً"
-
-#: /etc/rc.d/init.d/iptables:172
-msgid "Loading additional $IPTABLES modules: "
-msgstr "جاري تحميل وحدات $IPTABLES إضافيّة: "
-
-#: /etc/sysconfig/network-scripts/ifup-sl:47
-msgid "/etc/sysconfig/network-scripts/dip-$DEVICE does not exist for $DEVICE"
-msgstr "/etc/sysconfig/network-scripts/dip-$DEVICE غير موجود للجهاز $DEVICE"
-
-#: /etc/rc.d/init.d/isicom:16
-msgid "Loading PLX (isicom) modules... "
-msgstr "جاري تحميل وحدات PLX (isicom)... "
-
-#: /etc/rc.d/init.d/nfs:99 /etc/rc.d/init.d/nfs:124
-msgid "Shutting down NFS mountd: "
-msgstr "جاري إيقاف تشغيل NFS mountd: "
-
-#: /etc/rc.d/init.d/halt:218
-msgid "On the next boot fsck will be forced."
-msgstr "عند الإقلاع التّالي سوف يُجبر تشغيل fsck."
-
-#: /etc/rc.d/init.d/functions:351
-msgid "WARNING"
-msgstr "تحذير"
-
-#: /etc/rc.d/init.d/network:82
-msgid "Setting 802.1Q VLAN parameters: "
-msgstr "جاري وضع مُدخلات 802.1Q VLAN: "
-
-#: /etc/rc.d/init.d/named:174
-msgid "Usage: $0 {start|stop|status|restart|condrestart|reload|probe}"
-msgstr "الاستعمال: $0 {start|stop|status|restart|condrestart|reload|probe}"
-
-#: /etc/rc.d/init.d/sendmail:110
-msgid "Shutting down sm-client: "
-msgstr "جاري إيقاف تشغيل sm-client: "
-
-#: /etc/sysconfig/network-scripts/ifup-aliases:310
-msgid "error in $FILE: IPADDR_START greater than IPADDR_END"
-msgstr "خطأ في $FILE: قيمة IPADDR_START أكبر من IPADDR_END"
-
-#: /etc/rc.d/rc.sysinit:180
-msgid " storage"
-msgstr "تخزين"
-
-#: /etc/rc.d/init.d/autofs:525
-msgid "Checking for changes to /etc/auto.master ...."
-msgstr "جاري فحص التغييرات في /etc/auto.master ...."
-
-#: /etc/rc.d/init.d/autofs:484
-msgid "No Mountpoints Defined"
-msgstr "ليس هناك أماكن تجهيز مُعرّفة"
-
-#: /etc/rc.d/rc.sysinit:448
-msgid "Converting old group quota files: "
-msgstr "جاري تحويل ملفّات حصّة المجموعات النّسبيّة القديمة: "
-
-#: /etc/rc.d/init.d/network:292
-msgid "Configured devices:"
-msgstr "الأجهزة المُهيّئة:"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:674
-msgid "Given IPv6 address '$testipv6addr_valid' is not valid"
-msgstr "عنوان IPv6 المُدخل '$testipv6addr_valid' غير صالح"
-
-#: /etc/rc.d/init.d/radiusd:45
-msgid "Stopping RADIUS server: "
-msgstr "جاري إيقاف خادم RADIUS: "
-
-#: /etc/rc.d/init.d/ldap:97
-msgid "$file is not owned by \"$user\""
-msgstr "الملفّ $file لا يملكه المستخد \"$user\""
-
-#: /etc/rc.d/init.d/ospf6d:59
-msgid "Usage: $prog {start|stop|restart|reload|condrestart|status}"
-msgstr "الاستعمال: $prog {start|stop|restart|reload|condrestart|status}"
-
-#: /etc/rc.d/init.d/rdisc:28
-msgid "Starting router discovery: "
-msgstr "جاري تشغيل خدمة استطلاع الموجه:"
-
-#: /etc/rc.d/init.d/netfs:44
-msgid "Mounting other filesystems: "
-msgstr "جاري تجهيز أنظمة ملفّات أخرى: "
-
-#: /etc/rc.d/init.d/netfs:102
-msgid "Unmounting NFS filesystems: "
-msgstr "جاري إزالة تجهيز أنظمة ملفّات NFS: "
-
-#: /etc/rc.d/init.d/nfslock:77
-msgid "Stopping NFS locking: "
-msgstr "جاري إيقاف قفل NFS: "
-
-#: /etc/rc.d/init.d/autofs:424 /etc/rc.d/init.d/autofs:447
-msgid "Unmounting loopback filesystem $match: "
-msgstr "جاري إزالة تجهيز نظام ملفّات loopback $match: "
-
-#: /etc/rc.d/init.d/atalk:23
-msgid "Starting AppleTalk services: "
-msgstr "جاري تشغيل خدمات AppleTalk: "
-
-#: /etc/sysconfig/network-scripts/ifup-ppp:49
-msgid "pppd does not exist or is not executable for ${DEVICE}"
-msgstr "pppd غير موجود أو ليس تنفيذيّاً للجهاز ${DEVICE}"
-
-#: /etc/sysconfig/network-scripts/ifdown:31
-#: /etc/sysconfig/network-scripts/ifup:41
-msgid "Users cannot control this device."
-msgstr "لا يمكن للمستخدمين التّحكّم بهذا الجهاز."
-
-#: /etc/sysconfig/network-scripts/ifup-ppp:79
-msgid "ifup-ppp for ${DEVNAME} exiting"
-msgstr "يقوم ifup-ppp لجهاز ${DEVNAME} بالخروج"
-
-#: /etc/sysconfig/network-scripts/ifup-sl:33
-#: /etc/sysconfig/network-scripts/ifup-sl:45
-msgid "ifup-sl for $DEVICE exiting"
-msgstr "يقوم ifup-sl لجهاز $DEVICE بالخروج"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:118
-msgid "WARN "
-msgstr "إنذار "
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:338
-msgid ""
-"'No route to host' adding route '$networkipv6' via gateway '$gatewayipv6' "
-"through device '$device'"
-msgstr ""
-"لم يتم العثور على طريق إلى المضيف' عند إضافة الوُجهة '$networkipv6' عبر البوّابة "
-"'$gatewayipv6'. من خلال جهاز '$device'"
-
-#: /etc/rc.d/init.d/network:147 /etc/rc.d/init.d/network:158
-msgid "Bringing up interface $i: "
-msgstr "جاري تشغيل الواجهة $i: "
-
-#: /etc/rc.d/init.d/vncserver:58 /etc/rc.d/init.d/vncserver:59
-msgid "vncserver shutdown"
-msgstr "إيقاف تشغيل vncserver"
-
-#: /etc/rc.d/init.d/pcmcia:113 /etc/rc.d/init.d/pcmcia:136
-msgid "done."
-msgstr "تمّ."
-
-#: /etc/rc.d/init.d/iptables:22
-msgid "/sbin/$IPTABLES does not exist."
-msgstr "/sbin/$IPTABLES غير موجود."
-
-#: /etc/sysconfig/network-scripts/ifup-eth:53
-msgid "Bridge support not available: brctl not found"
-msgstr "دعم الجسر غير متوفّر: لم يُعثر على brctl"
-
-#: /etc/rc.d/init.d/pcmcia:119
-msgid "Shutting down PCMCIA services: "
-msgstr "جاري إيقاف تشغيل خدمات PCMCIA: "
-
-#: /etc/rc.d/init.d/ip6tables:85 /etc/rc.d/init.d/iptables:85
-msgid "Flushing firewall rules: "
-msgstr "جاري إزالة أحكام الجدار النّاري: "
-
-#: /etc/rc.d/rc.sysinit:486
-msgid "Mounting local filesystems: "
-msgstr "جاري تجهيز أنظمة الملفّات المحليّة: "
-
-#: /etc/rc.d/init.d/postfix:89
-msgid "postfix check"
-msgstr "مراجعة postfix"
-
-#: /etc/rc.d/init.d/halt:164
-msgid "Unmounting pipe file systems (retry): "
-msgstr "جاري إزالة تجهيز أنظمة ملفّات pipe (إعادة المحاولة): "
-
-#: /etc/rc.d/init.d/iiim:32
-msgid "Stopping IIIMF input server: "
-msgstr "جاري إيقاف خادم الإدخال IIIMF: "
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:95
-msgid "ERROR: [ipv6_log] Loglevel isn't valid '$level' (arg 2)"
-msgstr "خطأ: مستوى التّسجيل [ipv6_log] ليس '$level' صالحاً (المُعطى الثّاني)"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:127
-msgid "NOTICE "
-msgstr "إشعار "
-
-#: /etc/rc.d/init.d/autofs:521
-msgid "$prog not running"
-msgstr "$prog لا يعمل"
-
-#: /etc/rc.d/init.d/arptables_jf:60
-msgid "Clearing all current rules and user defined chains:"
-msgstr "جاري إزالة كل القواعد و السلاسل المعرفة من طرف المستخدم الحالية:"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1089
-msgid "Tunnel device '$device' bringing up didn't work"
-msgstr "لم ينجح تشغيل جهاز النّفق '$device'"
-
-#: /etc/rc.d/init.d/nifd:34
-msgid "Shutting down nifd services: "
-msgstr "جاري إيقاف تشغيل خدمات nifd: "
-
-#: /etc/sysconfig/network-scripts/ifup-eth:180
-msgid " failed."
-msgstr " فَشِل."
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:121
-msgid "CRITICAL "
-msgstr "حرج "
-
-#: /etc/rc.d/init.d/nfs:64
-msgid "Starting NFS quotas: "
-msgstr "جاري تشغيل حصص NFS النّسبيّة: "
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:911
-msgid "Missing parameter 'global IPv4 address' (arg 2)"
-msgstr "مُعطى 'عنوان IPv4 المحلّي' مفقود (المُعطى الثّاني)"
-
-#: /etc/sysconfig/network-scripts/ifup-ppp:78
-msgid "/etc/sysconfig/network-scripts/chat-${DEVNAME} does not exist"
-msgstr "/etc/sysconfig/network-scripts/chat-${DEVNAME} غير موجود"
-
-#: /etc/rc.d/rc.sysinit:410
-msgid "*** An error occurred during the file system check."
-msgstr "*** حدث خطأ أثناء تفحّص نظام الملفّات."
-
-#: /etc/rc.d/init.d/arptables_jf:144
-msgid "Changing target policies to DROP: "
-msgstr "جاري تغيير سياسات الهدف إلى رفض (DROP): "
-
-#: /etc/sysconfig/network-scripts/ifup-ippp:362
-#: /etc/sysconfig/network-scripts/ifup-isdn:362
-msgid "Warning: link doesn't support IPv6 using encapsulation 'rawip'"
-msgstr "تحذير: الرّابط لا يدعم IPv6 الذي يستخدم التّضمين 'rawip'"
-
-#: /etc/sysconfig/network-scripts/ifup-ppp:86
-msgid "Setting up a new ${PEERCONF} config file"
-msgstr "جاري إعداد ملفّ تهيئة ${PEERCONF} جديد"
-
-#: /etc/rc.d/init.d/pcmcia:71
-msgid "PCIC module not defined in startup options!"
-msgstr "وحدة PCIC غير مُعرّفة في خيارات بدء التّشغيل!"
-
-#: /etc/rc.d/init.d/syslog:47
-msgid "Shutting down system logger: "
-msgstr "جاري إيقاف تشغيل مُسجّل النّظام: "
-
-#: /etc/rc.d/rc:62
-msgid "Stopping $subsys: "
-msgstr "جاري إيقاف $subsys:"
-
-#: /etc/rc.d/init.d/ipsec:98
-msgid "cannot find ipsec command"
-msgstr "لم يمكن إيجاد الأمر ipsec"
-
-#: /etc/sysconfig/network-scripts/ifup-eth:168
-msgid " failed; no link present. Check cable?"
-msgstr " فَشِل، ليس هناك اتّصال. تحقّق من السّلك؟"
-
-#: /etc/rc.d/init.d/isdn:150 /etc/rc.d/init.d/isdn:152
-msgid "Loading Firmware"
-msgstr "جاري تحميل فايَروايَر"
-
-#: /etc/rc.d/init.d/nfslock:131
-msgid "Usage: $0 {start|stop|status|restart|probe|condrestart}"
-msgstr "الاستعمال: $0 {start|stop|status|restart|probe|condrestart}"
-
-#: /etc/rc.d/init.d/microcode_ctl:30
-msgid "$0: microcode datafile not present (/etc/firmware/microcode.dat)"
-msgstr "$0: ملف بيانات الميكروكود غير موجود (/etc/firmware/microcode.dat)"
-
-#: /etc/rc.d/init.d/sshd:132
-msgid "Reloading $prog"
-msgstr "جاري إعادة تحميل $prog:"
-
-#: /etc/rc.d/init.d/halt:61
-msgid "Sending all processes the KILL signal..."
-msgstr "جاري إرسال إشارة KILL إلى كلّ العمليّات..."
-
-#: /etc/rc.d/init.d/netdump:275 /etc/rc.d/init.d/netdump:283
-msgid "disabling netdump"
-msgstr "جاري تعطيل netdump"
-
-#: /etc/rc.d/init.d/ldap:103 /etc/rc.d/init.d/ldap:109
-msgid "$file is not readable by \"$user\""
-msgstr "لا يملك المستخدم \"$user\" أن يقرأ الملفّ $file "
-
-#: /etc/rc.d/init.d/arptables_jf:161
-msgid "Saving current rules to $ARPTABLES_CONFIG: "
-msgstr "جاري حفظ أحكام الجدار النّاري إلى $ARPTABLES_CONFIG: "
-
-#: /etc/rc.d/init.d/anacron:56 /etc/rc.d/init.d/atd:80
-#: /etc/rc.d/init.d/canna:64 /etc/rc.d/init.d/cpuspeed:80
-#: /etc/rc.d/init.d/dhcp6r:75 /etc/rc.d/init.d/dhcp6s:79
-#: /etc/rc.d/init.d/dhcrelay:78 /etc/rc.d/init.d/dictd:74
-#: /etc/rc.d/init.d/gpm:94 /etc/rc.d/init.d/iiim:60 /etc/rc.d/init.d/ipsec:197
-#: /etc/rc.d/init.d/ipsec:202 /etc/rc.d/init.d/ntpd:139
-#: /etc/rc.d/init.d/sendmail:149 /etc/rc.d/init.d/ups:116
-#: /etc/rc.d/init.d/vncserver:88 /etc/rc.d/init.d/vsftpd:82
-msgid "Usage: $0 {start|stop|restart|condrestart|status}"
-msgstr "الاستعمال: $0 {start|stop|restart|condrestart|status}"
-
-#: /etc/rc.d/init.d/autofs:324
-msgid ""
-"Configured Mount Points:\n"
-"------------------------"
-msgstr "أماكن التثبيت المُهيّئة: ------------------------"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:692
-msgid ""
-"On given address '$testipv6addr_valid' the prefix length is out of range "
-"(valid: 0-128)"
-msgstr "في العنوان المُدخل '$testipv6addr_valid' طول البادئة خارج المدى (يصلح 0-128)"
-
-#: /etc/rc.d/init.d/ntpd:83
-msgid "$prog: Synchronizing with time server: "
-msgstr "$prog: جاري المُزامنة مع خادم الوقت: "
-
-#: /etc/rc.d/rc.sysinit:443
-msgid "Converting old user quota files: "
-msgstr "جاري تحويل ملفّات حصّة المستخدمين النّسبيّة القديمة: "
-
-#: /etc/rc.d/init.d/vsftpd:32
-msgid "Starting $prog for $site: "
-msgstr "جاري تشغيل $prog للموقع $site: "
-
-#: /etc/rc.d/rc.sysinit:489
-msgid "Enabling local filesystem quotas: "
-msgstr "جاري تمكين الحصص النّسبيّة لنظام الملفّات المحلّي: "
-
-#: /etc/rc.d/init.d/dund:60 /etc/rc.d/init.d/hidd:60 /etc/rc.d/init.d/pand:63
-msgid "Usage: $0 {start|stop|restart|reload|condrestart}"
-msgstr "الاستعمال: $0 {start|stop|restart|reload|condrestart}"
-
-#: /etc/rc.d/init.d/functions:310 /etc/rc.d/init.d/kudzu:58
-msgid "${base} is stopped"
-msgstr "${base} مُتوقّف"
-
-#: /etc/sysconfig/network-scripts/ifup-aliases:110
-#: /etc/sysconfig/network-scripts/network-functions:40
-msgid "Missing config file $PARENTCONFIG."
-msgstr "ملفّ الإعداد $PARENTCONFIG مفقود"
-
-#: /etc/rc.d/init.d/rpcidmapd:38
-msgid "Starting RPC idmapd: "
-msgstr "جاري تشغيل RPCidmapd: "
-
-#: /etc/rc.d/init.d/sshd:79 /etc/rc.d/init.d/sshd:82
-msgid "DSA key generation"
-msgstr "توليد مفتاح DSA"
-
-#: /etc/rc.d/init.d/ypserv:44
-msgid "Stopping YP server services: "
-msgstr "جاري إيقاف خدمات خادم YP: "
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1189
-msgid "Unsupported selection '$selection' specified (arg 2)"
-msgstr "الخيار '$selection' المُحدّد غير مدعوم (المُعطى الثّاني)"
-
-#: /etc/rc.d/init.d/halt:216
-msgid "On the next boot fsck will be skipped."
-msgstr "عند الإقلاع التّالي سوف يُتخطّى تشغيل fsck."
-
-#: /etc/sysconfig/network-scripts/ifup-eth:210
-msgid "Failed to bring up ${DEVICE}."
-msgstr "فشل تشغيل الجهاز ${DEVICE}."
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:662
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:716
-msgid "Parameter '$modequiet' for 'quiet' mode is not valid (arg 2)"
-msgstr "المُعطى '$modequiet' لوضع 'quiet' ليس صالحاً (المُعطى الثّاني)"
-
-#: /etc/rc.d/init.d/halt:69
-msgid "Saving mixer settings"
-msgstr "جاري حفظ إعدادات المازِج"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:452
-msgid "Tunnel device 'sit0' enabling didn't work"
-msgstr "لم ينجح تمكين جهاز النّفق 'sit0'"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:262
-msgid "Missing parameter 'forwarding control' (arg 1)"
-msgstr "المُعطى 'تحكّم التّمرير' مفقود (المُعطى الأوّل)"
-
-#: /etc/rc.d/init.d/bluetooth:34
-msgid "Starting Bluetooth services:"
-msgstr "جاري تشغيل خدمات Bluetooth: "
-
-#: /etc/rc.d/rc.sysinit:117
-msgid "\t\tPress 'I' to enter interactive startup."
-msgstr "\t\tاضغط 'I' كي تدخل بدء التّشغيل التّفاعليّ."
-
-#: /etc/rc.d/init.d/sshd:72
-msgid "Generating SSH2 DSA host key: "
-msgstr "جاري توليد مفتاح SSH2 DSA للمضيف: "
-
-#: /etc/sysconfig/network-scripts/ifup:87
-msgid "No 802.1Q VLAN support available in kernel for device ${DEVICE}"
-msgstr "لا يوجد دعم لشبكات 802.1Q VLAN في النّواة للجهاز ${DEVICE}"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1383
-msgid "Given IPv6 default device '$device' doesn't exist or isn't up"
-msgstr "جهاز IPv6 الافتراضي '$device' غير موجود أو لا يعمل"
-
-#: /etc/sysconfig/network-scripts/ifup-sl:32
-msgid "/usr/sbin/dip does not exist or is not executable"
-msgstr "/usr/sbin/dip غير موجود أو غير تنفيذي"
-
-#: /etc/rc.d/rc.sysinit:549
-msgid "Resetting hostname ${HOSTNAME}: "
-msgstr "إعادة اسم المضيف ${HOSTNAME} للأصل: "
-
-#: /etc/rc.d/init.d/netfs:113
-msgid "Unmounting SMB filesystems: "
-msgstr "جاري إزالة تجهيز أنظمة ملفّات SMB: "
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:613
-msgid "Missing parameter 'IPv6 address' (arg 2)"
-msgstr "المُدخل 'عنوان IPv6' مفقود (المُدخل الثّاني)"
-
-#: /etc/rc.d/init.d/halt:186
-msgid "Unmounting file systems: "
-msgstr "جاري إزالة تجهيز أنظمة الملفّات: "
-
-#: /etc/rc.d/init.d/functions:160
-msgid "Usage: killproc {program} [signal]"
-msgstr "الاستخدام: killproc {برنامج} [إشارة]"
-
-#: /etc/rc.d/rc.sysinit:308
-msgid "Setting hostname ${HOSTNAME}: "
-msgstr "جاري تحديد اسم المضيف ${HOSTNAME}: "
-
-#: /etc/rc.d/init.d/yppasswdd:40
-msgid "Starting YP passwd service: "
-msgstr "جاري تشغيل خدمة كلمة مرور YP: "
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:32
-msgid "ERROR: [ipv6_log] Missing 'message' (arg 1)"
-msgstr "خطأ: [ipv6_log] ينقصها 'message' (المُدخل الأوّل)"
-
-#: /etc/sysconfig/network-scripts/ifdown-aliases:7
-#: /etc/sysconfig/network-scripts/ifup-ipx:7
-msgid "usage: $0 <net-device>"
-msgstr "الاستعمال: $0 <جهاز الشبكة>"
-
-#: /etc/rc.d/init.d/xend:46
-msgid "Usage: $0 {start|stop|status|restart|reload|force-reload}"
-msgstr "الصيغة: $0 {start|stop|status|restart|reload|force-reload|condrestart}"
-
-#: /etc/rc.d/init.d/halt:75
-msgid "Saving random seed: "
-msgstr "جاري حفظ المَنشأ العشوائي: "
-
-#: /etc/rc.d/init.d/isdn:123 /etc/rc.d/init.d/isdn:126
-msgid "Loading ISDN modules"
-msgstr "جاري تحميل وحدات ISDN"
-
-#: /etc/rc.d/init.d/microcode_ctl:22
-msgid "$0: microcode device $DEVICE doesn't exist?"
-msgstr "$0: جهاز الميكروكود $DEVICE غير موجود؟"
-
-#: /etc/rc.d/init.d/privoxy:200
-msgid "Can't find $PRIVOXY_CONF, exit."
-msgstr "لم يمكن العثور $PRIVOXY_CONF، اخرج."
-
-#: /etc/sysconfig/network-scripts/ifup-ipv6:103
-#: /etc/sysconfig/network-scripts/ifup-ipv6:120
-msgid "Please restart network with '/sbin/service network restart'"
-msgstr "رجاء قم بإعادة تشغيل الشّبكة باستخدام '/sbin/service network restart'"
-
-#: /etc/rc.d/init.d/sendmail:76
-msgid "reloading $prog: "
-msgstr "تجري إعادة تحميل $prog: "
-
-#: /etc/rc.d/rc.sysinit:412
-msgid "*** when you leave the shell."
-msgstr "*** عندما تترك هذه الصَّدَفة."
-
-#: /etc/rc.d/init.d/sendmail:58
-msgid "Starting sm-client: "
-msgstr "جاري تشغيل sm-client: "
-
-#: /etc/rc.d/init.d/lisa:87
-msgid "Usage: $prog {start|stop|restart|status|condrestart}"
-msgstr "الاستعمال: $prog {start|stop|restart|status|condrestart}"
-
-#: /etc/rc.d/init.d/nifd:25
-msgid "Starting nifd... "
-msgstr "جاري تشغيل nifd... "
-
-#: /etc/rc.d/init.d/netfs:41
-msgid "Mounting CIFS filesystems: "
-msgstr "جاري تثبيت أنظمة ملفّات CIFS: "
-
-#: /etc/rc.d/init.d/arpwatch:66 /etc/rc.d/init.d/bluetooth:75
-#: /etc/rc.d/init.d/irqbalance:87 /etc/rc.d/init.d/nscd:109
-#: /etc/rc.d/init.d/portmap:91 /etc/rc.d/init.d/radiusd:76
-#: /etc/rc.d/init.d/radvd:74 /etc/rc.d/init.d/yppasswdd:79
-#: /etc/rc.d/init.d/ypserv:74 /etc/rc.d/init.d/ypxfrd:61
-msgid "Usage: $0 {start|stop|status|restart|reload|condrestart}"
-msgstr "الاستعمال: $0 {start|stop|status|restart|reload|condrestart}"
-
-#: /etc/rc.d/init.d/functions:259
-msgid "Usage: pidofproc {program}"
-msgstr "الاستعمال: pidofproc {program}"
-
-#: /etc/rc.d/init.d/rusersd:26
-msgid "Starting rusers services: "
-msgstr "جاري بدأ خدمات المستخدمين البعيدين (rusers): "
-
-#: /etc/rc.d/init.d/netfs:137
-msgid "Active NFS mountpoints: "
-msgstr "أماكن تجهيز NFS النّشطة: "
-
-#: /etc/rc.d/init.d/kudzu:55
-msgid "${base} has run"
-msgstr "${base} قد اشتغل"
-
-#: /etc/rc.d/init.d/nfs:70
-msgid "Starting NFS daemon: "
-msgstr "جاري بدأ عفريت NFS: "
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:873
-msgid "Given address '$addr' is not a global IPv4 one (arg 1)"
-msgstr "العنوان '$addr' المُدخل ليس عنوان IPv4 عامّ (المُعطى الأوّل)"
-
-#: /etc/rc.d/init.d/firstboot:54
-msgid "Running system reconfiguration tool"
-msgstr "جاري تشغيل أداة تهيئة النّظام"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1185
-msgid "Missing parameter 'selection' (arg 2)"
-msgstr "المُعطى 'الاختيار' مفقود (المُعطى الثّاني)"
-
-#: /etc/sysconfig/network-scripts/ifup-ipv6:212
-msgid ""
-"IPv6to4 configuration needs an IPv4 address on related interface or "
-"otherwise specified"
-msgstr ""
-"تحتاج تهيئة IPv6to4 إلى عنوان IPv4 على واجهة مُرتبطة أو أن تكون مُحدّدة إن لم "
-"يكن كذلك"
-
-#: /etc/rc.d/init.d/nfs:53
-msgid "Starting NFS services: "
-msgstr "جاري بدأ خدمات NFS: "
-
-#: /etc/rc.d/init.d/microcode_ctl:50
-#, fuzzy
-msgid "Applying Intel Microcode update: "
-msgstr "جاري تطبيق تحديث ميكروكود انتل IA32: "
-
-#: /etc/rc.d/init.d/haldaemon:27
-msgid "Starting HAL daemon: "
-msgstr "جاري بدأ خادم HAL: "
-
-#: /etc/rc.d/init.d/cups-config-daemon:25
-msgid "Starting cups-config-daemon: "
-msgstr "جاري تشغيل cups-config-daemon: "
-
-#: /etc/rc.d/init.d/functions:318
-msgid "OK"
-msgstr "موافق"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1082
-msgid "Tunnel device '$device' creation didn't work"
-msgstr "لم ينجح إنشاء جهاز النّفق '$device'"
-
-#: /etc/rc.d/init.d/rpcidmapd:63
-msgid "Shutting down RPC idmapd: "
-msgstr "جاري إيقاف RPC idmapd: "
-
-#: /etc/rc.d/init.d/halt:51 /etc/rc.d/init.d/killall:10
-msgid "Usage: $0 {start}"
-msgstr "الاستعمال: $0 {start}"
-
-#: /etc/rc.d/rc.sysinit:394 /etc/rc.d/rc.sysinit:419
-msgid "Unmounting file systems"
-msgstr "جاري إزالة تجهيز أنظمة الملفّات"
-
-#: /etc/rc.d/init.d/diskdump:137
-msgid "Starting diskdump: "
-msgstr "جاري تشغيل diskdump: "
-
-#: /etc/rc.d/init.d/pand:27
-msgid "Starting pand: "
-msgstr "جاري تشغيل pand: "
-
-#: /etc/rc.d/init.d/acpid:36
-msgid "Stopping acpi daemon: "
-msgstr "جاري إيقاف عفريت acpi: "
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:533
-msgid "Device '$device' doesn't exist"
-msgstr "الجهاز '$device' غير موجود"
-
-#: /etc/rc.d/init.d/smartd:57
-msgid "Reloading $prog daemon configuration: "
-msgstr "تجري إعادة تحميل إعداد العفريت $prog: "
-
-#: /etc/rc.d/init.d/postgresql:162
-msgid "See $SYSDOCDIR/postgresql-$PGVERSION/README.rpm-dist for more information."
-msgstr "لمزيد من المعلومات راجع $SYSDOCDIR/postgresql-$PGVERSION/README.rpm-dist."
-
-#: /etc/rc.d/rc.sysinit:279
-msgid "Setting clock $CLOCKDEF: `date`"
-msgstr "جاري إعداد ساعة $CLOCKDEF: `date`"
-
-#: /etc/rc.d/init.d/postfix:48
-#, fuzzy
-msgid "postalias $alias_database"
-msgstr "postalias $alias_database"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:413
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:514
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:577
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:608
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:791
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:906
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:968
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1002
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1044
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1122
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1180
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1233
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1272
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1406
-msgid "Missing parameter 'device' (arg 1)"
-msgstr "المُعطى 'جهاز' مفقود (المُعطى الأوّل)"
-
-#: /etc/rc.d/init.d/halt:140 /etc/rc.d/init.d/netfs:58
-msgid "Unmounting loopback filesystems: "
-msgstr "جاري إزالة تجهيز أنظمة الملفّات loopback: "
-
-#: /etc/rc.d/init.d/ip6tables:22
-msgid "/sbin/$IP6TABLES does not exist."
-msgstr "/sbin/$IP6TABLES غير موجود."
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1490
-msgid "Given pidfile '$pidfile' doesn't exist, cannot send trigger to radvd"
-msgstr "ملفّ رقم العمليّة المُعطى '$pidfile' غير موجود، لا يمكن إرسال مُطلِق إلى radvd"
-
-#: /etc/rc.d/init.d/halt:39
-msgid "Please stand by while rebooting the system..."
-msgstr "الرجاء الترقّب بينما تتمّ إعادة تشغيل النّظام..."
-
-#: /etc/rc.d/init.d/netfs:42
-msgid "Mounting NCP filesystems: "
-msgstr "جاري تجهيز أنظمة ملفّات NCP: "
-
-#: /etc/rc.d/init.d/netdump:264
-msgid "initializing netconsole"
-msgstr "جاري تمهيد netconsole"
-
-#: /etc/rc.d/init.d/functions:340
-msgid "PASSED"
-msgstr "نجح"
-
-#: /etc/rc.d/init.d/netdump:279
-msgid "disabling netconsole"
-msgstr "جاري تعطيل netconsole"
-
-#: /etc/rc.d/init.d/xfs:109
-msgid "Restarting $prog:"
-msgstr "جاري إعادة تشغيل $prog:"
-
-#: /etc/rc.d/init.d/sshd:34
-msgid "Generating SSH1 RSA host key: "
-msgstr "جاري توليد مفتاح SSH2 RSA للمضيف: "
-
-#: /etc/rc.d/init.d/iptables:195
-msgid "Unloading $IPTABLES modules: "
-msgstr "جاري إزالة تحميل وحدات $IPTABLES: "
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:684
-msgid "Missing prefix length for given address '$testipv6addr_valid'"
-msgstr "العنوان المُدخل '$testipv6addr_valid' ينقصه طول البادئة"
-
-#: /etc/rc.d/init.d/halt:124
-msgid "Turning off swap: "
-msgstr "جاري إيقاف الذّاكرة البديلة: "
-
-#: /etc/rc.d/init.d/privoxy:199
-msgid "Can't find $PRIVOXY_BIN, exit."
-msgstr "لم يُعثر على $PRIVOXY_BIN، اخرج."
-
-#: /etc/sysconfig/network-scripts/ifup-aliases:152
-msgid "error in $FILE: already seen ipaddr $IPADDR in $ipseen"
-msgstr "خطأ في $FILE: تمّت رؤية عنوان IP $IPADDR مسبقاً في $ipseen"
-
-#: /etc/rc.d/init.d/innd:52
-msgid "Stopping INNWatch service: "
-msgstr "جاري إيقاف خدمة INNWatch: "
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1516
-msgid "radvd not (properly) installed, triggering failed"
-msgstr "radvd غير مثبّت (بشكل ملائم)، فشل الإطلاق"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1277
-msgid "Missing parameter 'IPv6 MTU' (arg 2)"
-msgstr "المُعطى 'IPv6 MTU' مفقود (المُعطى الثّاني)"
-
-#: /etc/rc.d/init.d/xendomains:166
-msgid "Usage: $0 {start|stop|status}"
-msgstr "الصيغة: $0 {start|stop|status}"
-
-#: /etc/rc.d/init.d/ypserv:35
-msgid "Starting YP server services: "
-msgstr "جاري تشغيل خدمات خادم YP: "
-
-#: /etc/rc.d/init.d/kadmin:90
-msgid "Usage: $0 {start|stop|status|condrestart|reload|restart}"
-msgstr "الاستعمال: $0 {start|stop|status|condrestart|reload|restart}"
-
-#: /etc/rc.d/init.d/isicom:30
-msgid "Failed to load module: isicom"
-msgstr "فشل تحميل الوحدة: isicom"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1380
-msgid "Given IPv6 default device '$device' requires an explicit nexthop"
-msgstr "جهاز IPv6 المُدخل الافتراضي '$device' يتطلّب nexthop مُصرّح"
-
-#: /etc/rc.d/init.d/functions:443
-msgid "cC"
-msgstr "cCس"
-
-#: /etc/rc.d/init.d/nfslock:62
-msgid "Starting NFS statd: "
-msgstr "جاري تشغيل NFS statd: "
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:917
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:974
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1013
-msgid "Given device '$device' is not supported (arg 1)"
-msgstr "الجهاز المُدخل '$device' غير مدعوم (المُعطى الأوّل)"
-
-#: /etc/rc.d/init.d/functions:301
-msgid "${base} dead but pid file exists"
-msgstr "${base} مات ولكنّ ملفّ رقم العمليّة لازال موجوداً"
-
-#: /etc/rc.d/init.d/mysqld:140
-msgid "Usage: $0 {start|stop|status|condrestart|restart}"
-msgstr "الاستعمال: $0 {start|stop|status|condrestart|restart}"
-
-#: /etc/rc.d/init.d/postfix:53
-msgid "postfix start"
-msgstr "تشغيل postfix"
-
-#: /etc/rc.d/init.d/autofs:491
-msgid "Stopping $prog:"
-msgstr "جاري إيقاف $prog:"
-
-#: /etc/rc.d/rc.sysinit:207
-msgid " audio"
-msgstr "صوت"
-
-#: /etc/rc.d/init.d/cups:114
-msgid "Usage: $prog {start|stop|restart|condrestart|reload|status}"
-msgstr "الاستعمال: $prog {start|stop|restart|condrestart|reload|status}"
-
-#: /etc/rc.d/rc.sysinit:298
-msgid "Loading default keymap: "
-msgstr "جاري تحميل خريطة المفاتيح الافتراضيّة: "
-
-#: /etc/rc.d/init.d/gdm-early-login:22
-msgid "Starting display manager: "
-msgstr "جاري تشغيل مدير العرض:"
-
-#: /etc/rc.d/init.d/netfs:100
-msgid "Unmounting NFS filesystems (retry): "
-msgstr "جاري إزالة تجهيز أنظمة ملفّات NFS (إعادة المحاولة): "
-
-#: /etc/rc.d/init.d/nfs:141 /etc/rc.d/init.d/nfslock:112
-msgid "start"
-msgstr "تشغيل"
-
-#: /etc/rc.d/init.d/network:246 /etc/rc.d/init.d/network:256
-msgid "Shutting down interface $i: "
-msgstr "جاري إيقاف تشغيل الواجهة $i: "
-
-#: /etc/rc.d/rc.sysinit:214
-msgid " done"
-msgstr " تمّ."
-
-#: /etc/sysconfig/network-scripts/ifup:126
-msgid "WARNING: vconfig not able to disable REORDER_HDR on ${DEVICE}"
-msgstr "تحذير: vconfig غير قادر على تعطيل REORDER_HDR على ${DEVICE}"
-
-#: /etc/rc.d/rc.sysinit:200
-msgid " network"
-msgstr "شبكة"
-
-#: /etc/sysconfig/network-scripts/network-functions-ipv6:1340
-msgid ""
-"Given IPv6 default gateway '$address' is link-local, but no scope or gateway "
-"device is specified"
-msgstr ""
-"بوّابة IPv6 الافتراضيّة المُدخلة '$address' هي رابط محلّي، لكن لم يتمّ تحديد جهاز "
-"مجال أو بوّابة"
-
-#: /etc/rc.d/init.d/nfslock:84
-msgid "Stopping NFS statd: "
-msgstr "جاري إيقاف NFS statd: "
-
-#: /etc/sysconfig/network-scripts/ifup-ipv6:172
-msgid "Device 'tun6to4' (from '$DEVICE') is already up, shutdown first"
-msgstr "الجهاز 'tun6to4' (من '$DEVICE') يعمل مسبقاً، قُم بإيقاف تشغيله أوّلاً"
-
-#: /etc/rc.d/init.d/autofs:473 /etc/rc.d/init.d/autofs:526
-#: /etc/rc.d/init.d/autofs:527
-msgid "could not make temp file"
-msgstr "لم يمكن إنشاء الملفّ الاحتياطي"
-
-#: /etc/rc.d/init.d/iptables:27
-msgid "ipchains and $IPTABLES can not be used together."
-msgstr "لا يمكن استعمال ipchains و $IPTABLES مع بعض."
-
-#: /etc/rc.d/init.d/netplugd:41
-msgid "Shutting down network plug daemon: "
-msgstr "جاري إيقاف تشغيل عفريت قابس الشّبكة: "
-#: /etc/rc.d/init.d/sshd:41 /etc/rc.d/init.d/sshd:44
-msgid "RSA1 key generation"
-msgstr "توليد مفتاح RSA1"
<div class="codebox"><pre>
switch ($mode)
{
case 'mode1':
// I am doing something here
// no break here
case 'mode2':
// I am doing something completely different here
break;
default:
// Always assume that a case was not caught
break;
}</pre>
</div>
<h4>Class Members</h4>
<p>Use the explicit visibility qualifiers <code>public</code>, <code>private</code> and <code>protected</code> for all properties instead of <code>var</code>.
<p>Place the <code>static</code> qualifier before the visibility qualifiers.</p>
<p class="bad">//Wrong </p>
<div class="codebox"><pre>
var $x;
private static function f()</pre>
</div>
<p class="good">// Right </p>
<div class="codebox"><pre>
public $x;
static private function f()</pre>
</div>
<h4>Constants</h4>
<p>Prefer class constants over global constants created with <code>define()</code>.</p>
<a name="sql"></a><h3>2.iii. SQL/SQL Layout</h3>
<h4>Common SQL Guidelines: </h4>
<p>All SQL should be cross-DB compatible, if DB specific SQL is used alternatives must be provided which work on all supported DB's (MySQL3/4/5, MSSQL (7.0 and 2000), PostgreSQL (8.3+), SQLite, Oracle8, ODBC (generalised if possible)).</p>
<p>All SQL commands should utilise the DataBase Abstraction Layer (DBAL)</p>
<h4>SQL code layout:</h4>
<p>SQL Statements are often unreadable without some formatting, since they tend to be big at times. Though the formatting of sql statements adds a lot to the readability of code. SQL statements should be formatted in the following way, basically writing keywords: </p>
<div class="codebox"><pre>
$sql = 'SELECT *
<-one tab->FROM ' . SOME_TABLE . '
<-one tab->WHERE a = 1
<-two tabs->AND (b = 2
<-three tabs->OR b = 3)
<-one tab->ORDER BY b';</pre>
</div>
<p>Here the example with the tabs applied:</p>
<div class="codebox"><pre>
$sql = 'SELECT *
FROM ' . SOME_TABLE . '
WHERE a = 1
AND (b = 2
OR b = 3)
ORDER BY b';</pre>
</div>
<h4>SQL Quotes: </h4>
<p>Use double quotes where applicable. (The variables in these examples are typecasted to integers beforehand.) Examples: </p>
<p class="bad">// These are wrong.</p>
<div class="codebox"><pre>
"UPDATE " . SOME_TABLE . " SET something = something_else WHERE a = $b";
'UPDATE ' . SOME_TABLE . ' SET something = ' . $user_id . ' WHERE a = ' . $something;</pre>
</div>
<p class="good">// These are right. </p>
<div class="codebox"><pre>
'UPDATE ' . SOME_TABLE . " SET something = something_else WHERE a = $b";
'UPDATE ' . SOME_TABLE . " SET something = $user_id WHERE a = $something";</pre>
</div>
<p>In other words use single quotes where no variable substitution is required or where the variable involved shouldn't appear within double quotes. Otherwise use double quotes.</p>
<h4>Avoid DB specific SQL: </h4>
<p>The "not equals operator", as defined by the SQL:2003 standard, is "<>"</p>
<p class="bad">// This is wrong.</p>
<div class="codebox"><pre>
$sql = 'SELECT *
FROM ' . SOME_TABLE . '
WHERE a != 2';</pre>
</div>
<p class="good">// This is right. </p>
<div class="codebox"><pre>
$sql = 'SELECT *
FROM ' . SOME_TABLE . '
WHERE a <> 2';</pre>
</div>
<h4>Common DBAL methods: </h4>
<h4>sql_escape():</h4>
<p>Always use <code>$db->sql_escape()</code> if you need to check for a string within an SQL statement (even if you are sure the variable cannot contain single quotes - never trust your input), for example:</p>
<div class="codebox"><pre>
$sql = 'SELECT *
FROM ' . SOME_TABLE . "
WHERE username = '" . $db->sql_escape($username) . "'";</pre>
</div>
<h4>sql_query_limit():</h4>
<p>We do not add limit statements to the sql query, but instead use <code>$db->sql_query_limit()</code>. You basically pass the query, the total number of lines to retrieve and the offset.</p>
<p><strong>Note: </strong> Since Oracle handles limits differently and because of how we implemented this handling you need to take special care if you use <code>sql_query_limit</code> with an sql query retrieving data from more than one table.</p>
<p>Make sure when using something like "SELECT x.*, y.jars" that there is not a column named jars in x; make sure that there is no overlap between an implicit column and the explicit columns.</p>
<h4>sql_build_array():</h4>
<p>If you need to UPDATE or INSERT data, make use of the <code>$db->sql_build_array()</code> function. This function already escapes strings and checks other types, so there is no need to do this here. The data to be inserted should go into an array - <code>$sql_ary</code> - or directly within the statement if one or two variables needs to be inserted/updated. An example of an insert statement would be:</p>
<div class="codebox"><pre>
$sql_ary = array(
'somedata' => $my_string,
'otherdata' => $an_int,
'moredata' => $another_int,
);
$db->sql_query('INSERT INTO ' . SOME_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));</pre>
</div>
<p>To complete the example, this is how an update statement would look like:</p>
<div class="codebox"><pre>
$sql_ary = array(
'somedata' => $my_string,
'otherdata' => $an_int,
'moredata' => $another_int,
);
$sql = 'UPDATE ' . SOME_TABLE . '
SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
WHERE user_id = ' . (int) $user_id;
$db->sql_query($sql);</pre>
</div>
<p>The <code>$db->sql_build_array()</code> function supports the following modes: <code>INSERT</code> (example above), <code>INSERT_SELECT</code> (building query for <code>INSERT INTO table (...) SELECT value, column ...</code> statements), <code>UPDATE</code> (example above) and <code>SELECT</code> (for building WHERE statement [AND logic]).</p>
<h4>sql_multi_insert():</h4>
<p>If you want to insert multiple statements at once, please use the separate <code>sql_multi_insert()</code> method. An example:</p>
<div class="codebox"><pre>
$sql_ary = array();
$sql_ary[] = array(
'somedata' => $my_string_1,
'otherdata' => $an_int_1,
'moredata' => $another_int_1,
);
$sql_ary[] = array(
'somedata' => $my_string_2,
'otherdata' => $an_int_2,
'moredata' => $another_int_2,
);
$db->sql_multi_insert(SOME_TABLE, $sql_ary);</pre>
</div>
<h4>sql_in_set():</h4>
<p>The <code>$db->sql_in_set()</code> function should be used for building <code>IN ()</code> and <code>NOT IN ()</code> constructs. Since (specifically) MySQL tend to be faster if for one value to be compared the <code>=</code> and <code><></code> operator is used, we let the DBAL decide what to do. A typical example of doing a positive match against a number of values would be:</p>
<div class="codebox"><pre>
$sql = 'SELECT *
FROM ' . FORUMS_TABLE . '
WHERE ' . $db->sql_in_set('forum_id', $forum_ids);
$db->sql_query($sql);</pre>
</div>
<p>Based on the number of values in $forum_ids, the query can look differently.</p>
<p class="good">// SQL Statement if $forum_ids = array(1, 2, 3);</p>
<div class="codebox"><pre>
SELECT FROM phpbb_forums WHERE forum_id IN (1, 2, 3)</pre>
</div>
<p class="good">// SQL Statement if $forum_ids = array(1) or $forum_ids = 1</p>
<div class="codebox"><pre>
SELECT FROM phpbb_forums WHERE forum_id = 1</pre>
</div>
<p>Of course the same is possible for doing a negative match against a number of values:</p>
<div class="codebox"><pre>
$sql = 'SELECT *
FROM ' . FORUMS_TABLE . '
WHERE ' . $db->sql_in_set('forum_id', $forum_ids, <strong>true</strong>);
$db->sql_query($sql);</pre>
</div>
<p>Based on the number of values in $forum_ids, the query can look differently here too.</p>
<p class="good">// SQL Statement if $forum_ids = array(1, 2, 3);</p>
<div class="codebox"><pre>
SELECT FROM phpbb_forums WHERE forum_id <strong>NOT</strong> IN (1, 2, 3)</pre>
</div>
<p class="good">// SQL Statement if $forum_ids = array(1) or $forum_ids = 1</p>
<div class="codebox"><pre>
SELECT FROM phpbb_forums WHERE forum_id <strong><></strong> 1</pre>
</div>
<p>If the given array is empty, an error will be produced.</p>
<h4>sql_build_query():</h4>
<p>The <code>$db->sql_build_query()</code> function is responsible for building sql statements for SELECT and SELECT DISTINCT queries if you need to JOIN on more than one table or retrieve data from more than one table while doing a JOIN. This needs to be used to make sure the resulting statement is working on all supported db's. Instead of explaining every possible combination, I will give a short example:</p>
<div class="codebox"><pre>
$sql_array = array(
'SELECT' => 'f.*, ft.mark_time',
'FROM' => array(
FORUMS_WATCH_TABLE => 'fw',
FORUMS_TABLE => 'f',
),
'LEFT_JOIN' => array(
array(
'FROM' => array(FORUMS_TRACK_TABLE => 'ft'),
'ON' => 'ft.user_id = ' . $user->data['user_id'] . ' AND ft.forum_id = f.forum_id',
),
),
'WHERE' => 'fw.user_id = ' . $user->data['user_id'] . '
AND f.forum_id = fw.forum_id',
'ORDER_BY' => 'left_id',
);
$sql = $db->sql_build_query('SELECT', $sql_array);</pre>
</div>
<p>The possible first parameter for sql_build_query() is SELECT or SELECT_DISTINCT. As you can see, the logic is pretty self-explaining. For the LEFT_JOIN key, just add another array if you want to join on to tables for example. The added benefit of using this construct is that you are able to easily build the query statement based on conditions - for example the above LEFT_JOIN is only necessary if server side topic tracking is enabled; a slight adjustement would be:</p>
<div class="codebox"><pre>
$sql_array = array(
'SELECT' => 'f.*',
'FROM' => array(
FORUMS_WATCH_TABLE => 'fw',
FORUMS_TABLE => 'f',
),
'WHERE' => 'fw.user_id = ' . $user->data['user_id'] . '
AND f.forum_id = fw.forum_id',
'ORDER_BY' => 'left_id',
);
if ($config['load_db_lastread'])
{
$sql_array['LEFT_JOIN'] = array(
array(
'FROM' => array(FORUMS_TRACK_TABLE => 'ft'),
'ON' => 'ft.user_id = ' . $user->data['user_id'] . ' AND ft.forum_id = f.forum_id',
),
);
$sql_array['SELECT'] .= ', ft.mark_time ';
}
else
{
// Here we read the cookie data
}
$sql = $db->sql_build_query('SELECT', $sql_array);</pre>
</div>
<a name="optimizing"></a><h3>2.iv. Optimizations</h3>
<h4>Operations in loop definition: </h4>
<p>Always try to optimize your loops if operations are going on at the comparing part, since this part is executed every time the loop is parsed through. For assignments a descriptive name should be chosen. Example:</p>
<p class="bad">// On every iteration the count function is called</p>
<div class="codebox"><pre>
for ($i = 0; $i < count($post_data); $i++)
{
do_something();
}</pre>
</div>
<p class="good">// You are able to assign the (not changing) result within the loop itself</p>
<div class="codebox"><pre>
for ($i = 0, $size = count($post_data); $i < $size; $i++)
{
do_something();
}</pre>
</div>
<h4>Use of in_array(): </h4>
<p>Try to avoid using in_array() on huge arrays, and try to not place them into loops if the array to check consist of more than 20 entries. in_array() can be very time consuming and uses a lot of cpu processing time. For little checks it is not noticeable, but if checked against a huge array within a loop those checks alone can take several seconds. If you need this functionality, try using isset() on the arrays keys instead, actually shifting the values into keys and vice versa. A call to <code>isset($array[$var])</code> is a lot faster than <code>in_array($var, array_keys($array))</code> for example.</p>
<a name="general"></a><h3>2.v. General Guidelines</h3>
<h4>General things:</h4>
<p>Never trust user input (this also applies to server variables as well as cookies).</p>
<p>Try to sanitize values returned from a function.</p>
<p>Try to sanitize given function variables within your function.</p>
<p>The auth class should be used for all authorisation checking.</p>
<p>No attempt should be made to remove any copyright information (either contained within the source or displayed interactively when the source is run/compiled), neither should the copyright information be altered in any way (it may be added to).</p>
<h4>Variables: </h4>
<p>Make use of the <code>\phpbb\request\request</code> class for everything.</p>
<p>The $request->variable() method determines the type to set from the second parameter (which determines the default value too). If you need to get a scalar variable type, you need to tell this the variable() method explicitly. Examples:</p>
<p class="bad">// Old method, do not use it</p>
<div class="codebox"><pre>
$start = (isset($HTTP_GET_VARS['start'])) ? intval($HTTP_GET_VARS['start']) : intval($HTTP_POST_VARS['start']);
$submit = (isset($HTTP_POST_VARS['submit'])) ? true : false;</pre>
</div>
<p class="good">// Use request var and define a default variable (use the correct type)</p>
<div class="codebox"><pre>
$start = $request->variable('start', 0);
$submit = $request->is_set_post('submit');</pre>
</div>
<p class="bad">// $start is an int, the following use of $request->variable() therefore is not allowed</p>
<div class="codebox"><pre>
$start = $request->variable('start', '0');</pre>
</div>
<p class="good">// Getting an array, keys are integers, value defaults to 0</p>
<div class="codebox"><pre>
$mark_array = $request->variable('mark', array(0));</pre>
</div>
<p class="good">// Getting an array, keys are strings, value defaults to 0</p>
<div class="codebox"><pre>
$action_ary = $request->variable('action', array('' => 0));</pre>
</div>
<h4>Login checks/redirection: </h4>
<p>To show a forum login box use <code>login_forum_box($forum_data)</code>, else use the <code>login_box()</code> function.</p>
<p><code>$forum_data</code> should contain at least the <code>forum_id</code> and <code>forum_password</code> fields. If the field <code>forum_name</code> is available, then it is displayed on the forum login page.</p>
<p>The <code>login_box()</code> function can have a redirect as the first parameter. As a thumb of rule, specify an empty string if you want to redirect to the users current location, else do not add the <code>$SID</code> to the redirect string (for example within the ucp/login we redirect to the board index because else the user would be redirected to the login screen).</p>
<h4>Sensitive Operations: </h4>
<p>For sensitive operations always let the user confirm the action. For the confirmation screens, make use of the <code>confirm_box()</code> function.</p>
<h4>Altering Operations: </h4>
<p>For operations altering the state of the database, for instance posting, always verify the form token, unless you are already using <code>confirm_box()</code>. To do so, make use of the <code>add_form_key()</code> and <code>check_form_key()</code> functions. </p>
<div class="codebox"><pre>
add_form_key('my_form');
if ($submit)
{
if (!check_form_key('my_form'))
{
trigger_error('FORM_INVALID');
}
}</pre>
</div>
<p>The string passed to <code>add_form_key()</code> needs to match the string passed to <code>check_form_key()</code>. Another requirement for this to work correctly is that all forms include the <code>{S_FORM_TOKEN}</code> template variable.</p>
<h4>Sessions: </h4>
<p>Sessions should be initiated on each page, as near the top as possible using the following code:</p>
<div class="codebox"><pre>
$user->session_begin();
$auth->acl($user->data);
$user->setup();</pre>
</div>
<p>The <code>$user->setup()</code> call can be used to pass on additional language definition and a custom style (used in viewforum).</p>
<h4>Errors and messages: </h4>
<p>All messages/errors should be outputted by calling <code>trigger_error()</code> using the appropriate message type and language string. Example:</p>
<div class="codebox"><pre>
trigger_error('NO_FORUM');</pre>
</div>
<div class="codebox"><pre>
trigger_error($user->lang['NO_FORUM']);</pre>
</div>
<div class="codebox"><pre>
trigger_error('NO_MODE', E_USER_ERROR);</pre>
</div>
<h4>Url formatting</h4>
<p>All urls pointing to internal files need to be prepended by the <code>$phpbb_root_path</code> variable. Within the administration control panel all urls pointing to internal files need to be prepended by the <code>$phpbb_admin_path</code> variable. This makes sure the path is always correct and users being able to just rename the admin folder and the acp still working as intended (though some links will fail and the code need to be slightly adjusted).</p>
<p>The <code>append_sid()</code> function from 2.0.x is available too, though it does not handle url alterations automatically. Please have a look at the code documentation if you want to get more details on how to use append_sid(). A sample call to append_sid() can look like this:</p>
<div class="codebox"><pre>
append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&amp;g=' . $row['group_id'])</pre>
</div>
<h4>General function usage: </h4>
<p>Some of these functions are only chosen over others because of personal preference and have no benefit other than maintaining consistency throughout the code.</p>
<ul>
<li>
<p>Use <code>strpos</code> instead of <code>strstr</code></p>
</li>
<li>
<p>Use <code>else if</code> instead of <code>elseif</code></p>
</li>
<li>
<p>Use <code>false</code> (lowercase) instead of <code>FALSE</code></p>
</li>
<li>
<p>Use <code>true</code> (lowercase) instead of <code>TRUE</code></p>
</li>
</ul>
<h4>Exiting</h4>
<p>Your page should either call <code>page_footer()</code> in the end to trigger output through the template engine and terminate the script, or alternatively at least call the <code>exit_handler()</code>. That call is necessary because it provides a method for external applications embedding phpBB to be called at the end of the script.</p>
<a name="phprestrictions"></a><h3>2.vi. Restrictions on the Use of PHP</h3>
<h4>Dynamic code execution:</h4>
<p>Never execute dynamic PHP code (generated or in a constant string) using any of the following PHP functions:</p>
<ul>
<li><strong>eval</strong></li>
<li><strong>create_function</strong></li>
<li><strong>preg_replace</strong> with the <strong>e</strong> modifier in the pattern</li>
</ul>
<p>If absolutely necessary a file should be created, and a mechanism for creating this file prior to running phpBB should be provided as a setup process.</p>
<p>The <strong>e</strong> modifier in <strong>preg_replace</strong> can be replaced by <strong>preg_replace_callback</strong> and objects to encapsulate state that is needed in the callback code.</p>
<h4>Other functions, operators, statements and keywords:</h4>
<p>The following PHP statements should also not be used in phpBB:</p>
<ul>
<li><strong>goto</strong></li>
</ul>
</div>
<div class="back2top"><a href="#wrap" class="top">Back to Top</a></div>
</div>
</div>
<hr />
<a name="styling"></a><h2>3. Styling</h2>
<div class="paragraph">
<div class="inner">
<div class="content">
<a name="cfgfiles"></a><h3>3.i. Style Config Files</h3>
<p>Style cfg files are simple name-value lists with the information necessary for installing a style. The important part of the style configuration file is assigning an unique name.</p>
<div class="codebox"><pre>
# General Information about this style
name = prosilver_duplicate
copyright = © phpBB Limited, 2007
style_version = 3.2.0
phpbb_version = 3.2.0
# Defining a different template bitfield
# template_bitfield = lNg=
# Parent style
# Set value to empty or to this style's name if this style does not have a parent style
parent = prosilver</pre>
</div>
<a name="genstyling"></a><h3>3.2. General Styling Rules</h3>
<p>Templates should be produced in a consistent manner. Where appropriate they should be based off an existing copy, e.g. index, viewforum or viewtopic (the combination of which implement a range of conditional and variable forms). Please also note that the indentation and coding guidelines also apply to templates where possible.</p>
<p>The outer table class <code>forumline</code> has gone and is replaced with <code>tablebg</code>.</p>
<p>When writing <code><table></code> the order <code><table class="" cellspacing="" cellpadding="" border="" align=""></code> creates consistency and allows everyone to easily see which table produces which "look". The same applies to most other tags for which additional parameters can be set, consistency is the major aim here.</p>
<p>Each block level element should be indented by one tab, same for tabular elements, e.g. <code><tr></code> <code><td></code> etc., whereby the intendiation of <code><table></code> and the following/ending <code><tr></code> should be on the same line. This applies not to div elements of course.</p>
<p>Don't use <code><span></code> more than is essential ... the CSS is such that text sizes are dependent on the parent class. So writing <code><span class="gensmall"><span class="gensmall">TEST</span></span></code> will result in very very small text. Similarly don't use span at all if another element can contain the class definition, e.g.</p>
<div class="codebox"><pre>
<td><span class="gensmall">TEST</span></td>
</pre></div>
<p>can just as well become:</p>
<div class="codebox"><pre>
<td class="gensmall">TEST</td>
</pre></div>
<p>Try to match text class types with existing useage, e.g. don't use the nav class where viewtopic uses gensmall for example.</p>
<p>Row colours/classes are now defined by the template, use an <code>IF S_ROW_COUNT</code> switch, see viewtopic or viewforum for an example.</p>
<p>Remember block level ordering is important.</p>
<p>Use a standard cellpadding of 2 and cellspacing of 0 on outer tables. Inner tables can vary from 0 to 3 or even 4 depending on the need.</p>
<p><strong>Use div container/css for styling and table for data representation.</strong></p>
<p>The separate catXXXX and thXXX classes are gone. When defining a header cell just use <code><th></code> rather than <code><th class="thHead"></code> etc. Similarly for cat, don't use <code><td class="catLeft"></code> use <code><td class="cat"></code> etc.</p>
<p>Try to retain consistency of basic layout and class useage, i.e. _EXPLAIN text should generally be placed below the title it explains, e.g. <code>{L_POST_USERNAME}<br /><span class="gensmall">{L_POST_USERNAME_EXPLAIN}</span></code> is the typical way of handling this ... there may be exceptions and this isn't a hard and fast rule.</p>
<p>Try to keep template conditional and other statements tabbed in line with the block to which they refer.</p>
<p class="good">this is correct</p>
<div class="codebox"><pre>
<span class="comment"><!-- BEGIN test --></span>
<tr>
<td>{test.TEXT}</td>
</tr>
<span class="comment"><!-- END test --></span>
</pre></div>
<p class="good">this is also correct:</p>
<div class="codebox"><pre>
<span class="comment"><!-- BEGIN test --></span>
<tr>
<td>{test.TEXT}</td>
</tr>
<span class="comment"><!-- END test --></span>
</pre></div>
<p>it gives immediate feedback on exactly what is looping - decide which way to use based on the readability.</p>
</div>
<div class="back2top"><a href="#wrap" class="top">Back to Top</a></div>
</div>
</div>
<hr />
<a name="templating"></a><h2>4. Templating</h2>
<div class="paragraph">
<div class="inner">
<div class="content">
<a name="templates"></a><h3>4.i. General Templating</h3>
<h4>File naming</h4>
<p>Firstly templates now take the suffix ".html" rather than ".tpl". This was done simply to make the lives of some people easier wrt syntax highlighting, etc.</p>
<h4>Variables</h4>
<p>All template variables should be named appropriately (using underscores for spaces), language entries should be prefixed with L_, system data with S_, urls with U_, javascript urls with UA_, language to be put in javascript statements with LA_, all other variables should be presented 'as is'.</p>
<p>L_* template variables are automatically mapped to the corresponding language entry if the code does not set (and therefore overwrite) this variable specifically and if the language entry exists. For example <code>{L_USERNAME}</code> maps to <code>$user->lang['USERNAME']</code>. The LA_* template variables are handled within the same way, but properly escaped so they can be put in javascript code. This should reduce the need to assign loads of new language variables in MODifications.
</p>
<h4>Blocks/Loops</h4>
<p>The basic block level loop remains and takes the form:</p>
<div class="codebox"><pre>
<span class="comment"><!-- BEGIN loopname --></span>
markup, {loopname.X_YYYYY}, etc.
<span class="comment"><!-- END loopname --></span>
</pre></div>
<p>A bit later loops will be explained further. To not irritate you we will explain conditionals as well as other statements first.</p>
<h4>Including files</h4>
<p>Something that existed in 2.0.x which no longer exists in 3.x is the ability to assign a template to a variable. This was used (for example) to output the jumpbox. Instead (perhaps better, perhaps not but certainly more flexible) we now have INCLUDE. This takes the simple form:</p>
<div class="codebox"><pre>
<span class="comment"><!-- INCLUDE filename --></span>
</pre></div>
<p>You will note in the 3.x templates the major sources start with <code><!-- INCLUDE overall_header.html --></code> or <code><!-- INCLUDE simple_header.html --></code>, etc. In 2.0.x control of "which" header to use was defined entirely within the code. In 3.x the template designer can output what they like. Note that you can introduce new templates (i.e. other than those in the default set) using this system and include them as you wish ... perhaps useful for a common "menu" bar or some such. No need to modify loads of files as with 2.0.x.</p>
<p>Added in <strong>3.0.6</strong> is the ability to include a file using a template variable to specify the file, this functionality only works for root variables (i.e. not block variables).</p>
<div class="codebox"><pre>
<span class="comment"><!-- INCLUDE {FILE_VAR} --></span>
</pre></div>
<p>Template defined variables can also be utilised.</p>
<div class="codebox"><pre>
<span class="comment"><!-- DEFINE $SOME_VAR = 'my_file.html' --></span>
<span class="comment"><!-- INCLUDE {$SOME_VAR} --></span>
</pre></div>
<h4>PHP</h4>
<p>A contentious decision has seen the ability to include PHP within the template introduced. This is achieved by enclosing the PHP within relevant tags:</p>
<div class="codebox"><pre>
<span class="comment"><!-- PHP --></span>
echo "hello!";
<span class="comment"><!-- ENDPHP --></span>
</pre></div>
<p>You may also include PHP from an external file using:</p>
<div class="codebox"><pre>
<span class="comment"><!-- INCLUDEPHP somefile.php --></span>
</pre></div>
<p>it will be included and executed inline.<br /><br />A note, it is very much encouraged that template designers do not include PHP. The ability to include raw PHP was introduced primarily to allow end users to include banner code, etc. without modifying multiple files (as with 2.0.x). It was not intended for general use ... hence <!-- w --><a href="https://www.phpbb.com">www.phpbb.com</a><!-- w --> will <strong>not</strong> make available template sets which include PHP. And by default templates will have PHP disabled (the admin will need to specifically activate PHP for a template).</p>
<h4>Conditionals/Control structures</h4>
<p>The most significant addition to 3.x are conditions or control structures, "if something then do this else do that". The system deployed is very similar to Smarty. This may confuse some people at first but it offers great potential and great flexibility with a little imagination. In their most simple form these constructs take the form:</p>
<div class="codebox"><pre>
<span class="comment"><!-- IF expr --></span>
markup
<span class="comment"><!-- ENDIF --></span>
</pre></div>
<p>expr can take many forms, for example:</p>
<div class="codebox"><pre>
<span class="comment"><!-- IF loop.S_ROW_COUNT is even --></span>
markup
<span class="comment"><!-- ENDIF --></span>
</pre></div>
<p>This will output the markup if the S_ROW_COUNT variable in the current iteration of loop is an even value (i.e. the expr is TRUE). You can use various comparison methods (standard as well as equivalent textual versions noted in square brackets) including (<code>not, or, and, eq, neq, is</code> should be used if possible for better readability):</p>
<div class="codebox"><pre>
== [eq]
!= [neq, ne]
<> (same as !=)
!== (not equivalent in value and type)
=== (equivalent in value and type)
> [gt]
< [lt]
>= [gte]
<= [lte]
&& [and]
|| [or]
% [mod]
! [not]
+
-
*
/
,
<< (bitwise shift left)
>> (bitwise shift right)
| (bitwise or)
^ (bitwise xor)
& (bitwise and)
~ (bitwise not)
is (can be used to join comparison operations)
</pre></div>
<p>Basic parenthesis can also be used to enforce good old BODMAS rules. Additionally some basic comparison types are defined:</p>
<div class="codebox"><pre>
even
odd
div
</pre></div>
<p>Beyond the simple use of IF you can also do a sequence of comparisons using the following:</p>
<div class="codebox"><pre>
<span class="comment"><!-- IF expr1 --></span>
markup
<span class="comment"><!-- ELSEIF expr2 --></span>
markup
.
.
.
<span class="comment"><!-- ELSEIF exprN --></span>
markup
<span class="comment"><!-- ELSE --></span>
markup
<span class="comment"><!-- ENDIF --></span>
</pre></div>
<p>Each statement will be tested in turn and the relevant output generated when a match (if a match) is found. It is not necessary to always use ELSEIF, ELSE can be used alone to match "everything else".<br /><br />So what can you do with all this? Well take for example the colouration of rows in viewforum. In 2.0.x row colours were predefined within the source as either row color1, row color2 or row class1, row class2. In 3.x this is moved to the template, it may look a little daunting at first but remember control flows from top to bottom and it's not too difficult:</p>
<div class="codebox"><pre>
<table>
<span class="comment"><!-- IF loop.S_ROW_COUNT is even --></span>
<tr class="row1">
<span class="comment"><!-- ELSE --></span>
<tr class="row2">
<span class="comment"><!-- ENDIF --></span>
<td>HELLO!</td>
</tr>
</table>
</pre></div>
<p>This will cause the row cell to be output using class row1 when the row count is even, and class row2 otherwise. The S_ROW_COUNT parameter gets assigned to loops by default. Another example would be the following: </p>
<div class="codebox"><pre>
<table>
<span class="comment"><!-- IF loop.S_ROW_COUNT > 10 --></span>
<tr bgcolor="#FF0000">
<span class="comment"><!-- ELSEIF loop.S_ROW_COUNT > 5 --></span>
<tr bgcolor="#00FF00">
<span class="comment"><!-- ELSEIF loop.S_ROW_COUNT > 2 --></span>
<tr bgcolor="#0000FF">
<span class="comment"><!-- ELSE --></span>
<tr bgcolor="#FF00FF">
<span class="comment"><!-- ENDIF --></span>
<td>hello!</td>
</tr>
</table>
</pre></div>
<p>This will output the row cell in purple for the first two rows, blue for rows 2 to 5, green for rows 5 to 10 and red for remainder. So, you could produce a "nice" gradient effect, for example.<br /><br />What else can you do? Well, you could use IF to do common checks on for example the login state of a user:</p>
<div class="codebox"><pre>
<span class="comment"><!-- IF S_USER_LOGGED_IN --></span>
markup
<span class="comment"><!-- ENDIF --></span>
</pre></div>
<p>This replaces the existing (fudged) method in 2.0.x using a zero length array and BEGIN/END.</p>
<h4>Extended syntax for Blocks/Loops</h4>
<p>Back to our loops - they had been extended with the following additions. Firstly you can set the start and end points of the loop. For example:</p>
<div class="codebox"><pre>
<span class="comment"><!-- BEGIN loopname(2) --></span>
markup
<span class="comment"><!-- END loopname --></span>
</pre></div>
<p>Will start the loop on the third entry (note that indexes start at zero). Extensions of this are:
<br /><br />
<code>loopname(2)</code>: Will start the loop on the 3rd entry<br />
<code>loopname(-2)</code>: Will start the loop two entries from the end<br />
<code>loopname(3,4)</code>: Will start the loop on the fourth entry and end it on the fifth<br />
<code>loopname(3,-4)</code>: Will start the loop on the fourth entry and end it four from last<br />
</p>
<p>A further extension to begin is BEGINELSE:</p>
<div class="codebox"><pre>
<span class="comment"><!-- BEGIN loop --></span>
markup
<span class="comment"><!-- BEGINELSE --></span>
markup
<span class="comment"><!-- END loop --></span>
</pre></div>
<p>This will cause the markup between <code>BEGINELSE</code> and <code>END</code> to be output if the loop contains no values. This is useful for forums with no topics (for example) ... in some ways it replaces "bits of" the existing "switch_" type control (the rest being replaced by conditionals).</p>
<p>Another way of checking if a loop contains values is by prefixing the loops name with a dot:</p>
<div class="codebox"><pre>
<span class="comment"><!-- IF .loop --></span>
<span class="comment"><!-- BEGIN loop --></span>
markup
<span class="comment"><!-- END loop --></span>
<span class="comment"><!-- ELSE --></span>
markup
<span class="comment"><!-- ENDIF --></span>
</pre></div>
<p>You are even able to check the number of items within a loop by comparing it with values within the IF condition:</p>
<div class="codebox"><pre>
<span class="comment"><!-- IF .loop > 2 --></span>
<span class="comment"><!-- BEGIN loop --></span>
markup
<span class="comment"><!-- END loop --></span>
<span class="comment"><!-- ELSE --></span>
markup
<span class="comment"><!-- ENDIF --></span>
</pre></div>
<p>Nesting loops cause the conditionals needing prefixed with all loops from the outer one to the inner most. An illustration of this:</p>
<div class="codebox"><pre>
<span class="comment"><!-- BEGIN firstloop --></span>
{firstloop.MY_VARIABLE_FROM_FIRSTLOOP}
<span class="comment"><!-- BEGIN secondloop --></span>
{firstloop.secondloop.MY_VARIABLE_FROM_SECONDLOOP}
<span class="comment"><!-- END secondloop --></span>
<span class="comment"><!-- END firstloop --></span>
</pre></div>
<p>Sometimes it is necessary to break out of nested loops to be able to call another loop within the current iteration. This sounds a little bit confusing and it is not used very often. The following (rather complex) example shows this quite good - it also shows how you test for the first and last row in a loop (i will explain the example in detail further down):</p>
<div class="codebox"><pre>
<span class="comment"><!-- BEGIN l_block1 --></span>
<span class="comment"><!-- IF l_block1.S_SELECTED --></span>
<strong>{l_block1.L_TITLE}</strong>
<span class="comment"><!-- IF S_PRIVMSGS --></span>
<span class="comment"><!-- the ! at the beginning of the loop name forces the loop to be not a nested one of l_block1 --></span>
<span class="comment"><!-- BEGIN !folder --></span>
<span class="comment"><!-- IF folder.S_FIRST_ROW --></span>
<ul class="nav">
<span class="comment"><!-- ENDIF --></span>
<li><a href="{folder.U_FOLDER}">{folder.FOLDER_NAME}</a></li>
<span class="comment"><!-- IF folder.S_LAST_ROW --></span>
</ul>
<span class="comment"><!-- ENDIF --></span>
<span class="comment"><!-- END !folder --></span>
<span class="comment"><!-- ENDIF --></span>
<ul class="nav">
<span class="comment"><!-- BEGIN l_block2 --></span>
<li>
<span class="comment"><!-- IF l_block1.l_block2.S_SELECTED --></span>
<strong>{l_block1.l_block2.L_TITLE}</strong>
<span class="comment"><!-- ELSE --></span>
<a href="{l_block1.l_block2.U_TITLE}">{l_block1.l_block2.L_TITLE}</a>
<span class="comment"><!-- ENDIF --></span>
</li>
<span class="comment"><!-- END l_block2 --></span>
</ul>
<span class="comment"><!-- ELSE --></span>
<a class="nav" href="{l_block1.U_TITLE}">{l_block1.L_TITLE}</a>
<span class="comment"><!-- ENDIF --></span>
<span class="comment"><!-- END l_block1 --></span>
</pre></div>
<p>Let us first concentrate on this part of the example:</p>
<div class="codebox"><pre>
<span class="comment"><!-- BEGIN l_block1 --></span>
<span class="comment"><!-- IF l_block1.S_SELECTED --></span>
markup
<span class="comment"><!-- ELSE --></span>
<a class="nav" href="{l_block1.U_TITLE}">{l_block1.L_TITLE}</a>
<span class="comment"><!-- ENDIF --></span>
<span class="comment"><!-- END l_block1 --></span>
</pre></div>
<p>Here we open the loop l_block1 and do some things if the value S_SELECTED within the current loop iteration is true, else we write the blocks link and title. Here, you see <code>{l_block1.L_TITLE}</code> referenced - you remember that L_* variables get automatically assigned the corresponding language entry? This is true, but not within loops. The L_TITLE variable within the loop l_block1 is assigned within the code itself.</p>
<p>Let's have a closer look at the markup:</p>
<div class="codebox"><pre>
<span class="comment"><!-- BEGIN l_block1 --></span>
.
.
<span class="comment"><!-- IF S_PRIVMSGS --></span>
<span class="comment"><!-- BEGIN !folder --></span>
<span class="comment"><!-- IF folder.S_FIRST_ROW --></span>
<ul class="nav">
<span class="comment"><!-- ENDIF --></span>
<li><a href="{folder.U_FOLDER}">{folder.FOLDER_NAME}</a></li>
<span class="comment"><!-- IF folder.S_LAST_ROW --></span>
</ul>
<span class="comment"><!-- ENDIF --></span>
<span class="comment"><!-- END !folder --></span>
<span class="comment"><!-- ENDIF --></span>
.
.
<span class="comment"><!-- END l_block1 --></span>
</pre></div>
<p>The <code><!-- IF S_PRIVMSGS --></code> statement clearly checks a global variable and not one within the loop, since the loop is not given here. So, if S_PRIVMSGS is true we execute the shown markup. Now, you see the <code><!-- BEGIN !folder --></code> statement. The exclamation mark is responsible for instructing the template engine to iterate through the main loop folder. So, we are now within the loop folder - with <code><!-- BEGIN folder --></code> we would have been within the loop <code>l_block1.folder</code> automatically as is the case with l_block2:</p>
<div class="codebox"><pre>
<span class="comment"><!-- BEGIN l_block1 --></span>
.
.
<ul class="nav">
<span class="comment"><!-- BEGIN l_block2 --></span>
<li>
<span class="comment"><!-- IF l_block1.l_block2.S_SELECTED --></span>
<strong>{l_block1.l_block2.L_TITLE}</strong>
<span class="comment"><!-- ELSE --></span>
<a href="{l_block1.l_block2.U_TITLE}">{l_block1.l_block2.L_TITLE}</a>
<span class="comment"><!-- ENDIF --></span>
</li>
<span class="comment"><!-- END l_block2 --></span>
</ul>
.
.
<span class="comment"><!-- END l_block1 --></span>
</pre></div>
<p>You see the difference? The loop l_block2 is a member of the loop l_block1 but the loop folder is a main loop.</p>
<p>Now back to our folder loop:</p>
<div class="codebox"><pre>
<span class="comment"><!-- IF folder.S_FIRST_ROW --></span>
<ul class="nav">
<span class="comment"><!-- ENDIF --></span>
<li><a href="{folder.U_FOLDER}">{folder.FOLDER_NAME}</a></li>
<span class="comment"><!-- IF folder.S_LAST_ROW --></span>
</ul>
<span class="comment"><!-- ENDIF --></span>
</pre></div>
<p>You may have wondered what the comparison to S_FIRST_ROW and S_LAST_ROW is about. If you haven't guessed already - it is checking for the first iteration of the loop with <code>S_FIRST_ROW</code> and the last iteration with <code>S_LAST_ROW</code>. This can come in handy quite often if you want to open or close design elements, like the above list. Let us imagine a folder loop build with three iterations, it would go this way:</p>
<div class="codebox"><pre>
<ul class="nav"> <span class="comment"><!-- written on first iteration --></span>
<li>first element</li> <span class="comment"><!-- written on first iteration --></span>
<li>second element</li> <span class="comment"><!-- written on second iteration --></span>
<li>third element</li> <span class="comment"><!-- written on third iteration --></span>
</ul> <span class="comment"><!-- written on third iteration --></span>
</pre></div>
<p>As you can see, all three elements are written down as well as the markup for the first iteration and the last one. Sometimes you want to omit writing the general markup - for example:</p>
<div class="codebox"><pre>
<span class="comment"><!-- IF folder.S_FIRST_ROW --></span>
<ul class="nav">
<span class="comment"><!-- ELSEIF folder.S_LAST_ROW --></span>
</ul>
<span class="comment"><!-- ELSE --></span>
<li><a href="{folder.U_FOLDER}">{folder.FOLDER_NAME}</a></li>
<span class="comment"><!-- ENDIF --></span>
</pre></div>
<p>would result in the following markup:</p>
<div class="codebox"><pre>
<ul class="nav"> <span class="comment"><!-- written on first iteration --></span>
<li>second element</li> <span class="comment"><!-- written on second iteration --></span>
</ul> <span class="comment"><!-- written on third iteration --></span>
</pre></div>
<p>Just always remember that processing is taking place from top to bottom.</p>
<h4>Forms</h4>
<p>If a form is used for a non-trivial operation (i.e. more than a jumpbox), then it should include the <code>{S_FORM_TOKEN}</code> template variable.</p>
<div class="codebox"><pre>
<form method="post" id="mcp" action="{U_POST_ACTION}">
<fieldset class="submit-buttons">
<input type="reset" value="{L_RESET}" name="reset" class="button2" />
<input type="submit" name="action[add_warning]" value="{L_SUBMIT}" class="button1" />
{S_FORM_TOKEN}
</fieldset>
</form>
</pre></div><br />
<a name="stylestree"></a><h3>4.ii. Styles Tree</h3>
<p>When basing a new style on an existing one, it is not necessary to provide all the template files. By declaring the base style name in the <strong>parent</strong> field in the style configuration file, the style can be set to reuse template files from the parent style.</p>
<p>The effect of doing so is that the template engine will use the template files in the new style where they exist, but fall back to files in the parent style otherwise.</p>
<p>We strongly encourage the use of parent styles for styles based on the bundled styles, as it will ease the update procedure.</p>
<div class="codebox"><pre>
# General Information about this style
name = Custom Style
copyright = © phpBB Limited, 2007
style_version = 3.2.0-b1
phpbb_version = 3.2.0-b1
# Defining a different template bitfield
# template_bitfield = lNg=
# Parent style
# Set value to empty or to this style's name if this style does not have a parent style
parent = prosilver
</pre></div>
<a name="template-events"></a><h3>4.iii. Template Events</h3>
<p>Template events must follow this format: <code><!-- EVENT event_name --></code></p>
<p>Using the above example, files named <code>event_name.html</code> located within extensions will be injected into the location of the event.</p>
<h4>Template event naming guidelines:</h4>
<ul>
<li>An event name must be all lowercase, with each word separated by an underscore.</li>
<li>An event name must briefly describe the location and purpose of the event.</li>
<li>
An event name must end with one of the following suffixes:
<ul>
<li><code>_prepend</code> - This event adds an item to the beginning of a block of related items, or adds to the beginning of individual items in a block.</li>
<li><code>_append</code> - This event adds an item to the end of a block of related items, or adds to the end of individual items in a block.</li>
<li><code>_before</code> - This event adds content directly before the specified block</li>
<li><code>_after</code> - This event adds content directly after the specified block</li>
</ul>
</li>
</ul>
<h4>Template event documentation</h4>
<p>Events must be documented in <code>phpBB/docs/events.md</code> in alphabetical order based on the event name. The format is as follows:</p>
<ul><li>An event found in only one template file:
<div class="codebox"><pre>event_name
===
* Location: styles/<style_name>/template/filename.html
* Purpose: A brief description of what this event should be used for.
This may span multiple lines.
* Since: Version since when the event was added
</pre></div></li>
<li>An event found in multiple template files:
<div class="codebox"><pre>event_name
===
* Locations:
+ first/file/path.html
+ second/file/path.html
* Purpose: Same as above.
* Since: 3.2.0-b1
</pre></div>
<li>An event that is found multiple times in a file should have the number of instances in parenthesis next to the filename.
<div class="codebox"><pre>event_name
===
* Locations:
+ first/file/path.html (2)
+ second/file/path.html
* Purpose: Same as above.
* Since: 3.2.0-b1
</pre></div></li>
<li>An actual example event documentation:
<div class="codebox"><pre>forumlist_body_last_post_title_prepend
====
* Locations:
+ styles/prosilver/template/forumlist_body.html
+ styles/subsilver2/template/forumlist_body.html
* Purpose: Add content before the post title of the latest post in a forum on the forum list.
* Since: 3.2.0-a1
</pre></div></ul><br />
</div>
<div class="back2top"><a href="#wrap" class="top">Back to Top</a></div>
</div>
</div>
<hr />
<a name="charsets"></a><h2>5. Character Sets and Encodings</h2>
<div class="paragraph">
<div class="inner">
<div class="content">
<h4>What are Unicode, UCS and UTF-8?</h4>
<p>The <a href="http://en.wikipedia.org/wiki/Universal_Character_Set">Universal Character Set (UCS)</a> described in ISO/IEC 10646 consists of a large amount of characters. Each of them has a unique name and a code point which is an integer number. <a href="http://en.wikipedia.org/wiki/Unicode">Unicode</a> - which is an industry standard - complements the Universal Character Set with further information about the characters' properties and alternative character encodings. More information on Unicode can be found on the <a href="http://www.unicode.org/">Unicode Consortium's website</a>. One of the Unicode encodings is the <a href="http://en.wikipedia.org/wiki/UTF-8">8-bit Unicode Transformation Format (UTF-8)</a>. It encodes characters with up to four bytes aiming for maximum compatibility with the <a href="http://en.wikipedia.org/wiki/ASCII">American Standard Code for Information Interchange</a> which is a 7-bit encoding of a relatively small subset of the UCS.</p>
<h4>phpBB's use of Unicode</h4>
<p>Unfortunately PHP does not faciliate the use of Unicode prior to version 6. Most functions simply treat strings as sequences of bytes assuming that each character takes up exactly one byte. This behaviour still allows for storing UTF-8 encoded text in PHP strings but many operations on strings have unexpected results. To circumvent this problem we have created some alternative functions to PHP's native string operations which use code points instead of bytes. These functions can be found in <code>/includes/utf/utf_tools.php</code>. They are also covered in the <a href="http://area51.phpbb.com/docs/code/">phpBB3 Sourcecode Documentation</a>. A lot of native PHP functions still work with UTF-8 as long as you stick to certain restrictions. For example <code>explode</code> still works as long as the first and the last character of the delimiter string are ASCII characters.</p>
<p>phpBB only uses the ASCII and the UTF-8 character encodings. Still all Strings are UTF-8 encoded because ASCII is a subset of UTF-8. The only exceptions to this rule are code sections which deal with external systems which use other encodings and character sets. Such external data should be converted to UTF-8 using the <code>utf8_recode()</code> function supplied with phpBB. It supports a variety of other character sets and encodings, a full list can be found below.</p>
<p>With <code>$request->variable()</code> you can either allow all UCS characters in user input or restrict user input to ASCII characters. This feature is controlled by the method's third parameter called <code>$multibyte</code>. You should allow multibyte characters in posts, PMs, topic titles, forum names, etc. but it's not necessary for internal uses like a <code>$mode</code> variable which should only hold a predefined list of ASCII strings anyway.</p>
<div class="codebox"><pre>
// an input string containing a multibyte character
$_REQUEST['multibyte_string'] = 'Käse';
// print request variable as a UTF-8 string allowing multibyte characters
echo $request->variable('multibyte_string', '', true);
// print request variable as ASCII string
echo $request->variable('multibyte_string', '');
</pre></div>
<p>This code snippet will generate the following output:</p>
<div class="codebox"><pre>
Käse
K??se
</pre></div>
<h4>Case Folding</h4>
<p>Case insensitive comparison of strings is no longer possible with <code>strtolower</code> or <code>strtoupper</code> as some characters have multiple lower case or multiple upper case forms depending on their position in a word. The <code>utf8_strtolower</code> and the <code>utf8_strtoupper</code> functions suffer from the same problem so they can only be used to display upper/lower case versions of a string but they cannot be used for case insensitive comparisons either. So instead you should use case folding which gives you a case insensitive version of the string which can be used for case insensitive comparisons. An NFC normalized string can be case folded using <code>utf8_case_fold_nfc()</code>.</p>
<p class="bad">// Bad - The strings might be the same even if strtolower differs</p>
<div class="codebox"><pre>
if (strtolower($string1) == strtolower($string2))
{
echo '$string1 and $string2 are equal or differ in case';
}
</pre></div>
<p class="good">// Good - Case folding is really case insensitive</p>
<div class="codebox"><pre>
if (utf8_case_fold_nfc($string1) == utf8_case_fold_nfc($string2))
{
echo '$string1 and $string2 are equal or differ in case';
}
</pre></div>
<h4>Confusables Detection</h4>
<p>phpBB offers a special method <code>utf8_clean_string</code> which can be used to make sure string identifiers are unique. This method uses Normalization Form Compatibility Composition (NFKC) instead of NFC and replaces similarly looking characters with a particular representative of the equivalence class. This method is currently used for usernames and group names to avoid confusion with similarly looking names.</p>
</div>
<div class="back2top"><a href="#wrap" class="top">Back to Top</a></div>
</div>
</div>
<hr />
<a name="translation"></a><h2>6. Translation (<abbr title="Internationalisation">i18n</abbr>/<abbr title="Localisation">L10n</abbr>) Guidelines</h2>
<div class="paragraph">
<div class="inner">
<div class="content">
<a name="standardisation"></a><h3>6.i. Standardisation</h3>
<h4>Reason:</h4>
<p>phpBB is one of the most translated open-source projects, with the current stable version being available in over 60 localisations. Whilst the ad hoc approach to the naming of language packs has worked, for phpBB3 and beyond we hope to make this process saner which will allow for better interoperation with current and future web browsers.</p>
<h4>Encoding:</h4>
<p>With phpBB3, the output encoding for the forum in now UTF-8, a Universal Character Encoding by the Unicode Consortium that is by design a superset to US-ASCII and ISO-8859-1. By using one character set which simultaenously supports all scripts which previously would have required different encodings (eg: ISO-8859-1 to ISO-8859-15 (Latin, Greek, Cyrillic, Thai, Hebrew, Arabic); GB2312 (Simplified Chinese); Big5 (Traditional Chinese), EUC-JP (Japanese), EUC-KR (Korean), VISCII (Vietnamese); et cetera), we remove the need to convert between encodings and improves the accessibility of multilingual forums.</p>
<p>The impact is that the language files for phpBB must now also be encoded as UTF-8, with a caveat that the files must <strong>not contain</strong> a <abbr title="Byte-Order-Mark">BOM</abbr> for compatibility reasons with non-Unicode aware versions of PHP. For those with forums using the Latin character set (ie: most European languages), this change is transparent since UTF-8 is superset to US-ASCII and ISO-8859-1.</p>
<h4>Language Tag:</h4>
<p>The <abbr title="Internet Engineering Task Force">IETF</abbr> recently published <a href="http://tools.ietf.org/html/rfc4646">RFC 4646</a> for tags used to identify languages, which in combination with <a href="http://tools.ietf.org/html/rfc4647">RFC 4647</a> obseletes the older <a href="http://tools.ietf.org/html/rfc3066">RFC 3006</a> and older-still <a href="http://tools.ietf.org/html/rfc1766">RFC 1766</a>. <a href="http://tools.ietf.org/html/rfc4646">RFC 4646</a> uses <a href="http://www.loc.gov/standards/iso639-2/php/English_list.php">ISO 639-1/ISO 639-2</a>, <a href="http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html">ISO 3166-1 alpha-2</a>, <a href="http://www.unicode.org/iso15924/iso15924-codes.html">ISO 15924</a> and <a href="http://unstats.un.org/unsd/methods/m49/m49.htm">UN M.49</a> to define a language tag. Each complete tag is composed of subtags which are not case sensitive and can also be empty.</p>
<p>Ordering of the subtags in the case that they are all non-empty is: <code>language</code>-<code>script</code>-<code>region</code>-<code>variant</code>-<code>extension</code>-<code>privateuse</code>. Should any subtag be empty, its corresponding hyphen would also be ommited. Thus, the language tag for English will be <code>en</code> <strong>and not</strong> <code>en-----</code>.</p>
<p>Most language tags consist of a two- or three-letter language subtag (from <a href="http://www.loc.gov/standards/iso639-2/php/English_list.php">ISO 639-1/ISO 639-2</a>). Sometimes, this is followed by a two-letter or three-digit region subtag (from <a href="http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html">ISO 3166-1 alpha-2</a> or <a href="http://unstats.un.org/unsd/methods/m49/m49.htm">UN M.49</a>). Some examples are:</p>
<table>
<caption>Examples of various possible language tags as described by RFC 4646 and RFC 4647</caption>
<thead>
<tr>
<th scope="col">Language tag</th>
<th scope="col">Description</th>
<th scope="col">Component subtags</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>en</code></td>
<td>English</td>
<td><code>language</code></td>
</tr>
<tr>
<td><code>mas</code></td>
<td>Masai</td>
<td><code>language</code></td>
</tr>
<tr>
<td><code>fr-CA</code></td>
<td>French as used in Canada</td>
<td><code>language</code>+<code>region</code></td>
</tr>
<tr>
<td><code>en-833</code></td>
<td>English as used in the Isle of Man</td>
<td><code>language</code>+<code>region</code></td>
</tr>
<tr>
<td><code>zh-Hans</code></td>
<td>Chinese written with Simplified script</td>
<td><code>language</code>+<code>script</code></td>
</tr>
<tr>
<td><code>zh-Hant-HK</code></td>
<td>Chinese written with Traditional script as used in Hong Kong</td>
<td><code>language</code>+<code>script</code>+<code>region</code></td>
</tr>
<tr>
<td><code>de-AT-1996</code></td>
<td>German as used in Austria with 1996 orthography</td>
<td><code>language</code>+<code>region</code>+<code>variant</code></td>
</tr>
</tbody>
</table>
<p>The ultimate aim of a language tag is to convey the needed <strong>useful distingushing information</strong>, whilst keeping it as <strong>short as possible</strong>. So for example, use <code>en</code>, <code>fr</code> and <code>ja</code> as opposed to <code>en-GB</code>, <code>fr-FR</code> and <code>ja-JP</code>, since we know English, French and Japanese are the native language of Great Britain, France and Japan respectively.</p>
<p>Next is the <a href="http://www.unicode.org/iso15924/iso15924-codes.html">ISO 15924</a> language script code and when one should or shouldn't use it. For example, whilst <code>en-Latn</code> is syntaxically correct for describing English written with Latin script, real world English writing is <strong>more-or-less exclusively in the Latin script</strong>. For such languages like English that are written in a single script, the <a href="http://www.iana.org/assignments/language-subtag-registry"><abbr title="Internet Assigned Numbers Authority">IANA</abbr> Language Subtag Registry</a> has a "Suppress-Script" field meaning the script code <strong>should be ommitted</strong> unless a specific language tag requires a specific script code. Some languages are <strong>written in more than one script</strong> and in such cases, the script code <strong>is encouraged</strong> since an end-user may be able to read their language in one script, but not the other. Some examples are:</p>
<table>
<caption>Examples of using a language subtag in combination with a script subtag</caption>
<thead>
<tr>
<th scope="col">Language tag</th>
<th scope="col">Description</th>
<th scope="col">Component subtags</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>en-Brai</code></td>
<td>English written in Braille script</td>
<td><code>language</code>+<code>script</code></td>
</tr>
<tr>
<td><code>en-Dsrt</code></td>
<td>English written in Deseret (Mormon) script</td>
<td><code>language</code>+<code>script</code></td>
</tr>
<tr>
<td><code>sr-Latn</code></td>
<td>Serbian written in Latin script</td>
<td><code>language</code>+<code>script</code></td>
</tr>
<tr>
<td><code>sr-Cyrl</code></td>
<td>Serbian written in Cyrillic script</td>
<td><code>language</code>+<code>script</code></td>
</tr>
<tr>
<td><code>mn-Mong</code></td>
<td>Mongolian written in Mongolian script</td>
<td><code>language</code>+<code>script</code></td>
</tr>
<tr>
<td><code>mn-Cyrl</code></td>
<td>Mongolian written in Cyrillic script</td>
<td><code>language</code>+<code>script</code></td>
</tr>
<tr>
<td><code>mn-Phag</code></td>
<td>Mongolian written in Phags-pa script</td>
<td><code>language</code>+<code>script</code></td>
</tr>
<tr>
<td><code>az-Cyrl-AZ</code></td>
<td>Azerbaijani written in Cyrillic script as used in Azerbaijan</td>
<td><code>language</code>+<code>script</code>+<code>region</code></td>
</tr>
<tr>
<td><code>az-Latn-AZ</code></td>
<td>Azerbaijani written in Latin script as used in Azerbaijan</td>
<td><code>language</code>+<code>script</code>+<code>region</code></td>
</tr>
<tr>
<td><code>az-Arab-IR</code></td>
<td>Azerbaijani written in Arabic script as used in Iran</td>
<td><code>language</code>+<code>script</code>+<code>region</code></td>
</tr>
</tbody>
</table>
<p>Usage of the three-digit <a href="http://unstats.un.org/unsd/methods/m49/m49.htm">UN M.49</a> code over the two-letter <a href="http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html">ISO 3166-1 alpha-2</a> code should hapen if a macro-geographical entity is required and/or the <a href="http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html">ISO 3166-1 alpha-2</a> is ambiguous.</p>
<p>Examples of English using marco-geographical regions:</p>
<table>
<caption>Coding for English using macro-geographical regions (examples for English of ISO 3166-1 alpha-2 vs. UN M.49 code)</caption>
<thead>
<tr>
<th scope="col">ISO 639-1/ISO 639-2 + ISO 3166-1 alpha-2</th>
<th scope="col" colspan="2">ISO 639-1/ISO 639-2 + UN M.49 (Example macro regions)</th>
</tr>
</thead>
<tbody>
<tr>
<td><dl><dt><code>en-AU</code></dt><dd>English as used in <strong>Australia</strong></dd></dl></td>
<td rowspan="2"><dl><dt><code>en-053</code></dt><dd>English as used in <strong>Australia & New Zealand</strong></dd></dl></td>
<td rowspan="3"><dl><dt><code>en-009</code></dt><dd>English as used in <strong>Oceania</strong></dd></dl></td>
</tr>
<tr>
<td><dl><dt><code>en-NZ</code></dt><dd>English as used in <strong>New Zealand</strong></dd></dl></td>
</tr>
<tr>
<td><dl><dt><code>en-FJ</code></dt><dd>English as used in <strong>Fiji</strong></dd></dl></td>
<td><dl><dt><code>en-054 </code></dt><dd>English as used in <strong>Melanesia</strong></dd></dl></td>
</tr>
</tbody>
</table>
<p>Examples of Spanish using marco-geographical regions:</p>
<table>
<caption>Coding for Spanish macro-geographical regions (examples for Spanish of ISO 3166-1 alpha-2 vs. UN M.49 code)</caption>
<thead>
<tr>
<th scope="col">ISO 639-1/ISO 639-2 + ISO 3166-1 alpha-2</th>
<th scope="col" colspan="2">ISO 639-1/ISO 639-2 + UN M.49 (Example macro regions)</th>
</tr>
</thead>
<tbody>
<tr>
<td><dl><dt><code>es-PR</code></dt><dd>Spanish as used in <strong>Puerto Rico</strong></dd></dl></td>
<td rowspan="3"><dl><dt><code>es-419</code></dt><dd>Spanish as used in <strong>Latin America & the Caribbean</strong></dd></dl></td>
<td rowspan="4"><dl><dt><code>es-019</code></dt><dd>Spanish as used in <strong>the Americas</strong></dd></dl></td>
</tr>
<tr>
<td><dl><dt><code>es-HN</code></dt><dd>Spanish as used in <strong>Honduras</strong></dd></dl></td>
</tr>
<tr>
<td><dl><dt><code>es-AR</code></dt><dd>Spanish as used in <strong>Argentina</strong></dd></dl></td>
</tr>
<tr>
<td><dl><dt><code>es-US</code></dt><dd>Spanish as used in <strong>United States of America</strong></dd></dl></td>
<td><dl><dt><code>es-021</code></dt><dd>Spanish as used in <strong>North America</strong></dd></dl></td>
</tr>
</tbody>
</table>
<p>Example of where the <a href="http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html">ISO 3166-1 alpha-2</a> is ambiguous and why <a href="http://unstats.un.org/unsd/methods/m49/m49.htm">UN M.49</a> might be preferred:</p>
<table>
<caption>Coding for ambiguous ISO 3166-1 alpha-2 regions</caption>
<thead>
<tr>
<th scope="col" colspan="2"><code>CS</code> assignment pre-1994</th>
<th scope="col" colspan="2"><code>CS</code> assignment post-1994</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="2">
<dl>
<dt><code>CS</code></dt><dd><strong>Czechoslovakia</strong> (ISO 3166-1)</dd>
<dt><code>200</code></dt><dd><strong>Czechoslovakia</strong> (UN M.49)</dd>
</dl>
</td>
<td colspan="2">
<dl>
<dt><code>CS</code></dt><dd><strong>Serbian & Montenegro</strong> (ISO 3166-1)</dd>
<dt><code>891</code></dt><dd><strong>Serbian & Montenegro</strong> (UN M.49)</dd>
</dl>
</td>
</tr>
<tr>
<td>
<dl>
<dt><code>CZ</code></dt><dd><strong>Czech Republic</strong> (ISO 3166-1)</dd>
<dt><code>203</code></dt><dd><strong>Czech Republic</strong> (UN M.49)</dd>
</dl>
</td>
<td>
<dl>
<dt><code>SK</code></dt><dd><strong>Slovakia</strong> (ISO 3166-1)</dd>
<dt><code>703</code></dt><dd><strong>Slovakia</strong> (UN M.49)</dd>
</dl>
</td>
<td>
<dl>
<dt><code>RS</code></dt><dd><strong>Serbia</strong> (ISO 3166-1)</dd>
<dt><code>688</code></dt><dd><strong>Serbia</strong> (UN M.49)</dd>
</dl>
</td>
<td>
<dl>
<dt><code>ME</code></dt><dd><strong>Montenegro</strong> (ISO 3166-1)</dd>
<dt><code>499</code></dt><dd><strong>Montenegro</strong> (UN M.49)</dd>
</dl>
</td>
</tr>
</tbody>
</table>
<h4>Macro-languages & Topolects:</h4>
<p><a href="http://tools.ietf.org/html/rfc4646">RFC 4646</a> anticipates features which shall be available in (currently draft) <a href="http://www.sil.org/iso639-3/">ISO 639-3</a> which aims to provide as complete enumeration of languages as possible, including living, extinct, ancient and constructed languages, whether majour, minor or unwritten. A new feature of <a href="http://www.sil.org/iso639-3/">ISO 639-3</a> compared to the previous two revisions is the concept of <a href="http://www.sil.org/iso639-3/macrolanguages.asp">macrolanguages</a> where Arabic and Chinese are two such examples. In such cases, their respective codes of <code>ar</code> and <code>zh</code> is very vague as to which dialect/topolect is used or perhaps some terse classical variant which may be difficult for all but very educated users. For such macrolanguages, it is recommended that the sub-language tag is used as a suffix to the macrolanguage tag, eg:</p>
<table>
<caption>Macrolanguage subtag + sub-language subtag examples</caption>
<thead>
<tr>
<th scope="col">Language tag</th>
<th scope="col">Description</th>
<th scope="col">Component subtags</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>zh-cmn</code></td>
<td>Mandarin (Putonghau/Guoyu) Chinese</td>
<td><code>macrolanguage</code>+<code>sublanguage</code></td>
</tr>
<tr>
<td><code>zh-yue</code></td>
<td>Yue (Cantonese) Chinese</td>
<td><code>macrolanguage</code>+<code>sublanguage</code></td>
</tr>
<tr>
<td><code>zh-cmn-Hans</code></td>
<td>Mandarin (Putonghau/Guoyu) Chinese written in Simplified script</td>
<td><code>macrolanguage</code>+<code>sublanguage</code>+<code>script</code></td>
</tr>
<tr>
<td><code>zh-cmn-Hant</code></td>
<td>Mandarin (Putonghau/Guoyu) Chinese written in Traditional script</td>
<td><code>macrolanguage</code>+<code>sublanguage</code>+<code>script</code></td>
</tr>
<tr>
<td><code>zh-nan-Latn-TW</code></td>
<td>Minnan (Hoklo) Chinese written in Latin script (POJ Romanisation) as used in Taiwan</td>
<td><code>macrolanguage</code>+<code>sublanguage</code>+<code>script</code>+<code>region</code></td>
</tr>
</tbody>
</table>
<a name="otherconsiderations"></a><h3>6.ii. Other considerations</h3>
<h4>Normalisation of language tags for phpBB:</h4>
<p>For phpBB, the language tags are <strong>not</strong> used in their raw form and instead converted to all lower-case and have the hyphen <code>-</code> replaced with an underscore <code>_</code> where appropriate, with some examples below:</p>
<table>
<caption>Language tag normalisation examples</caption>
<thead>
<tr>
<th scope="col">Raw language tag</th>
<th scope="col">Description</th>
<th scope="col">Value of <code>USER_LANG</code><br />in <code>./common.php</code></th>
<th scope="col">Language pack directory<br />name in <code>/language/</code></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>en</code></td>
<td>British English</td>
<td><code>en</code></td>
<td><code>en</code></td>
</tr>
<tr>
<td><code>de-AT</code></td>
<td>German as used in Austria</td>
<td><code>de-at</code></td>
<td><code>de_at</code></td>
</tr>
<tr>
<td><code>es-419</code></td>
<td>Spanish as used in Latin America & Caribbean</td>
<td><code>en-419</code></td>
<td><code>en_419</code></td>
</tr>
<tr>
<td><code>zh-yue-Hant-HK</code></td>
<td>Cantonese written in Traditional script as used in Hong Kong</td>
<td><code>zh-yue-hant-hk</code></td>
<td><code>zh_yue_hant_hk</code></td>
</tr>
</tbody>
</table>
<h4>How to use <code>iso.txt</code>:</h4>
<p>The <code>iso.txt</code> file is a small UTF-8 encoded plain-text file which consists of three lines:</p>
<ol>
<li><code>Language's English name</code></li>
<li><code>Language's local name</code></li>
<li><code>Authors information</code></li>
</ol>
<p><code>iso.txt</code> is automatically generated by the language pack submission system on phpBB.com. You don't have to create this file yourself if you plan on releasing your language pack on phpBB.com, but do keep in mind that phpBB itself does require this file to be present.</p>
<p>Because language tags themselves are meant to be machine read, they can be rather obtuse to humans and why descriptive strings as provided by <code>iso.txt</code> are needed. Whilst <code>en-US</code> could be fairly easily deduced to be "English as used in the United States", <code>de-CH</code> is more difficult less one happens to know that <code>de</code> is from "<span lang="de">Deutsch</span>", German for "German" and <code>CH</code> is the abbreviation of the official Latin name for Switzerland, "<span lang="la">Confoederatio Helvetica</span>".</p>
<p>For the English language description, the language name is always first and any additional attributes required to describe the subtags within the language code are then listed in order separated with commas and enclosed within parentheses, eg:</p>
<table>
<caption>English language description examples for iso.txt</caption>
<thead>
<tr>
<th scope="col">Raw language tag</th>
<th scope="col">English description within <code>iso.txt</code></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>en</code></td>
<td>British English</td>
</tr>
<tr>
<td><code>en-US</code></td>
<td>English (United States)</td>
</tr>
<tr>
<td><code>en-053</code></td>
<td>English (Australia & New Zealand)</td>
</tr>
<tr>
<td><code>de</code></td>
<td>German</td>
</tr>
<tr>
<td><code>de-CH-1996</code></td>
<td>German (Switzerland, 1996 orthography)</td>
</tr>
<tr>
<td><code>gws-1996</code></td>
<td>Swiss German (1996 orthography)</td>
</tr>
<tr>
<td><code>zh-cmn-Hans-CN</code></td>
<td>Mandarin Chinese (Simplified, Mainland China)</td>
</tr>
<tr>
<td><code>zh-yue-Hant-HK</code></td>
<td>Cantonese Chinese (Traditional, Hong Kong)</td>
</tr>
</tbody>
</table>
<p>For the localised language description, just translate the English version though use whatever appropriate punctuation typical for your own locale, assuming the language uses punctuation at all.</p>
<h4>Unicode bi-directional considerations:</h4>
<p>Because phpBB is now UTF-8, all translators must take into account that certain strings may be shown when the directionality of the document is either opposite to normal or is ambiguous.</p>
<p>The various Unicode control characters for bi-directional text and their HTML enquivalents where appropriate are as follows:</p>
<table>
<caption>Unicode bidirectional control characters & HTML elements/entities</caption>
<thead>
<tr>
<th scope="col">Unicode character<br />abbreviation</th>
<th scope="col">Unicode<br />code-point</th>
<th scope="col">Unicode character<br />name</th>
<th scope="col">Equivalent HTML<br />markup/entity</th>
<th scope="col">Raw character<br />(enclosed between '')</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>LRM</code></td>
<td><code>U+200E</code></td>
<td>Left-to-Right Mark</td>
<td><code>&lrm;</code></td>
<td>'‎'</td>
</tr>
<tr>
<td><code>RLM</code></td>
<td><code>U+200F</code></td>
<td>Right-to-Left Mark</td>
<td><code>&rlm;</code></td>
<td>'‏'</td>
</tr>
<tr>
<td><code>LRE</code></td>
<td><code>U+202A</code></td>
<td>Left-to-Right Embedding</td>
<td><code>dir="ltr"</code></td>
<td>'‪'</td>
</tr>
<tr>
<td><code>RLE</code></td>
<td><code>U+202B</code></td>
<td>Right-to-Left Embedding</td>
<td><code>dir="rtl"</code></td>
<td>'‫'</td>
</tr>
<tr>
<td><code>PDF</code></td>
<td><code>U+202C</code></td>
<td>Pop Directional Formatting</td>
<td><code></bdo></code></td>
<td>'‬'</td>
</tr>
<tr>
<td><code>LRO</code></td>
<td><code>U+202D</code></td>
<td>Left-to-Right Override</td>
<td><code><bdo dir="ltr"></code></td>
<td>'‭'</td>
</tr>
<tr>
<td><code>RLO</code></td>
<td><code>U+202E</code></td>
<td>Right-to-Left Override</td>
<td><code><bdo dir="rtl"></code></td>
<td>'‮'</td>
</tr>
</tbody>
</table>
<p>For <code>iso.txt</code>, the directionality of the text can be explicitly set using special Unicode characters via any of the three methods provided by left-to-right/right-to-left markers/embeds/overrides, as without them, the ordering of characters will be incorrect, eg:</p>
<table>
<caption>Unicode bidirectional control characters iso.txt</caption>
<thead>
<tr>
<th scope="col">Directionality</th>
<th scope="col">Raw character view</th>
<th scope="col">Display of localised<br />description in <code>iso.txt</code></th>
<th scope="col">Ordering</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>dir="ltr"</code></td>
<td>English (Australia & New Zealand)</td>
<td dir="ltr">English (Australia & New Zealand)</td>
<td class="good">Correct</td>
</tr>
<tr>
<td><code>dir="rtl"</code></td>
<td>English (Australia & New Zealand)</td>
<td dir="rtl">English (Australia & New Zealand)</td>
<td class="bad">Incorrect</td>
</tr>
<tr>
<td><code>dir="rtl"</code> with <code>LRM</code></td>
<td>English (Australia & New Zealand)<code>U+200E</code></td>
<td dir="rtl">English (Australia & New Zealand)‎</td>
<td class="good">Correct</td>
</tr>
<tr>
<td><code>dir="rtl"</code> with <code>LRE</code> & <code>PDF</code></td>
<td><code>U+202A</code>English (Australia & New Zealand)<code>U+202C</code></td>
<td dir="rtl">‪English (Australia & New Zealand)‬</td>
<td class="good">Correct</td>
</tr>
<tr>
<td><code>dir="rtl"</code> with <code>LRO</code> & <code>PDF</code></td>
<td><code>U+202D</code>English (Australia & New Zealand)<code>U+202C</code></td>
<td dir="rtl">‭English (Australia & New Zealand)‬</td>
<td class="good">Correct</td>
</tr>
</tbody>
</table>
<p>In choosing which of the three methods to use, in the majority of cases, the <code>LRM</code> or <code>RLM</code> to put a "strong" character to fully enclose an ambiguous punctuation character and thus make it inherit the correct directionality is sufficient.</p>
<p>Within some cases, there may be mixed scripts of a left-to-right and right-to-left direction, so using <code>LRE</code> & <code>RLE</code> with <code>PDF</code> may be more appropriate. Lastly, in very rare instances where directionality must be forced, then use <code>LRO</code> & <code>RLO</code> with <code>PDF</code>.</p>
<p>For further information on authoring techniques of bi-directional text, please see the W3C tutorial on <a href="http://www.w3.org/International/tutorials/bidi-xhtml/">authoring techniques for XHTML pages with bi-directional text</a>.</p>
<a name="placeholders"></a><h3>6.iii. Working with placeholders</h3>
<p>As phpBB is translated into languages with different ordering rules to that of English, it is possible to show specific values in any order deemed appropriate. Take for example the extremely simple "Page <em>X</em> of <em>Y</em>", whilst in English this could just be coded as:</p>
<div class="codebox"><pre>
...
'PAGE_OF' => 'Page %s of %s',
/* Just grabbing the replacements as they
come and hope they are in the right order */
...</pre>
</div>
<p>… a clearer way to show explicit replacement ordering is to do:</p>
<div class="codebox"><pre>
...
'PAGE_OF' => 'Page %1$s of %2$s',
/* Explicit ordering of the replacements,
even if they are the same order as English */
...</pre>
</div>
<p>Why bother at all? Because some languages, the string transliterated back to English might read something like:</p>
<div class="codebox"><pre>
...
'PAGE_OF' => 'Total of %2$s pages, currently on page %1$s',
/* Explicit ordering of the replacements,
reversed compared to English as the total comes first */
...</pre>
</div>
<a name="usingplurals"></a><h3>6.iv. Using plurals</h3>
<p>
The english language is very simple when it comes to plurals.<br />
You have <code>0 elephants</code>, <code>1 elephant</code>, or <code>2+ elephants</code>. So basically you have 2 different forms: one singular and one plural.<br />
But for some other languages this is quite more difficult. Let's take the Bosnian language as another example:<br />
You have <code>[1/21/31] slon</code>, <code>[2/3/4] slona</code>, <code>[0/5/6] slonova</code> and <code>[7/8/9/11] ...</code> and some more difficult rules.
</p>
<p>The <a href="https://area51.phpbb.com/docs/dev/32x/language/plurals.html">plural system</a> takes care of this and can be used as follows:</p>
<p>The PHP code will basically look like this:</p>
<div class="codebox"><pre>
...
$user->lang('NUMBER_OF_ELEPHANTS', $number_of_elephants);
...</pre>
</div>
<p>And the English translation would be:</p>
<div class="codebox"><pre>
...
'NUMBER_OF_ELEPHANTS' => array(
0 => 'You have no elephants', // Optional special case for 0
1 => 'You have 1 elephant', // Singular
2 => 'You have %d elephants', // Plural
),
...</pre>
</div>
<p>While the Bosnian translation can have more cases:</p>
<div class="codebox"><pre>
...
'NUMBER_OF_ELEPHANTS' => array(
0 => 'You have no slonova', // Optional special case for 0
1 => 'You have %d slon', // Used for 1, 21, 31, ..
2 => 'You have %d slona', // Used for 5, 6,
3 => ...
),
...</pre>
</div>
<p><strong>NOTE:</strong> It is okay to use plurals for an unknown number compared to a single item, when the number is not known and displayed:</p>
<div class="codebox"><pre>
...
'MODERATOR' => 'Moderator', // Your board has 1 moderator
'MODERATORS' => 'Moderators', // Your board has multiple moderators
...</pre>
</div>
<a name="writingstyle"></a><h3>6.v. Writing Style</h3>
<h4>Miscellaneous tips & hints:</h4>
<p>As the language files are PHP files, where the various strings for phpBB are stored within an array which in turn are used for display within an HTML page, rules of syntax for both must be considered. Potentially problematic characters are: <code>'</code> (straight quote/apostrophe), <code>"</code> (straight double quote), <code><</code> (less-than sign), <code>></code> (greater-than sign) and <code>&</code> (ampersand).</p>
<p class="bad">// Bad - The un-escapsed straight-quote/apostrophe will throw a PHP parse error</p>
<div class="codebox"><pre>
...
'CONV_ERROR_NO_AVATAR_PATH'
=> 'Note to developer: you must specify $convertor['avatar_path'] to use %s.',
...</pre>
</div>
<p class="good">// Good - Literal straight quotes should be escaped with a backslash, ie: \</p>
<div class="codebox"><pre>
...
'CONV_ERROR_NO_AVATAR_PATH'
=> 'Note to developer: you must specify $convertor[\'avatar_path\'] to use %s.',
...</pre>
</div>
<p>However, because phpBB3 now uses UTF-8 as its sole encoding, we can actually use this to our advantage and not have to remember to escape a straight quote when we don't have to:</p>
<p class="bad">// Bad - The un-escapsed straight-quote/apostrophe will throw a PHP parse error</p>
<div class="codebox"><pre>
...
'USE_PERMISSIONS' => 'Test out user's permissions',
...</pre>
</div>
<p class="good">// Okay - However, non-programmers wouldn't type "user\'s" automatically</p>
<div class="codebox"><pre>
...
'USE_PERMISSIONS' => 'Test out user\'s permissions',
...</pre>
</div>
<p class="good">// Best - Use the Unicode Right-Single-Quotation-Mark character</p>
<div class="codebox"><pre>
...
'USE_PERMISSIONS' => 'Test out user’s permissions',
...</pre>
</div>
<p>The <code>"</code> (straight double quote), <code><</code> (less-than sign) and <code>></code> (greater-than sign) characters can all be used as displayed glyphs or as part of HTML markup, for example:</p>
<p class="bad">// Bad - Invalid HTML, as segments not part of elements are not entitised</p>
<div class="codebox"><pre>
...
'FOO_BAR' => 'PHP version < 5.3.3.<br />
Visit "Downloads" at <a href="http://www.php.net/">www.php.net</a>.',
...</pre>
</div>
<p class="good">// Okay - No more invalid HTML, but "&quot;" is rather clumsy</p>
<div class="codebox"><pre>
...
'FOO_BAR' => 'PHP version &lt; 5.3.3.<br />
Visit &quot;Downloads&quot; at <a href="http://www.php.net/">www.php.net</a>.',
...</pre>
</div>
<p class="good">// Best - No more invalid HTML, and usage of correct typographical quotation marks</p>
<div class="codebox"><pre>
...
'FOO_BAR' => 'PHP version &lt; 5.3.3.<br />
Visit “Downloads” at <a href="http://www.php.net/">www.php.net</a>.',
...</pre>
</div>
<p>Lastly, the <code>&</code> (ampersand) must always be entitised regardless of where it is used:</p>
<p class="bad">// Bad - Invalid HTML, none of the ampersands are entitised</p>
<div class="codebox"><pre>
...
'FOO_BAR' => '<a href="http://somedomain.tld/?foo=1&bar=2">Foo & Bar</a>.',
...</pre>
</div>
<p class="good">// Good - Valid HTML, amperands are correctly entitised in all cases</p>
<div class="codebox"><pre>
...
'FOO_BAR' => '<a href="http://somedomain.tld/?foo=1&amp;bar=2">Foo &amp; Bar</a>.',
...</pre>
</div>
<p>As for how these charcters are entered depends very much on choice of Operating System, current language locale/keyboard configuration and native abilities of the text editor used to edit phpBB language files. Please see <a href="http://en.wikipedia.org/wiki/Unicode#Input_methods">http://en.wikipedia.org/wiki/Unicode#Input_methods</a> for more information.</p>
<h4>Spelling, punctuation, grammar, et cetera:</h4>
<p>The default language pack bundled with phpBB is <strong>British English</strong> using <a href="http://www.cambridge.org/">Cambridge University Press</a> spelling and is assigned the language code <code>en</code>. The style and tone of writing tends towards formal and translations <strong>should</strong> emulate this style, at least for the variant using the most compact language code. Less formal translations or those with colloquialisms <strong>must</strong> be denoted as such via either an <code>extension</code> or <code>privateuse</code> tag within its language code.</p>
</div>
<div class="back2top"><a href="#wrap" class="top">Back to Top</a></div>
</div>
</div>
<hr />
<a name="disclaimer"></a><h2>7. Copyright and disclaimer</h2>
<div class="paragraph">
<div class="inner">
<div class="content">
<p>phpBB is free software, released under the terms of the <a href="http://opensource.org/licenses/gpl-2.0.php">GNU General Public License, version 2 (GPL-2.0)</a>. Copyright © <a href="https://www.phpbb.com">phpBB Limited</a>. For full copyright and license information, please see the docs/CREDITS.txt file.</p>
</div>
<div class="back2top"><a href="#wrap" class="top">Back to Top</a></div>
</div>
</div>
<!-- END DOCUMENT -->
<div id="page-footer">
<div class="version"> </div>
</div>
</div></div>
<div>
<a id="bottom" accesskey="z"></a>
</div>
</body>
</html>
|