آموزش فارسي كردن قالب هاي ( phpBB ) ( نسخه كامل )

Hyper

Active Member
با سلام

در اين مقاله سعي خواهم كرد تا بزبان ساده و با ابزار موجود نحوه فارسي كردن قالب هاي phpBB رو توضيح بدم
لازم به توضيح است كه پيش از اين ، اساتيد بنده هم به نوعي در اين مورد سعي و تلاش كرده اند و بنده در اين مقوله سعي كرده ام كه چكيده مطالب مفيد آنها را هم لحاظ كنم ...

سطح اين آموزش متوسط است و شما به فرض داشتن آشنايي مختصري به phpBB ميتوانيد دستورالعمل هاي آن را بكار بسته و عملي كنيد

به عنوان مقدمه بهتر است به معرفي مراحل كار بپردازيم :

1. دريافت قالب مورد نظر
2. ايجاد تغييرات لازم در فايل هاي مربوطه و افزودن امكان فارسي نويسي
3. تغيير جهت و فارسي كردن كنترل پنل ادمين ( راست چين كردن )
4. طراحي و ايجاد موضوعات گرافيكي به زبان فارسي از قبيل كليدها و ...
5. تغيير فونت هاي مورد استفاده در قالب
6. نصب و استفاده از قالب مورد نظر


بسيار خوب كارمون رو شروع كنيم :

1. براي دريافت قابل بهترين منبعي كه ميتونم معرفي كنم و احتمالا خيلي ها هم به آن آشنايي دارند اين آدرس است : http://www.phpbbhacks.com/templates.php
شما ميتوانيد قالب مورد نظر خود را از آدرس فوق انتخاب و دريافت نماييد
خوشبختانه در اين مرجع قالب ها دسته بنده شده و همچنين امكان پيش نمايش رو هم دار خواهيد بود ، اين موضوع ميتونه در انتخابتون كمك بسزايي بكنه ...




2. فايل هاي قالب phpBB فايلهاي با پسوند tpl. و در فولدرهايي مجزا و هم نام با قالب و در شاخه templetes هستند

پيش از هركاري بايد امكان فارسي نويسي ( تعريف كليدها فارسي ) رو انجام بديم
براي اين كار نياز به كدهاي جاوا اسكريپت داريم
از آنجايي كه فايل overall_header.tpl در تمامي صفحات انجمن وجود دارد و تكرار ميشود ( قسمت بالاي صفحات ) ، بهترين محل براي قرار دادن كد هاي لازم است
كد زير رو ( در ابتداي فايل ) يافته
کد:
dir="{S_CONTENT_DIRECTION}"
و اين كد رو جايگزين آن كنيد :
کد:
dir="rtl"
حالا كافيست اين كد رو پيش از
کد:
</head>
اضافه كنيم :

کد:
<script language="javascript" type="text/javascript">
var lang = 1;	// 1: Farsi, 0: English

// Farsi keyboard map based on ISIRI-2901
var farsikey = [
   0x0020, 0x0021, 0x061B, 0x066B, 0x00A4, 0x066A, 0x060C, 0x06AF,
   0x0029, 0x0028, 0x002A, 0x002B, 0x0648, 0x002D, 0x002E, 0x002F,
   0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
   0x0038, 0x0039, 0x003A, 0x0643, 0x003E, 0x003D, 0x003C, 0x061F,
   0x066C, 0x0624, 0x200C, 0x0698, 0x0649, 0x064D, 0x0625, 0x0623,
   0x0622, 0x0651, 0x0629, 0x00BB, 0x00AB, 0x0621, 0x004E, 0x005D,
   0x005B, 0x0652, 0x064B, 0x0626, 0x064F, 0x064E, 0x0056, 0x064C,
   0x0058, 0x0650, 0x0643, 0x062C, 0x005C, 0x0686, 0x00D7, 0x0640,
   0x200D, 0x0634, 0x0630, 0x0632, 0x064A, 0x062B, 0x0628, 0x0644,
   0x0627, 0x0647, 0x062A, 0x0646, 0x0645, 0x067E, 0x062F, 0x062E,
   0x062D, 0x0636, 0x0642, 0x0633, 0x0641, 0x0639, 0x0631, 0x0635,
   0x0637, 0x063A, 0x0638, 0x007D, 0x007C, 0x007B, 0x007E ];


