المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : [اعلان] تعريب RPGMaker VX وتدعيم اللغة العربية



Ordaz
21-06-2008, 03:59 PM
السلام عليكم ورحمة الله وبركاته.
بدأت من فترة قصيرة فكرة تعريب RPG Maker VX أي: جعله يدعم اللغة العربية -يكتبها- ويعطي نظام Messaging محسن شبيه بـRPG Maker XP Postality Knights.

المهم، النتيجة غير سيئة على مستوى Editor:
http://9o9i.com/download/520485cee07e9ac5.png

لكن في اللعب: نتيجة غير مقبولة:..
http://9o9i.com/download/367485cee082c369.png

ونتيجة اللعب: حاصلة اما من Window_Message في بيانات سكربت او ملف RGSS202E.dll في RTP.

المغزى من الموضوع هو ان نحصل على اكبر قدر من المساعدة في تصميم البرنامج بحيث ما يكون صانع البرنامج Ordaz بل اعضاء منتدى المنتدى كلهم ^_^

Ordaz

PrinceOfSorrow
21-06-2008, 04:10 PM
سلام عليكم ورحمة الله وبركاته
أي مساعدة عزيزي انا حاضر
واو !! بتكون اسطوري لو خليته يقرا العربية والأنجليزية بان واحد !!
^_______________________________^
وياليت يصدر اليوم قبل بكرة

PoKe Vx
21-06-2008, 04:11 PM
الف شكر
لكن راح تعرب البرنامج كامل ولا بس تخليه يكتب عربي

PrinceOfSorrow
21-06-2008, 04:20 PM
الف شكر
لكن راح تعرب البرنامج كامل ولا بس تخليه يكتب عربي

من عنوانه انه بخليه يدعم العربية حتى في لعب ^_______________^
Encoding

ديمو1
21-06-2008, 08:26 PM
رائع اخوي..بس انا عندي فكره ربما تنفع تذكر يوم عرض احد مثال يخلي الار بي جي اكس بي يدعم العربي عن طريق برنامج ابو رشيد ليش ماتنفذ نفس الطريقة لاكن بطريقة مختلفة:
في برنامج ابو رشيد يسار تكتب عربي وباليمين يتحول للكود الي يخليه عربي بالبرامج الي ماتدعم العربي ببساطه انا فكرتي نفس الطريقة بمعنى يوم يكتب بمحرر النصوص بالبرنامج VX يحول هو للكود مباشرة مثال اريد اكتب منتدى عندما اظغط على الزر ميم بلوحة المفاتيح يتحول مباشرة للكود وهكذا الطريقة صعبه قليلاً ولا اعتقد انها يمكن عملها

Karim Ghazal
21-06-2008, 08:49 PM
انا معكم أخي , و أنا أعدم هذه النقطة المهمة .. لكي يكون منتدانا أول منتدى يجعل الكتابة بالعربي مسموحة ... و بأنتظار أخر التطورات .. كريم .

Reid
22-06-2008, 12:05 AM
والله لو عندي خبرة شاركت في مساعدتك .. محتاجين هالتعريب كثير ><"
المشكلة أني اشتغل على لعبتي واللي بيلعبون فيها عرب فحلاته بالعربي
لكن ملاحظة هامة : يرجى اختيار خطوط واضحه كـ Tahoma لأن خط
Tahoma يدعم العربي سواء كان smooth أو بكسلي لأن خطوط
ابو رشيد غير واضحة وهذا اللي خلاني ما استعمله ^ ^

S.H.A.R.K
22-06-2008, 04:30 AM
طيب لو إن الموضوع بهذه الطريقة فالأفضل أن تجعل البرنامج يدعم العربية في الـ massage فقط لا أن تعربه تعريبا كاملا ... تصور مثلا أنك قمت بتعريب البرنامج ثم واجهتك مشكلة ,, إذا بحثت عنها وجدت حلها لكن بالإنجليزية !!
في هذه الحالات لا يكون التعريب مفيد خصوصا في تلك البرامج الغير منتشرة بكثرة في بلادنا والأفضل أن تكون على حالها وأنا أرى أن رأي ديمو1 هو الأفضل جرب برنامج أبو رشيد وأطلعنا على النتائج


ودمتم

PrinceOfSorrow
22-06-2008, 10:56 AM
برنامج بورشيد تم تجريبة وهو برنامج فاشل في تعريب يتطلب خطوط خاصة وايضا لايسمح بوضع حروف انجليزية ايضا
وللعلم يحتوي برنامج على ادوات ترقيم خاصة حيث يعتمد عليها برنامج بورشيد لظهور بعض أحرف عربية مما تجعل بعض حروف مختفية للأسف


\c[2]
\!
\n[2]
أما بخصوص كلام اخوي شارك انا معك أتمنى فقط بان يتم جعل البرنامج يدعم العربية دون تعريب القوائم حتى لاتصادف الأعضاء مشاكل أثناء أيجاد الدروس في المواقع الأخرى او عند قرائة ملفات المساعدة أحيانا.

PrinceOfSorrow
22-06-2008, 11:53 AM
Dll has been uploaded for you ORDAZ
=============================

