رد: [اعلان] تعريب RPGMaker VX وتدعيم اللغة العربية
اقتباس:
المشاركة الأصلية كتبت بواسطة PrinceOfSorrow
مرحبا اخ برنس..
ممكن انه نكتب في هذا السكربت لكن نحتاج الى تعديل النقاط الآتية:
1)تحويل ISO 8859-1 الى ISO 639-1 او غيرها لأن ISO 8859-1 لاتدعم العربية:(
للمزيد من المعلومات: اضغط هنا وهنا
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
رد: [اعلان] تعريب RPGMaker VX وتدعيم اللغة العربية
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
+
منتظر نتائج ^_______________^
وراح احاول اعدل واظبط
رد: [اعلان] تعريب RPGMaker VX وتدعيم اللغة العربية
محاولة تعديل مني.....
كود:
=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
رد: [اعلان] تعريب RPGMaker VX وتدعيم اللغة العربية
للأسف أخ برنس: هذا السكربت وإن عدلته فقط يظهر الحروف العربية لانه يشتغل على ملف Win32API فقط ويظهرها بشكل مقلوب: مثلاُ "هلا" تنكتب "ال ه". مما يعني انه غير مطلوب. ومعلومة اضافية: Win32API.dll موجود عليه UTF8 من قبل لان المستخدم يكتب ويقرأ عربي على الجهاز مسبقاً اذن لاحاجة لنا به
رد: [اعلان] تعريب RPGMaker VX وتدعيم اللغة العربية
رد: [اعلان] تعريب RPGMaker VX وتدعيم اللغة العربية
طلال 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 في قراءة النصوص حسب نظري ....
رد: [اعلان] تعريب RPGMaker VX وتدعيم اللغة العربية
الار بي جي ميكر يوزع الاحرف بالترتيب بجانب بعضها البعض لان اللغه الانجلزيه لا تقم بلصق الاحرف ببعضها.
والمشكله ليست في Window_Message بل في الـ"Super Class Window" حيث تعتمد عليها اسكربت Window_Base.
لكن لا يمكن الوصول الى اسكربت الـWindow من دون فك شفرت البرنامج (مما يجعل البرنامج غير شرعي)
حتى لو تم الوصول لها فحسب ما سمعت انها بالسي++ عندما سألت عنها
رد: [اعلان] تعريب RPGMaker VX وتدعيم اللغة العربية
اقتباس:
لكن لا يمكن الوصول الى اسكربت الـWindow من دون فك شفرت البرنامج (مما يجعل البرنامج غير شرعي)
حتى لو تم الوصول لها فحسب ما سمعت انها بالسي++ عندما سألت عنها
ممكن توضح قصدك ؟
بهاي نقطة ؟
هل قصدك RGSS202E ?
ام ماذا ؟
أم سكربت العادي ؟
رد: [اعلان] تعريب RPGMaker VX وتدعيم اللغة العربية
الموضوع يا أخواني مش بسيط
T_T >_<
انتوا نسيتوا شئ مهم الحروف تنكتب بالعكس يعني مثلا انا كتبت اسمي
ياسر
في البرنامج يظهر بالشكل ده
ر س ا ي
عندنا مشكلتين ازاي نلحم الحروف في بعضها و ازاي نخلي الكلام يظهر بالصيغة الصحيحة
رد: [اعلان] تعريب RPGMaker VX وتدعيم اللغة العربية
اقتباس:
المشاركة الأصلية كتبت بواسطة LordOfThunder
الموضوع يا أخواني مش بسيط
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 للمزيد من المعلومات :)
رد: [اعلان] تعريب RPGMaker VX وتدعيم اللغة العربية
اورداز الحين وش الخطوة القادمة؟
رد: [اعلان] تعريب RPGMaker VX وتدعيم اللغة العربية
الله الحكاية سهلة عايزين الار بي جي عربي انا هعمله عربي ولا وجع قلب
و ان شا الله ححط ال سكربت كمان شوية و الدليل على نجاخ السكربت حيكون في اللعبة بتاعتي خصوصا اني خلصت امتحانات و متفرغ 24 ساعة
يعني حا حلها حا حلها
مع السلامة
رد: [اعلان] تعريب RPGMaker VX وتدعيم اللغة العربية
اقتباس:
المشاركة الأصلية كتبت بواسطة CalmKiller
الله الحكاية سهلة عايزين الار بي جي عربي انا هعمله عربي ولا وجع قلب
و ان شا الله ححط ال سكربت كمان شوية و الدليل على نجاخ السكربت حيكون في اللعبة بتاعتي خصوصا اني خلصت امتحانات و متفرغ 24 ساعة
يعني حا حلها حا حلها
مع السلامة
والله من كلامك تعجبني فيك ثقتك من نفكس على رغم اني لم أرى أي سكربت من برمجتك حاليا
ويشرفنا تساعدنا لو كنت مهتم ^^
بس حط في بالك المسألة طلعت مش Encoding بالعافية
فالمسألة تحتاج تعديل كامل في Window_Message
بتوفيق وصح الموضوع مرحب لكل في المساعدة كما ذكر اخوي العزيز طلال ^___^
رد: [اعلان] تعريب RPGMaker VX وتدعيم اللغة العربية
اخواني ربنا عارف اني من ساعة ما حطيت الرد و انا عمال احاول اخليه عربي و مفيش غير حلين
الاول ان احنا نكتب عربي فابريكو :
مثال:
al slam 3aleikm , ana 7adad 3ayez ay haga ?
----------------------------
الثاني اني افك التشفير بتاع ملف الكور
و ده اللي انا شغال عليه
و ان شاء الله يكون الكتابة عربي صح
----------------------------