function changeLang() {
    if (lang == 0) {
    lang = 1;
    return true;
  }
  else {
    lang = 0;
    return true;
  }
}

function FKeyDown (txtFrm){
 var key = window.event.keyCode;
 if (key == 145){
    if (lang == 0) {
      lang = 1;
      return true;
    }
    else {
      lang = 0;
      return true;
    }

}
    
}
function FKeyPress(txtFrm) {
   var key = window.event.keyCode;

  if (key == 13) { window.event.keyCode = 13; return true; }
     if (key == 0x06cc) {   
        window.event.keyCode = 0x064a;
     }
            
   if (lang == 1) { // If Farsi
     if (key == 0x0020 && window.event.shiftKey) // Shift-space -> ZWNJ
       window.event.keyCode = 0x200C;
     else
       window.event.keyCode = farsikey[key - 0x0020];
     if (farsikey[key - 0x0020] == 92) {   
        window.event.keyCode = 0x0698;
     }
     if (farsikey[key - 0x0020] == 8205) {   
        window.event.keyCode = 0x067E;
     }
   }
   return true;
}
</script>
با اين كار در واقع كليد ScrolLock رو براي تعويض بين حالت فارسي و انگليسي تعريف كرده ايم
نقشه صفحه كليد در اين حالت براساس استاندارد ISIRI-2901 است كه متداول ترين صفحه كليد مورد استفاده فارسي مي باشد
توجه كنيد كه طبق اين كد پيش فرض نگارش در فيلدهايي كه بعدا تغيير خواهيم داد ، فارسي خواهد بود
اگر تمايل به انگليسي كردن پيش فرض نگارش در فيلدها باشيد كافيست در قسمت
کد:
var lang = 1;	// 1: Farsi, 0: English
عدد 0 رو جايزگين 1 كنيد ، يعني :

کد:
var lang = 0;	// 1: Farsi, 0: English

حالا بايد بريم سراغ جداول ( tables )
در تمامي فايل هاي قالب ( فايل هاي با پسوند tpl. ) به دنبال خطوطي كه حاوي اين كد هستند ميگرديم :
کد:
<table ...................
و در كنار آن عبارت زير رو اضافه ميكنيم :

کد:
dir="rtl"

يعني به عبارتي اگر كدي مثلا به اين شكل داشته باشيم :

کد:
<table class="forumline" width="95%" cellspacing="1" cellpadding="4" border="0">

بايد به اين شكل تغيير يابد :

کد:
<table dir="rtl" class="forumline" width="95%" cellspacing="1" cellpadding="4" border="0">

مرحله بعدي تعويض كدهاي left و right است
باز هم در تمامي فايل هاي قالب ، كدهاي
کد:
align="left"
رو يافته و كد رو به
کد:
align="right"
تغيير ميديم


همچنين همه كدهاي
کد:
align="right"
رو يافته و به كد
کد:
align="left"
تغيير ميديم

اين قسمت شايد مهمترين قسمت كار باشه
چرا كه تنيجه عملكرد فوق اينجا خودش رو نشون ميده ...

در اين قسمت بايد امكان نوشتن فارسي در فيلد ها رو ايجاد كنيم
عمده فيلد هاي مورد استفاده جهت نگارش input و textarea هستند
در تمامي فايل هاي قالب ، عبارات textarea و input رو يافته و كدهاي
کد:
onKeyDown="FKeyDown();" onkeypress="FKeyPress();"
رو به اون اضافه ميكنيم

به عنوان مثال اگر در مورد input كدي مشابه اين داشته باشيم
کد:
<input class="post" type="text" name="username" size="10"/>
به اين شكل تغيير ميكنه :
کد:
<input class="post" type="text" name="username" size="10" onKeyDown="FKeyDown();" onkeypress="FKeyPress();"/>

ويا در مورد textarea اگر كدي شبيه اين داشته باشم