rmvx_all_version_dll (http://www.zshare.net/download/14016176e348fce6/)

سامي.خ
22-06-2008, 01:36 PM
خلوني اخلص كم شغلة وراح اساعدكم في فك ضغط وتحرير ملفات DLL
والله لو يدرون عنكم اليابانين، يذبحونكم وياكلون لحمكم

Reid
22-06-2008, 05:35 PM
يا اخي لو تتسحب عيوني مثلهم بعد ما يقدرون يسوون شي
محد قالهم يخلون البرنامج بهذا الشكل المفروض يكون
مرن وقابل للتعديل على اللغة مثل الباقي .

مب مهم يتعرب البرنامج ككل الأهم المسجات الخاصة بحوار
الشخصيات ويكون الخط Tahoma ويدعم علامات الترقيم
والكتابة بالانجليزية في وقت واحد ^ ^

خلوها مفاجأة للصيف ^ . ^

PrinceOfSorrow
23-06-2008, 11:35 AM
Unpacked RGSS202E
ready to modifying
______________________________

_RGSS202E.DLL (http://www.zshare.net/download/14066273e0f22ad8/)

PrinceOfSorrow
23-06-2008, 05:32 PM
حاولت اعرب ووضعت كل حروف ولغة...
معتمدا على صيغها :

http://source.winehq.org/source/include/winnls.h?v=wine20000909

ولكن مازال لايقرأ العربية....

ممكن تجرب DLL
وتفتحها RESOURCE HACKER

RGSSQTR (http://www.zshare.net/download/14081990b7f6dbaa/)

PrinceOfSorrow
23-06-2008, 11:21 PM
مادري اعتقد انه هذا سكربت ممكن عن طريقة نكتب بالعربية
لو قمنا بتعديله بأذن الله تعالى :


=begin rdoc

= #027 Win32API インタプリタ

== 概要
Win32APIの機能を利用するスクリプトの共通モジュールです。共通する動作をこの
スクリプトにまとめて、機能の不具合の発生を最低限に抑える役割を果たします。

== 注記事項
* Win32API に依存します。動作するPCの機種によってごく稀に予測できない不具合が
生じる場合があります。
* 設定・動作の詳細は設定セクションの[設定・動作について]をご覧下さい。

== このスクリプトの情報
バージョン:: 2.0.1
対応:: RPGツクールXP, RPGツクールVX(共通)
配布元:: http://quiet-labs.net/s/027/
作成者:: ユミル ( mailto:info@quiet-labs.net )
挿入位置:: [VX / XP] 常に一番上に挿入してください
動作条件:: [VX / XP] 特になし

==サポート
* 不具合などがありましたら掲示板で報告していただければ幸いです。
* 設定や組み込みなどで不明な点が有れば掲示板にてお尋ね下さい。

== 更新履歴
[2.1.0]
更新 : 2008-04-02
* Windows の環境変数を取得するメソッドを追加。
[2.0.0]
更新 : 2007-12-29
* RPGツクールVX に対応。
* #023「文字列エンコード変換」を吸収し、仕様を変更。
* スクリプト全体の改良。
[1.0.1]
更新 : 2007-09-01
* DLL のファイル名に関するバグを修正。
* 一部のコメントを追記。
[1.0.0]
更新 : 2007-08-27
* 公開。
=end

# このサイトの名前空間。
module QuietLab
end

# このスクリプトの名前空間。
module QuietLab::Script_27

# このスクリプトのバージョンの日付表記。
Version = 2008_04_02
end

# Win32API を操作するモジュール。
module QuietLab::Win32API

@@apis = {}

module_function

# 呼び出されたメソッドが定義されていなかった時、インタプリタがこの
# メソッドを呼び出します。
def method_missing(name, *param)
return @@apis[name].call(*param) if @@apis[name]
super(name, *param)
rescue => exp
# バックトレースを調整するために例外を書き替え
exp.backtrace.shift
raise(exp.class, exp.message, exp.backtrace)
end

# API 関数を定義します。引数は Win32API.new と同じです。
def define_api(dllname, proc, import, export)
key = sprintf('%s_%s', dllname.split('.', 2)[0], proc).intern
return if @@apis[key]
@@apis[key] = Win32API.new(dllname, proc, import, export)
end

define_api('user32', 'FindWindow', 'pp', 'i')
define_api('kernel32', 'GetPrivateProfileString', 'pppplp', 'l')
define_api('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
define_api('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
define_api('kernel32', 'ExpandEnvironmentStrings', 'ppl', 'l')

# RGSS のバージョン情報を持つ配列を返します。
# [ 0 : DLL ファイル名, 1 : バージョン(長さ 3 の文字列), 2 : 言語( J/E ) ]
def version_data
buffer_size = 16
buffer = "\0" * buffer_size
size = kernel32_GetPrivateProfileString \
("Game", "Library", '', buffer, buffer_size, '.\\Game.ini')
buffer.delete!("\0")
buffer.match(/^RGSS(\w{3})([A-Z]).dll$/).to_a
end

# RGSS のバージョンを返します。返り値は Float です。
def rgss_version
version_data[1].to_i / 100.0
end

# RGSS の動作言語を返します。返り値は Symbol です。
def rgss_language
case version_data[2]
when 'E' : Language::English
when 'J' : Language::Japanese
end
end

# ゲームの名前を返します。文字列は Shift_JIS エンコードです。
def game_name_sj
buffer_size = 256
buffer = "\0" * buffer_size
size = kernel32_GetPrivateProfileString \
("Game", "Title", '', buffer, buffer_size, '.\\Game.ini')
buffer.delete("\0")
end

# ゲームの名前を返します。。
def game_name
convert_encoding(game_name_sj, Encoding::Shift_JIS, Encoding::Default)
end

# メインウィンドウのウィンドウハンドルを返します。
def get_window_handle
window_name = case rgss_version.to_i
when 1 : "RGSS Player"
when 2 : "RGSS2 Player"
end
user32_FindWindow(window_name, game_name)
end

# 文字列に含まれる環境変数の指定を、その値に置き換えます。
def get_env_string(format)
# フォーマットのパス中の / を \ に統一する
format = format.gsub(/\//, '\\')
# データの取得
buffer_size = 256
buffer = "\0" * buffer_size
kernel32_ExpandEnvironmentStrings(format, buffer, buffer_size)
buffer.delete!("\0")
buffer
end
end

# 言語定数を保持するモジュール。
module QuietLab::Win32API::Language
Japanese = :Japanese
English = :English
end

# エンコーディング定数を保持するモジュール。
module QuietLab::Win32API::Encoding
# UTF-8 のコードページ。
UTF_8 = 65001
# Shift_JIS ( MS932 ) のコードページ。
Shift_JIS = 932
# EUC-JP のコードページ。
EUC_JP = 20932
# iso-8859-1 のコードページ。(このエンコードは英文専用です)
ISO_8859_1 = 28591
# 現在の文字コードのコードページ。
Default = case $KCODE
when "UTF8" then UTF_8
when "EUC" then EUC_JP
when "SJIS" then Shift_JIS
else ISO_8859_1
end
end

# 全てのクラスから参照できるメソッドを定義しているモジュール。
module Kernel

module_function

# 文字コードを変換した結果を返します。
def convert_encoding(string, before, after)
wc2mb(after, mb2wc(before, string)).delete("\0")
end

# 指定したエンコードの文字列を Unicode 文字列に変換します。
def mb2wc(encode, string)
ucl = QuietLab::Win32API.kernel32_MultiByteToWideChar \
(encode, 0, string, -1, nil, 0)
uct = "\0" * (ucl * 2)
QuietLab::Win32API.kernel32_MultiByteToWideChar \
(encode, 0, string, -1, uct, ucl)
uct
end

# Unicode 文字列を指定したエンコードの文字列に変換します。
def wc2mb(encode, string)
mbl = QuietLab::Win32API.kernel32_WideCharToMultiByte \
(encode, 0, string, -1, nil, 0, nil, nil)
mbt = "\0" * mbl
QuietLab::Win32API.kernel32_WideCharToMultiByte \
(encode, 0, string, -1, mbt, mbl, nil, nil)
mbt
end
end

# QuietLab ScriptFormat v1.20

موقع :

http://quiet-labs.net/s/src.php?pid=27&amp...1&scv=2-1-0

Ordaz
24-06-2008, 09:38 PM
مادري اعتقد انه هذا سكربت ممكن عن طريقة نكتب بالعربية
لو قمنا بتعديله بأذن الله تعالى :


http://quiet-labs.net/s/src.php?pid=27&amp...1&scv=2-1-0


مرحبا اخ برنس..
ممكن انه نكتب في هذا السكربت لكن نحتاج الى تعديل النقاط الآتية:
1)تحويل ISO 8859-1 الى ISO 639-1 او غيرها لأن ISO 8859-1 لاتدعم العربية:(
للمزيد من المعلومات: اضغط هنا (http://en.wikipedia.org/wiki/ISO_8859-1) وهنا (http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)

2) تعديل هذه الاكواد وغيرها لإضافة العربية:
اولاً، من سطر 103 - 108

def rgss_language
case version_data[2]
when 'E' : Language::English
when 'J' : Language::Japanese
end
end

ثانياً، من سطر 146 - 171.

# 言語定数を保持するモジュール。
module QuietLab::Win32API::Language
Japanese = :Japanese
English = :English
end

# エンコーディング定数を保持するモジュール。
module QuietLab::Win32API::Encoding
# UTF-8 のコードページ。
UTF_8 = 65001
# Shift_JIS ( MS932 ) のコードページ。
Shift_JIS = 932
# EUC-JP のコードページ。
EUC_JP = 20932
# iso-8859-1 のコードページ。(このエンコードは英文専用です)
ISO_8859_1 = 28591
ISO_639 = 2
# 現在の文字コードのコードページ。
Default = case $KCODE
when "UTF8" then UTF_8
when "EUC" then EUC_JP
when "SJIS" then Shift_JIS
else ISO_8859_1
end
end

3) تغيير الـHeader الى الإنكليزية لفهم السكربت: وسيفعلها Google Translate مشكوراً ^_^


وإن شاء الله ينفع معانا :biggthump

PrinceOfSorrow
25-06-2008, 02:51 AM
sure ^^

عفوا الي حطيته نسخه قديمه تفضل هذه نسخة اساسية منه :


=begin rdoc

= #027 静寂の研究所 共通システムモジュール

== 概要
「静寂の研究所」で配布されるスクリプトに共通する機能をこのスクリプトにまとめ、
機能の不具合の発生を最低限に抑える役割を果たします。

このスクリプトは以下のような機能を含んでいます。
* Win32API に関する動作。Win32APIは、Windowsの機能を呼び出すために使用されます。
* ファイルに関する動作。データファイルの保存先などを設定します。

== 注記事項
* Win32API に依存します。動作するPCの機種によってごく稀に予測できない不具合が
生じる場合があります。
* 設定・動作の詳細は設定セクションの[設定・動作について]をご覧下さい。

== このスクリプトの情報
バージョン:: 3.0.0
対応:: RPGツクールVX(XP版は別途配布)
配布元:: http://quiet-labs.net/s/027/
作成者:: ユミル ( mailto:info@quiet-labs.net )
挿入位置:: [VX] 常に一番上に挿入してください
動作条件:: [VX] 特になし

==サポート
* 不具合などがありましたら掲示板で報告していただければ幸いです。
* 設定や組み込みなどで不明な点が有れば掲示板にてお尋ね下さい。

== 更新履歴
[3.0.0]
更新 : 2008-04-09
* RMVXの機能を有効に活用するため、RMXP/RMVX 共通版から切り離し、改名。
* #023「クリップボードデータ取得」を吸収し、仕様を変更。
* 文字列のエンコード動作を Win32API から NKF に移譲。(処理の高速化)
* 環境変数の取得処理を改良。
* 511 バイトまでの文字列を受け取れるように変更。
* パスの区切りを / に統一。(Ruby 標準の仕様に合わせるため)
* ファイル名に関する処理を追加。
* デフォルトのデータディレクトリを生成するように変更。
[2.1.0]
更新 : 2008-04-02
* Windows の環境変数を取得するメソッドを追加。
[2.0.0]
更新 : 2007-12-29
* RPGツクールVX に対応。
* #023「文字列エンコード変換」を吸収し、仕様を変更。
* スクリプト全体の改良。
=end

# このサイトの名前空間。
module QuietLab
end

# このスクリプトの名前空間。
module QuietLab::Script_27

# このスクリプトのバージョンの日付表記。
Version = 2008_04_02
end

# 言語定数を保持するモジュール。
module QuietLab::Language
Japanese = :Japanese
English = :English
end

# Win32API を操作するモジュール。
module QuietLab::Win32API
include QuietLab::Language

@@apis = {}

module_function

# API 関数を定義します。引数は Win32API.new と同じです。
def define_api(dllname, proc, import, export)
key = sprintf('%s_%s', dllname.split('.', 2)[0], proc).intern
return if @@apis[key]
@@apis[key] = Win32API.new(dllname, proc, import, export)
end

# 呼び出されたメソッドが定義されていなかった時、インタプリタがこの
# メソッドを呼び出します。
def method_missing(name, *param)
return @@apis[name].call(*param) if @@apis[name]
super(name, *param)
rescue => exp
# バックトレースを調整するために例外を書き替え
exp.backtrace.shift
raise(exp.class, exp.message, exp.backtrace)
end

define_api('user32', 'FindWindow', 'pp', 'i')
define_api('kernel32', 'GetPrivateProfileString', 'pppplp', 'l')
define_api('kernel32', 'ExpandEnvironmentStrings', 'ppl', 'l')

define_api('user32', 'OpenClipboard', 'i', 'i')
define_api('user32', 'CloseClipboard', '', 'i')
define_api('user32', 'GetClipboardData', 'i', 'i')
define_api('kernel32', 'GlobalLock', 'i', 'p')
define_api('kernel32', 'GlobalUnlock', 'i', 'i')

# Game.ini から指定された名前のデータを取得して返します。
def get_game_data(name)
buffer_size = 128
while buffer_size <= 512
buffer = "\0" * buffer_size
res = kernel32_GetPrivateProfileString \
("Game", name, '', buffer, buffer_size, '.\\Game.ini')
break if res < buffer_size
buffer_size += 128
end
buffer.delete!("\0")
buffer
end

# ゲームの名前を返します。
def game_name
convert_encoding(get_game_data("Title"))
end

# RGSS のバージョン情報を持つ配列を返します。
# [ 0 : DLL ファイル名, 1 : バージョン(長さ 3 の文字列), 2 : 言語( J/E ) ]
def version_data
get_game_data("Library").match(/^RGSS(\w{3})([A-Z]).dll$/).to_a
end

# RGSS のバージョンを返します。返り値は Float です。
def rgss_version
version_data[1].to_i / 100.0
end

# RGSS の動作言語を返します。返り値は Symbol です。
def rgss_language
case version_data[2]
when 'E' : English
when 'J' : Japanese
end
end

# メインウィンドウのウィンドウハンドルを返します。
def get_window_handle
window_name = case rgss_version.to_i
when 1 : "RGSS Player"
when 2 : "RGSS2 Player"
end
user32_FindWindow(window_name, game_name)
end

# 文字列に含まれる環境変数の指定を、その値に置き換えます。
def get_env_string(format)
format = format.gsub(/\//, '\\')
buffer_size = 128
while buffer_size <= 512
buffer = "\0" * buffer_size
res = kernel32_ExpandEnvironmentStrings(format, buffer, buffer_size)
break if res < buffer_size
buffer_size += 128
end
buffer.delete("\0").gsub(/\\/, '/')
end
end

# エンコーディング定数を保持するモジュール。
class QuietLab::Win32API::Encoding

attr_reader :name, :page, :nkfname

def initialize(name, page, nkfname)
@name = name
@page = page
@nkfname = nkfname
end

# UTF-8 のコードページ。
UTF_8 = self.new('UTF_8', 65001, 'w')

# Shift_JIS ( MS932 ) のコードページ。
Shift_JIS = self.new('Shift_JIS', 932, 's')

# EUC-JP のコードページ。
EUC_JP = self.new('EUC_JP', 20932, 'e')

# 現在の文字コードのコードページ。
Default = case $KCODE
when "UTF8" then UTF_8
when "EUC" then EUC_JP
when "SJIS" then Shift_JIS
end
end

# 全てのクラスから参照できるメソッドを定義しているモジュール。
module Kernel

# 文字コードを変換した結果を返します。
def convert_encoding(string, after = nil, before = nil)
dft = QuietLab::Win32API::Encoding::Default
cmd = '-' + (after ? after : dft).nkfname.downcase
cmd += before.nkfname.upcase if before
NKF.nkf(cmd, string)
end

# 文字列を Base64 エンコードして返します。
# ファイル名の制約を回避するために / を - に変換します。
def base64encode(string)
NKF.nkf('-MBW', string).gsub(/\//, '-')
end
end

# ファイル名を扱うモジュール。
module QuietLab::File
extend QuietLab::Win32API

BaseDirectory = get_env_string('%APPDATA%/RGSS/2.0/' +
base64encode(game_name) + '/')

module_function

# パスが存在するか一階層ずつ確認し、存在しなければ作成します。
# 正常に使用できる状態が確認された場合に正規化されたディレクトリ名を返します。
def check_dir(path)
dirname = ''
File.dirname(path).split(/\\|\//).each do |item|
next if item.empty?
dirname = dirname.empty? ? item : File.join(dirname, item)
next if FileTest.directory?(dirname)
Dir.mkdir(dirname)
end
return File.join(dirname, File.basename(path))
rescue
raise 'プログラム データディレクトリのチェックに失敗しました。'
end
end

# クリップボードを扱うモジュール。
module QuietLab::Clipboard
extend QuietLab::Win32API

module_function

# テキストを取得して返します。
def get
result = ""
if user32_OpenClipboard(0) != 0
if (h = user32_GetClipboardData(1)) != 0
if (p = kernel32_GlobalLock(h)) != 0
result = p
kernel32_GlobalUnlock(h)
end
end
user32_CloseClipboard
end
convert_encoding(result)
end
end

begin
QuietLab::File.check_dir(QuietLab::File::BaseDirectory)
end

# QuietLab ScriptFormat v1.20


+

منتظر نتائج ^_______________^
وراح احاول اعدل واظبط

PrinceOfSorrow
25-06-2008, 03:26 AM
محاولة تعديل مني.....


=begin rdoc

= #027 Win32API インタプリタ

== 概要
Win32APIの機能を利用するスクリプトの共通モジュールです。共通する動作をこの
スクリプトにまとめて、機能の不具合の発生を最低限に抑える役割を果たします。

== 注記事項
* Win32API に依存します。動作するPCの機種によってごく稀に予測できない不具合が
生じる場合があります。
* 設定・動作の詳細は設定セクションの[設定・動作について]をご覧下さい。

== このスクリプトの情報
バージョン:: 2.0.1
対応:: RPGツクールXP, RPGツクールVX(共通)
配布元:: http://quiet-labs.net/s/027/
作成者:: ユミル ( mailto:info@quiet-labs.net )
挿入位置:: [VX / XP] 常に一番上に挿入してください
動作条件:: [VX / XP] 特になし

==サポート
* 不具合などがありましたら掲示板で報告していただければ幸いです。
* 設定や組み込みなどで不明な点が有れば掲示板にてお尋ね下さい。

== 更新履歴
[2.1.0]
更新 : 2008-04-02
* Windows の環境変数を取得するメソッドを追加。
[2.0.0]
更新 : 2007-12-29
* RPGツクールVX に対応。
* #023「文字列エンコード変換」を吸収し、仕様を変更。
* スクリプト全体の改良。
[1.0.1]
更新 : 2007-09-01
* DLL のファイル名に関するバグを修正。
* 一部のコメントを追記。
[1.0.0]
更新 : 2007-08-27
* 公開。
=end

# このサイトの名前空間。
module QuietLab
end

# このスクリプトの名前空間。
module QuietLab::Script_27

# このスクリプトのバージョンの日付表記。
Version = 2008_04_02
end

# Win32API を操作するモジュール。
module QuietLab::Win32API

@@apis = {}

module_function

# 呼び出されたメソッドが定義されていなかった時、インタプリタがこの
# メソッドを呼び出します。
def method_missing(name, *param)
return @@apis[name].call(*param) if @@apis[name]
super(name, *param)
rescue => exp
# バックトレースを調整するために例外を書き替え
exp.backtrace.shift
raise(exp.class, exp.message, exp.backtrace)
end

# API 関数を定義します。引数は Win32API.new と同じです。
def define_api(dllname, proc, import, export)
key = sprintf('%s_%s', dllname.split('.', 2)[0], proc).intern
return if @@apis[key]
@@apis[key] = Win32API.new(dllname, proc, import, export)
end

define_api('user32', 'FindWindow', 'pp', 'i')
define_api('kernel32', 'GetPrivateProfileString', 'pppplp', 'l')
define_api('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
define_api('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
define_api('kernel32', 'ExpandEnvironmentStrings', 'ppl', 'l')

# RGSS のバージョン情報を持つ配列を返します。
# [ 0 : DLL ファイル名, 1 : バージョン(長さ 3 の文字列), 2 : 言語( J/E ) ]
def version_data
buffer_size = 16
buffer = "\0" * buffer_size
size = kernel32_GetPrivateProfileString \
("Game", "Library", '', buffer, buffer_size, '.\\Game.ini')
buffer.delete!("\0")
buffer.match(/^RGSS(\w{3})([A-Z]).dll$/).to_a
end

# RGSS のバージョンを返します。返り値は Float です。
def rgss_version
version_data[1].to_i / 100.0
end

# RGSS の動作言語を返します。返り値は Symbol です。
def rgss_language
case version_data[2]
when 'E' : Language::English
when 'J' : Language::Arabic
end
end

# ゲームの名前を返します。文字列は Shift_JIS エンコードです。
def game_name_sj
buffer_size = 256
buffer = "\0" * buffer_size
size = kernel32_GetPrivateProfileString \
("Game", "Title", '', buffer, buffer_size, '.\\Game.ini')
buffer.delete("\0")
end

# ゲームの名前を返します。。
def game_name
convert_encoding(game_name_sj, Encoding::Shift_JIS, Encoding::Default)
end

# メインウィンドウのウィンドウハンドルを返します。
def get_window_handle
window_name = case rgss_version.to_i
when 1 : "RGSS Player"
when 2 : "RGSS2 Player"
end
user32_FindWindow(window_name, game_name)
end

# 文字列に含まれる環境変数の指定を、その値に置き換えます。
def get_env_string(format)
# フォーマットのパス中の / を \ に統一する
format = format.gsub(/\//, '\\')
# データの取得
buffer_size = 256
buffer = "\0" * buffer_size
kernel32_ExpandEnvironmentStrings(format, buffer, buffer_size)
buffer.delete!("\0")
buffer
end
end

# 言語定数を保持するモジュール。
module QuietLab::Win32API::Language
Arabic = :Arabic
English = :English
end

# エンコーディング定数を保持するモジュール。
module QuietLab::Win32API::Encoding
# UTF-8 のコードページ。
UTF_8 = 65001
# Shift_JIS ( MS932 ) のコードページ。
ISO = 28596
# EUC-JP のコードページ。
ISO = 1256
# iso-8859-1 のコードページ。(このエンコードは英文専用です)
ISO_8859_1 = 28591
ISO_639 = 1
windows = 1256
# 現在の文字コードのコードページ。
Default = case $KCODE
when "UTF8" then UTF_8
when "Windows" then Windows
when "ISO" then ISO
else ISO_639_1
end
end

# 全てのクラスから参照できるメソッドを定義しているモジュール。
module Kernel

module_function

# 文字コードを変換した結果を返します。
def convert_encoding(string, before, after)
wc2mb(after, mb2wc(before, string)).delete("\0")
end

# 指定したエンコードの文字列を Unicode 文字列に変換します。
def mb2wc(encode, string)
ucl = QuietLab::Win32API.kernel32_MultiByteToWideChar \
(encode, 0, string, -1, nil, 0)
uct = "\0" * (ucl * 2)
QuietLab::Win32API.kernel32_MultiByteToWideChar \
(encode, 0, string, -1, uct, ucl)
uct
end

# Unicode 文字列を指定したエンコードの文字列に変換します。
def wc2mb(encode, string)
mbl = QuietLab::Win32API.kernel32_WideCharToMultiByte \
(encode, 0, string, -1, nil, 0, nil, nil)
mbt = "\0" * mbl
QuietLab::Win32API.kernel32_WideCharToMultiByte \
(encode, 0, string, -1, mbt, mbl, nil, nil)
mbt
end
end

# QuietLab ScriptFormat v1.20

Ordaz
25-06-2008, 08:03 PM
للأسف أخ برنس: هذا السكربت وإن عدلته فقط يظهر الحروف العربية لانه يشتغل على ملف Win32API فقط ويظهرها بشكل مقلوب: مثلاُ "هلا" تنكتب "ال ه". مما يعني انه غير مطلوب. ومعلومة اضافية: Win32API.dll موجود عليه UTF8 من قبل لان المستخدم يكتب ويقرأ عربي على الجهاز مسبقاً اذن لاحاجة لنا به

PoKe Vx
29-06-2008, 11:25 AM
يلا لاقو طريقة

PrinceOfSorrow
29-06-2008, 09:03 PM
طلال O__O
أحتمال تبين لي شي واحد فقط من بعد هاي سكربت الذي قمت بإنشائة
وهذا هو :


begin
Font.default_name = "Arabic Transparent"


Graphics.freeze
$kcode = "ISO-8869-6"
$encodings = "ISO-8869-6"
$scene = Scene_Title.new
$scene.main while $scene != nil
Graphics.transition(30)
rescue Errno::ENOENT
filename = $!.message.sub("No such file or directory - ", "")
print("Unable to find file #{filename}.")
end

يجب وضعه في Main

لكن أعتقد انه مشكلة RPG maker VX/XP ليست في Encoding ولكن في طريقة قرائته للحروف طالما تظهر الحروف هذا يعني انه يقبلها ولكن يحتاج لسكربت يجعله يعتمد على Win32api في قراءة النصوص حسب نظري ....

.AJ.
29-06-2008, 10:54 PM
الار بي جي ميكر يوزع الاحرف بالترتيب بجانب بعضها البعض لان اللغه الانجلزيه لا تقم بلصق الاحرف ببعضها.


والمشكله ليست في Window_Message بل في الـ"Super Class Window" حيث تعتمد عليها اسكربت Window_Base.


لكن لا يمكن الوصول الى اسكربت الـWindow من دون فك شفرت البرنامج (مما يجعل البرنامج غير شرعي)
حتى لو تم الوصول لها فحسب ما سمعت انها بالسي++ عندما سألت عنها

PrinceOfSorrow
29-06-2008, 11:15 PM
لكن لا يمكن الوصول الى اسكربت الـWindow من دون فك شفرت البرنامج (مما يجعل البرنامج غير شرعي)
حتى لو تم الوصول لها فحسب ما سمعت انها بالسي++ عندما سألت عنها

ممكن توضح قصدك ؟
بهاي نقطة ؟
هل قصدك RGSS202E ?
ام ماذا ؟

أم سكربت العادي ؟

Ordaz
30-06-2008, 12:02 PM
لكن لا يمكن الوصول الى اسكربت الـWindow من دون فك شفرت البرنامج (مما يجعل البرنامج غير شرعي)
حتى لو تم الوصول لها فحسب ما سمعت انها بالسي++ عندما سألت عنها
احم. من الواضح انه C++ مالها دخل تقريباً في RPG Maker كله. لأنه يستعمل ملف RGSS202E و RPGVXENU و السكربتات الي فيه وهي كلها بلغة Ruby. أخي C++ تستعمل فقط في Import Section في RGSS202E علشان عمل نافذة Window + تثبيت الـProcess في Task Manager فقط.
ارجع لبرنامج المساعدة في RPG Maker VX وافتح Features على حسب علمي + Window_Base يرسم فقط Draw_Text. للغة: نحتاج تعديلWindow_Message, Game_Interpreter و Game_Message والسكربتات اللي قلتهم ممكن الوصول اليها بدون فك شفرة ولا تركيب شفرة.

Kamuri-San
30-06-2008, 12:22 PM
الموضوع يا أخواني مش بسيط
T_T >_<
انتوا نسيتوا شئ مهم الحروف تنكتب بالعكس يعني مثلا انا كتبت اسمي
ياسر
في البرنامج يظهر بالشكل ده
ر س ا ي
عندنا مشكلتين ازاي نلحم الحروف في بعضها و ازاي نخلي الكلام يظهر بالصيغة الصحيحة

Ordaz
30-06-2008, 12:49 PM
الموضوع يا أخواني مش بسيط

T_T >_<
انتوا نسيتوا شئ مهم الحروف تنكتب بالعكس يعني مثلا انا كتبت اسمي
ياسر
في البرنامج يظهر بالشكل ده
ر س ا ي

عندنا مشكلتين ازاي نلحم الحروف في بعضها و ازاي نخلي الكلام يظهر بالصيغة الصحيحة

بالظبط. لأنه في Game Interpreter:



while @list[@index].code == 401 # Text data
$game_message.texts.push(@list[@index].parameters[0])
@index += 1

texts.push معناها حرف وراء حرف. مثل Window_Message:


c = @text.slice!(/./m) # Get next text character


اذن، من الطبيعي في RGSS2 انه يكتب لك طلال ل ا ل ط.
بس لاحظ انهم مو مفصولات بـSpace. يعني المشكلة كلها reverse > في RGSS2 Reference: اكتب reverse للمزيد من المعلومات :)

PoKe Vx
01-07-2008, 03:02 AM
اورداز الحين وش الخطوة القادمة؟

CalmKiller
01-07-2008, 03:14 PM
الله الحكاية سهلة عايزين الار بي جي عربي انا هعمله عربي ولا وجع قلب
و ان شا الله ححط ال سكربت كمان شوية و الدليل على نجاخ السكربت حيكون في اللعبة بتاعتي خصوصا اني خلصت امتحانات و متفرغ 24 ساعة
يعني حا حلها حا حلها
مع السلامة

PrinceOfSorrow
02-07-2008, 01:43 AM
الله الحكاية سهلة عايزين الار بي جي عربي انا هعمله عربي ولا وجع قلب
و ان شا الله ححط ال سكربت كمان شوية و الدليل على نجاخ السكربت حيكون في اللعبة بتاعتي خصوصا اني خلصت امتحانات و متفرغ 24 ساعة
يعني حا حلها حا حلها
مع السلامة



والله من كلامك تعجبني فيك ثقتك من نفكس على رغم اني لم أرى أي سكربت من برمجتك حاليا
ويشرفنا تساعدنا لو كنت مهتم ^^
بس حط في بالك المسألة طلعت مش Encoding بالعافية
فالمسألة تحتاج تعديل كامل في Window_Message
بتوفيق وصح الموضوع مرحب لكل في المساعدة كما ذكر اخوي العزيز طلال ^___^

CalmKiller
02-07-2008, 02:31 AM
اخواني ربنا عارف اني من ساعة ما حطيت الرد و انا عمال احاول اخليه عربي و مفيش غير حلين
الاول ان احنا نكتب عربي فابريكو :
مثال:
al slam 3aleikm , ana 7adad 3ayez ay haga ?
----------------------------
الثاني اني افك التشفير بتاع ملف الكور
و ده اللي انا شغال عليه
و ان شاء الله يكون الكتابة عربي صح
----------------------------

CalmKiller
02-07-2008, 02:54 AM
معلش على كتر الردوج بي واللهي انا مانمتش
احنا ممكن نعمل باتش للحروف و نقوم بادخال قاموس من حرفين بحيث ان كلمة طلال تتكتب طـلال
فعندما لا يجد البرنامج شكل الكتابة الذي يلجا اليه سيضطر ان يضع الحرف كما هو

PrinceOfSorrow
02-07-2008, 09:53 AM
الثاني اني افك التشفير بتاع ملف الكور
و ده اللي انا شغال عليه
و ان شاء الله يكون الكتابة عربي صحعزيزي احنا هكرنا عليه وفكيناه فك بالكامل ولكن ظهر انه ملف كان معمول C++ لتشغيل لعبة فقط وهو غير مسؤول عن الغة التي في لعبة لانها معتمده فقط على Ruby

نقطة ثانية لو فتحت معاي برنامج RPG maker وقرأت عن Characters راح يتبين لك كالتالي


RGSS SpecificationsCharacter Set

RGSS uses the UTF-8 character set. UTF-8 is a way of encoding Unicode, a character set that can display letters and characters from all the world's languages.
Ruby's built-in variable $KCODE (not included in this reference) is set to "UTF8" by default. RPGVX's script data and all other string data are also in UTF-8, so you don't have to worry about any encoding conflicts as you build your game.


مما يتبين انه البرنامج ماعنده اي مشكله في قراءة حروف العربية ودليل انها ظهرت ولكن نحتاج لسكربت بعدل أمور Window_Message والأشياء التي ذكرها Ordaz
ونظرية اخرى وهي أن نقوم بعمل سكربت جديد يجعل أعتماد النصوص على Win32api تماما
كما يعمل سكربت عرض الأفلام حيث جعل Ruby تدعم عروض AVI
ككل بتوفيق

Dragonarab
03-07-2008, 12:32 AM
مراحب, جرب هذا السكربت يدعم بعض اللغات يخلك تكتب بالنوت باد لحد علمي و يمكن يساعد انا حاولة وجربة أني
أغير و أصنع أوامر في window_msg أوامر مثل flip يعني يقلب الكلام بس ما نفع معاي

الوصلة: http://www.rpgrevolution.com/forums/?showtopic=9226

وبالتوفيق

CalmKiller
05-07-2008, 01:11 PM
جماعة انا تقريبا حليتها
====
دلوقتي انت عندك في السكربت بتاع Window_Message
Convert special character
ده يبحث عن كلمات معينة في الرسالة و يحوله الى حروف او كلمات اخرى
=====
عموما انا نزلت برنامج الفونت
عشان اعمل خط ادخل فيه حروف كاملة مثلا
حرف الكاف لو عايز توصله مع حرف تاني تكتب
كـ
و السكربت حيبحث عن الحرف ده لو لقاه موجود حيرجع لملف اللغة اللي انا عامله
و حيدور عن الحرف البديل

حرف كـ عبارة عن حرفين
اما في ملف اللغة
كـ ديه حرف واحد
عموما الفكرة مش بطالة
يعني لما تكتب احمد
اكتبها
احـمـد
و اللعبة ساعتها حاتقرئها احـمـد مش اح ـم ـد
بس لسه في مشكلة بتاعة الكلام اللي بيقرا من الشمال لليمين

PrinceOfSorrow
05-07-2008, 01:15 PM
مشكلة شمال لليمين بسيطة فيه سكربت اسمه Reverse ركز فقط على ان تكون حروف لاصقة ببعض ^^
أيضا لو كنت قصدك Alignment أيضا بسيط

Ordaz
05-07-2008, 09:37 PM
جماعة انا تقريبا حليتها
====
دلوقتي انت عندك في السكربت بتاع Window_Message
Convert special character
ده يبحث عن كلمات معينة في الرسالة و يحوله الى حروف او كلمات اخرى
=====


أخي Convert special characters بس موجودة للأوامر المكتوبة في المسج: مثل \! و \^ . وارجع لها عن def convert_special_characters في Window_Message ونغير text.gsub() الى اي شي آخر للزوم التعريب.
أما بخصوص الـAlignment ارجع لـ def update message.

CalmKiller
07-07-2008, 06:58 PM
اوكي انا الحكاية دي كده احتمال حتجيبلي صداع بس معاكم للاخر و لسه بدور على حل

Reid
03-08-2008, 11:45 PM
شباب شنو المستجدات عن موضوع التعريب ؟ ^ ^

Kunio-Kun
10-08-2008, 08:36 AM
في هذا الموضوع يقول انه ما عنده مشكلة في كتابة عربي لكن المشكلة في الانجليزي
http://www.rpgrevolution.com/forums/?showtopic=13066
http://img182.imageshack.us/img182/5481/arabicua6.png

PrinceOfSorrow
14-10-2008, 12:23 AM
http://www.espace.com.eg/blog/2008/09/18/raramorph-the-ruby-arabic-morphological-analyzer/


Raramorph
مطور من قبل مبرمجين مصريين حسب الي فهمته لع علاقة بجعل روبي تفهم نصوص العربية !!
قد يفيد

كونيو كون : هذا انا XD !!

Game baker
14-10-2008, 11:58 AM
أهلا
شكرا لاعادة نشاط الموضوع
هههههه
كنت عارف أنك أنت لأن الموضوع الي وضعته مرة نفس صور الي في المنتدى الانجليزي

احم احم المهم..
ممكن تجربه وتعطينا النتيجة

PoKe Vx
14-10-2008, 06:59 PM
:أفكر:الرد على المواضيع القديمة ممنوع:D:D:D

ننتظر الطريقة بفارغ الصبر

Karim Ghazal
08-12-2008, 07:55 PM
تم إضافة الموضوع إلى قسم المواضيع المُميزة !

Ordaz
09-12-2008, 05:18 PM
تم إضافة الموضوع إلى قسم المواضيع المُميزة !





شكراَ كريم ^__^

-----
بخصوص التعريب، عندي نبأ غير سار . وهو: إحنا متوهمين، لانه Ruby ما تدعم الرموز الموحدة Unicode (اللغات التي لا تستخدم نظام الكتابة اللاتيني، مثل العربية، العبرية، الروسية...إلخ)، لانها "محدودة".
س: واللغة اليابانية، مهي Unicode؟
ج : أكيد. بس الخط UmeGothic يسمح فيها.


فلذلك، "تدعيم اللغة العربية" رح يكون على طريقة بورشيد: الخط ولاشيء غير الخط!

S.N.I.P.E.R
14-01-2009, 05:38 AM
تسمحلى بإقتراح .. انت بتقول ان اللغه اليابانيه مدعومه بسبب دعم خط UmiGothic‏ لها .. اذا نستطيع التعديل على ملف الخط وحذف الحروف اليابانيه ووضع الحروف العربيه مكانها ويوجد برامج عديده لتعديل الخطوط لكن سنضطر للكتاب باليابانيه

Kunio-Kun
05-04-2009, 02:42 PM
ما الجديد الذي حصل في هذه الإعلان , هل تم الوصول إلى حل مشكلة اللغة العربية ؟؟؟

أرى أن البرنامج يدعم الأحرف العربية لكن لا يدعم الأحرف الخاصة اعتقد حل
هذه المشكلة هو إنشاء برنامج يقوم على معادلة الأحرف الخاصة وبهذه الطريقة
تحل مشكلة اللغة العربية .

PrinceOfSorrow
06-04-2009, 02:32 PM
ما الجديد الذي حصل في هذه الإعلان , هل تم الوصول إلى حل مشكلة اللغة العربية ؟؟؟

أرى أن البرنامج يدعم الأحرف العربية لكن لا يدعم الأحرف الخاصة اعتقد حل
هذه المشكلة هو إنشاء برنامج يقوم على معادلة الأحرف الخاصة وبهذه الطريقة
تحل مشكلة اللغة العربية .بالضبط !! مشكلة برنامج بورشيد انه حروفة ناقصة ولكن تبين لي أنه هناك برنامج تجاري
Arabic Text Editor يحتوي على حروف بورشيد وخطه افضل وتبين لي أنه ناقص الحروف وسبب
يرجع أنه لو أردنا جميع الحروف يجب الحصول عليه ودفع...

المهم هذه هي قضية أولى بالنسبة لدعم الأحرف العربية من ناحية الخط.

============

نقطة 2 :

البعض يريد أن تبدأ ظهور الحروف من يمين لليسار, ولحسن الحظ ارسلي شخص أجنبي سكربت قام بكتابتة
لهذا الغرض :


=begin
Arabic Reading Right to left

Author: Bulletxt
Version: 0.1
Date: 15/02/2009

=end


#==============================================================================
# ** Window_Message
#------------------------------------------------------------------------------
# This message window is used to display text.
#==============================================================================

class Window_Message < Window_Selectable

#--------------------------------------------------------------------------
# * Start Message
#--------------------------------------------------------------------------
def start_message
@text = ""
for i in 0...$game_message.texts.size
$game_message.texts[i].reverse!
@text += " " if i >= $game_message.choice_start
@text += $game_message.texts[i].clone + "\x00"
$game_message.texts[i].reverse!
end
@item_max = $game_message.choice_max
convert_special_characters
reset_window
new_page
end
#--------------------------------------------------------------------------
# * New Page
#--------------------------------------------------------------------------
def new_page
contents.clear
if $game_message.face_name.empty?
@contents_x = 512
else
name = $game_message.face_name
index = $game_message.face_index
draw_face(name, index, 416, 0)
@contents_x = 406
end
@contents_y = 0
@line_count = 0
@show_fast = false
@line_show_fast = false
@pause_skip = false
contents.font.color = text_color(0)
end
#--------------------------------------------------------------------------
# * New Line
#--------------------------------------------------------------------------
def new_line
if $game_message.face_name.empty?
@contents_x = 512
else
@contents_x = 406
end
@contents_y += WLH
@line_count += 1
@line_show_fast = false
end

#--------------------------------------------------------------------------
# * Update Message
#--------------------------------------------------------------------------
def update_message
loop do
c = @text.slice!(/./m) # Get next text character
case c
when nil # There is no text that must be drawn
finish_message # Finish update
break
when "\x00" # New line
new_line
if @line_count >= MAX_LINE # If line count is maximum
unless @text.empty? # If there is more
self.pause = true # Insert number input
break
end
end
when "\x01" # \C[n] (text character color change)
@text.sub!(/\[([0-9]+)\]/, "")
contents.font.color = text_color($1.to_i)
next
when "\x02" # \G (gold display)
@gold_window.refresh
@gold_window.open
when "\x03" # \. (wait 1/4 second)
@wait_count = 15
break
when "\x04" # \| (wait 1 second)
@wait_count = 60
break
when "\x05" # \! (Wait for input)
self.pause = true
break
when "\x06" # \> (Fast display ON)
@line_show_fast = true
when "\x07" # \< (Fast display OFF)
@line_show_fast = false
when "\x08" # \^ (No wait for input)
@pause_skip = true
else # Normal text character
c_width = contents.text_size(c).width
@contents_x -= c_width
contents.draw_text(@contents_x, @contents_y, 40, WLH, c)

end
break unless @show_fast or @line_show_fast
end
end

end


حقوق ترجع إلى bulletxt.

______________________________________________

Kunio-Kun
07-04-2009, 01:58 AM
بالضبط !! مشكلة برنامج بورشيد انه حروفة ناقصة ولكن تبين لي أنه هناك برنامج تجاري

يرجع أنه لو أردنا جميع الحروف يجب الحصول عليه ودفع...

المهم هذه هي قضية أولى بالنسبة لدعم الأحرف العربية من ناحية الخط.

============

Arabic Text Editor يحتوي على حروف بورشيد وخطه افضل وتبين لي أنه ناقص الحروف وسبب نقطة 2 :

البعض يريد أن تبدأ ظهور الحروف من يمين لليسار, ولحسن الحظ ارسلي شخص أجنبي سكربت قام بكتابتة
لهذا الغرض :




هممم أرى ذلك , لكن لا أتحدث عن برنامج ابورشيد. أقصد الأحرف الخاصة
لنا في حال استخدام برنامج بورشيد لا يمكن استخدام الأحرف الانجليزية معاً + يجب تحميل خطوط برنامج بورشيد = غير مقبول .

نعم لقد أعجبني السكربت قمت بتجربة وعملت لعبة يمكنك تحميلها و أيضاً مشكلة في السكربت
انه يعكس كل شي حتى الأحرف الانجليزية واعتقد هذه مشكلة اخرى ظهرت :). طبعاً لا اقصد من هذه اللعبة الدعاية ولكن
محاولة في إيجاد حل لهذه المشكلة.