کد:
<textarea name="message" rows="15" cols="35" style="width:450px" tabindex="3" class="post" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);" >
به اين شكل تغيير ميكنه :

کد:
<textarea name="message" rows="15" cols="35" style="width:450px" tabindex="3" class="post" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);" onKeyDown="FKeyDown();" onkeypress="FKeyPress();">

(( لازم به ذكر است كه كدهاي مذكور رو به شكلي ديگري هم ميتوان بكاربرد كه به دليل جلوگيري از پيچيده گي موضوع و عدم ضرورت به آن نمي پردازم ... ))

نكته مهم :
در تمامي مودهايي كه در phpBB افزوده ميشود ، نحوه فارسي كردن فيلدهاي موجود در آنها به همين ترتيب فوق است
به اين معني كه ميتوانيد براي فارسي كردن فيلدهاي مورد اشاره در مودي كه نصب ميكنيد با افزودن كدهاي
کد:
onKeyDown="FKeyDown();" onkeypress="FKeyPress();"
به فيلدهاي نوشتاري آن ، به راحتي امكان فارسي نوشتن را به آنها بيافزايد ...

اخطار :
هرگز كدهاي فوق رو در مورد فيلدهايي نظير فيلدهاي دريافت آدرس ايميل و آدرس وب سايت و مخصوصا فيلد دريافت كلمه رمز كاربران ، بكار نبريد
عدم توجه به اين مورد قطعا شما رو با مشكلات جدي مواجه خواهد كرد ...




3. براي فارسي كردن كنترل پنل مدير phpBB هم روندي مشابه موارد فوق را اجرا ميكنيم ، با اين تفاوت كه بجاي فايل overall_header.tpl فايل page_header.tpl در فولدر admin قالب رو ويرايش و كدهاي لازم رو به اون اضافه ميكنيم
همچنين امكان نگارش فارسي رو هم - مطابق موارد فوق - به فيلدهاي مورد نظر در فايل هاي متفاوت فولدر admin اضافه ميكنيم

و اما تغيير جهت كنترل پنل مديريت :

در فولدر admin فايل index_frameset رو يافته و ويرايش ميكنيم

كد زير رو پيدا كرده
کد:
<frameset cols="170,*" rows="*" border="2" framespacing="0" frameborder="yes"> 
  <frame src="{S_FRAME_NAV}" name="nav" marginwidth="3" marginheight="3" scrolling="auto"> 
  <frame src="{S_FRAME_MAIN}" name="main" marginwidth="10" marginheight="10" scrolling="auto"> 
</frameset>
و كد
کد:
 cols="*,170"
رو جايگزين
کد:
cols="170,*"
ميكنيم
يعني در نهايت كداصلي به اين شكل در خواهد آمد :

کد:
<frameset cols="*,170" rows="*" border="2" framespacing="0" frameborder="yes"> 
  <frame src="{S_FRAME_NAV}" name="nav" marginwidth="3" marginheight="3" scrolling="auto"> 
  <frame src="{S_FRAME_MAIN}" name="main" marginwidth="10" marginheight="10" scrolling="auto"> 
</frameset>

سپس كدهاي زير رو يافته
کد:
<frame src="{S_FRAME_NAV}" name="nav" marginwidth="3" marginheight="3" scrolling="auto"> 
<frame src="{S_FRAME_MAIN}" name="main" marginwidth="10" marginheight="10" scrolling="auto">
و جاي خط اول و دوم رو با هم عوض ميكنيم

يعني در نهايت اين :

کد:
<frame src="{S_FRAME_MAIN}" name="main" marginwidth="10" marginheight="10" scrolling="auto"> 
<frame src="{S_FRAME_NAV}" name="nav" marginwidth="3" marginheight="3" scrolling="auto">




4. براي فارسي كردن كليدها و نمادهاي گرافيكي در شاخه قالب ، فولدري بنام lang_farsi بسازيد
فايل هاي تصويري موجود در شاخه lang_english رو درون آن كپي كرده و توسط نرم افزار گرافيكي مثل PhotoShop يا هر نرم افزار ديگري كه تمايل داريد ، متون رو به فارسي تغيير دهيد
همچنين در صورت تمايل ميتونيد از نمادهاي گرافيكي كه قبلا فارسي شده اند و در دسترس ميباشند استفاده كنيد
توجه كنيد كه اين كار به سليقه خودتان بستگي دارد و البته از كليدهاي انگيليسي هم ميتونيد استفاده كنيد و در اين صورت اشكالي در روند استفاده از قالب ايجاد وجود نخواهد داشت ...




5. فونت هاي مورد استفاده در قالب در فايلي همنام با قالب و با پسوند css. تعريف شده اند
فايل رو ويرايش كرده و فونتهايي نظير Arial و Courier و Courier New و ... را به Tahoma تغيير دهيد



6. براي نصب و استفاده از قالب ها از دستور العمل زير استفاده كنيد :

. فولدر حاوي قالب رو در شاخه templates فروم كپي كنيد
. وارد بخش مديريت phpBB شده و در قسمت مديريت استايل ها ، گزينه اضافه كردن رو انتخاب كنيد
. در صفحه مربوطه گزينه نصب در مقابل نام template رو انتخاب كنيد
. به صفحه اصلي بازگرديد و در قسمت مشخصات فردي قالب مورد نظر رو انتخاب كنيد

نكته مهم :
در صورتي كه در تنظيمات مديريت > پيكربندي سيستم > آيا همه كاربران نيز اجبارا از اين استيل استفاده كنند ؟
گزينه بله انتخاب شده باشد ، علارغم اينكه قالب هاي متعددي نصب كرده باشيد ، كاربران امكان استفاده از آنها را نخواهند داشت
و تنها قالبي كه در همان قسمت به عنوان پيش فرض تعيين شده است قابل دسترسي خواهد بود
 

d@nial

Well-Known Member
دستت درد نکنه اقا ، این مقاله رو بصورت مهم درش آوردم
 

S4DEGH

Well-Known Member
اما بنظر من وقتي قسمت overall_header.tpl رو به dir="rtl" تبديل کني ديگه لازم نيست که در فايل هاي ديگه اين کد رو قرار بدي !
امير عباس هم همين نظر منو داره !
 

kami_mz

Well-Known Member
درسته صادق جان ولي چند تا ايراد داره. يکي اينکه با همه قالب ها جواب نميده.
دوم اينکه اونجوري scroll bar ميره سمت چپ!
 

Ghamnevis

Well-Known Member
kami_mz گفت:
درسته صادق جان ولي چند تا ايراد داره. يکي اينکه با همه قالب ها جواب نميده.
دوم اينکه اونجوري scroll bar ميره سمت چپ!
اسكرول بار را گمونم ميشه راحت با يه اسكريپت به حالت طبيعي برش گردوند :)
 

Hyper

Active Member
وقتی زبان فارسی و جهت راست به چپ است ، بهتر نیست اسکرول سمت چپ باشه ؟!
 

Masoud1365

مدیر انجمن
هایپر جان با سلام می خواستم بدونمکه چطوری یه کلید مخصوص فارسی و انگلیسی نوشتن کنار فیلد ها ایجاد کنیم که دیگه از اکرول استفاده نکمیم با تشکر
 

Hyper

Active Member
قسمت فارسی ساز فایل overall_header.tpl رو به پیدا کرده ( مطابق راهنما )

و این رو

کد:
<script language="Javascript" type="text/javascript"> 
function storeCaret(textEl) { 
   if (textEl.createTextRange) textEl.caretPos = document.selection.createRange().duplicate(); 

} 
var lang = 1;   // 1: Farsi, 0: English 

// Farsi keyboard map based on ISIRI-2901 
var farsikey = [ 
   0x0020, 0x0021, 0x061B, 0x066B, 0x00A4, 0x066A, 0x060C, 0x06AF, 
   0x0029, 0x0028, 0x002A, 0x002B, 0x0648, 0x002D, 0x002E, 0x002F, 
   0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
   0x0038, 0x0039, 0x003A, 0x0643, 0x003E, 0x003D, 0x003C, 0x061F, 
   0x066C, 0x0624, 0x200C, 0x0698, 0x0649, 0x064D, 0x0625, 0x0623, 
   0x0622, 0x0651, 0x0629, 0x00BB, 0x00AB, 0x0621, 0x004E, 0x005D, 
   0x005B, 0x0652, 0x064B, 0x0626, 0x064F, 0x064E, 0x0056, 0x064C, 
   0x0058, 0x0650, 0x0643, 0x062C, 0x005C, 0x0686, 0x00D7, 0x0640, 
   0x200D, 0x0634, 0x0630, 0x0632, 0x064A, 0x062B, 0x0628, 0x0644, 
   0x0627, 0x0647, 0x062A, 0x0646, 0x0645, 0x067E, 0x062F, 0x062E, 
   0x062D, 0x0636, 0x0642, 0x0633, 0x0641, 0x0639, 0x0631, 0x0635, 
   0x0637, 0x063A, 0x0638, 0x007D, 0x007C, 0x007B, 0x007E ]; 


function changeLang() { 
    if (lang == 0) { 
    lang = 1; 
    return true; 
  } 
  else { 
    lang = 0; 
    return true; 
  } 
} 

function FKeyDown (txtFrm){ 
 var key = window.event.keyCode; 
 if (key == 145){ 
    if (lang == 0) { 
      lang = 1; 
      return true; 
    } 
    else { 
      lang = 0; 
      return true; 
    } 

} 

} 
function FKeyPress(txtFrm) { 
   var key = window.event.keyCode; 

  if (key == 13) { window.event.keyCode = 13; return true; } 

   if (lang == 1) { // If Farsi 
     if (key == 0x0020 && window.event.shiftKey) // Shift-space -> ZWNJ 
       window.event.keyCode = 0x200C; 
     else 
       window.event.keyCode = farsikey[key - 0x0020]; 
     if (farsikey[key - 0x0020] == 92) { 
        window.event.keyCode = 0x0698; 
     } 
     if (farsikey[key - 0x0020] == 8205) { 
        window.event.keyCode = 0x067E; 
     } 
   } 
   return true; 
} 

function change(obj){ 
if (lang==0) 
lang=1 
else 
lang=0; 
obj.focus(); 
} 
</script>

جایگزین این کنید :

کد:
<script language="javascript" type="text/javascript">
var lang = 0;	// 1: Farsi, 0: English

// Farsi keyboard map based on ISIRI-2901
var farsikey = [
   0x0020, 0x0021, 0x061B, 0x066B, 0x00A4, 0x066A, 0x060C, 0x06AF,
   0x0029, 0x0028, 0x002A, 0x002B, 0x0648, 0x002D, 0x002E, 0x002F,
   0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
   0x0038, 0x0039, 0x003A, 0x0643, 0x003E, 0x003D, 0x003C, 0x061F,
   0x066C, 0x0624, 0x200C, 0x0698, 0x0649, 0x064D, 0x0625, 0x0623,
   0x0622, 0x0651, 0x0629, 0x00BB, 0x00AB, 0x0621, 0x004E, 0x005D,
   0x005B, 0x0652, 0x064B, 0x0626, 0x064F, 0x064E, 0x0056, 0x064C,
   0x0058, 0x0650, 0x0643, 0x062C, 0x005C, 0x0686, 0x00D7, 0x0640,
   0x200D, 0x0634, 0x0630, 0x0632, 0x064A, 0x062B, 0x0628, 0x0644,
   0x0627, 0x0647, 0x062A, 0x0646, 0x0645, 0x067E, 0x062F, 0x062E,
   0x062D, 0x0636, 0x0642, 0x0633, 0x0641, 0x0639, 0x0631, 0x0635,
   0x0637, 0x063A, 0x0638, 0x007D, 0x007C, 0x007B, 0x007E ];


function changeLang() {
    if (lang == 0) {
    lang = 1;
    return true;
  }
  else {
    lang = 0;
    return true;
  }
}

function FKeyDown (txtFrm){
 var key = window.event.keyCode;
 if (key == 145){
    if (lang == 0) {
      lang = 1;
      return true;
    }
    else {
      lang = 0;
      return true;
    }

}
    
}
function FKeyPress(txtFrm) {
   var key = window.event.keyCode;

  if (key == 13) { window.event.keyCode = 13; return true; }
     if (key == 0x06cc) {   
        window.event.keyCode = 0x064a;
     }
            
   if (lang == 1) { // If Farsi
     if (key == 0x0020 && window.event.shiftKey) // Shift-space -> ZWNJ
       window.event.keyCode = 0x200C;
     else
       window.event.keyCode = farsikey[key - 0x0020];
     if (farsikey[key - 0x0020] == 92) {   
        window.event.keyCode = 0x0698;
     }
     if (farsikey[key - 0x0020] == 8205) {   
        window.event.keyCode = 0x067E;
     }
   }
   return true;
}
</script>

سپس در کنار فیلدهای دلخواه این کد رو اضافه کنید :

کد:
<IMG src="templates/fisubsilversh/images/fa.gif" style="CURSOR: hand" align="absbottom" onclick=change(username)>


یعنی اگر کد اصلیتون مثلا این باشه :

کد:
<tr>
<td width="45%" align="right" class="explaintitle">{L_USERNAME}:</td>
<td width="55%">
<input type="text" name="username" size="25" maxlength="40" value="{USERNAME}" class="post" onkeypress=FKeyPress(post); onkeydown=FKeyDown(post); onkeyup=storeCaret(this); onclick=storeCaret(this); onselect=storeCaret(this); /> 
</td>
</tr>


باید تبدیل بشه به این :

کد:
<tr>
<td width="45%" align="right" class="explaintitle">{L_USERNAME}:</td>
<td width="55%">
<input type="text" name="username" size="25" maxlength="40" value="{USERNAME}" class="post" onkeypress=FKeyPress(post); onkeydown=FKeyDown(post); onkeyup=storeCaret(this); onclick=storeCaret(this); onselect=storeCaret(this); /> 
<IMG src="templates/fisubsilversh/images/fa.gif" style="CURSOR: hand" align="absbottom" onclick=change(username)>
</td>
</tr>

فقط يادتون باشه كه فايل تصويري رو در آدرس مربوطه كپي كنيد
در اين مثال آدرس اين است : templates/fisubsilversh/images/fa.gif
كه شما بايد به آدرس خودتون تغييرش بديد

فايل تصويري رو هم براتون ميزارم

موفق باشید ...
 
  • Like
Reactions: s_p

Masoud1365

مدیر انجمن
آقا یه مشکل دیگه . من همین کاری که شما گفتید رو انجام دادم ولی وقتی که استفاده کردم برای کاربرهای عضو ارور میده ولی اگر به عنوان مهمان ازش استفاده کنی درست کار میکنه برای کاربرهای عضو زیر صفحه می نویسه
error on page
 

Hyper

Active Member
نمیدونم چرا !!

شاید در نصب اشتباهی شده باشه
اگر دوست دارید فایل رو برای من بفرستید تا براتون درستش کنم ...
 

ChaosTheory

New Member
سلام.من تمام فونتهای داخل اون فایل .css رو به Tahoma تغییر دادم.اما وقتی وارد فروم میشم هیچ تغییری نکرده.این هم آدرس فروم:

www.gam3dot.com/forums
 

4shir

Member
با سلام!
این اولین پست من بعد از تغییرات توئی مجید هست! خیلی خوب شده مخصوصا هایپر عزیز و مجید خیلی زحمت کشیدن در مورد مشکل شما دوست عزیز بسیاری از قالبها بخاطر سیستم قدیمیشون! هنوز از برخی فونتها رو از فایل overal_header.tpl می خونن شما باید این فایل رو هم باز کنید و فونتها رو به تاهوما تغییر بدید 25 قالب جدید رو فارسی کردم سرعت اینترنتم خوب بشه میزارم واسه دانلود
موفق باشید
ساسان
 

ChaosTheory

New Member
من اون فايل رو هم ديدم.اصلا کلمه اي به اسمه فونت يا arial يا ... نداره که به تاهوما تبديلش کنم.
 

جدیدترین ارسال ها

بالا