اسکریپت زیرنویس فارسی در Aegisub

در این پست به معرفی نرم‌افزار ویرایش فایل‌های زیرنویس فارسی پرداختیم، جهت سهولت ویرایش و اصلاح زیرنویس در نرم‌افزار قدرتمند Aegisub اسکریپت متن‌بازی تهیه شده است که در محیط این نرم‌افزار امکان ویرایش و اصلاح خودکار زیرنویس‌های فارسی به صورت مستقیم قابل استفاده است.

اسکریپت زیرنویس فارسی در Aegisub

امکانات:

  • اصلاح خودکار نمایش علائم نگارشی در متون فارسی و عربی
  • ایجاد خودکار پس‌زمینه شفاف برای زیرنویس
  • امکان تقسیم‌بندی خطوط طولانی از محل‌های خاص
  • ویرایش متون راست به چپ در محیط نرم‌افزار توسط ویرایشگر داخلی
  • افزودن کد به ابتدای خطوط انتخاب شده
  • درج متن به صورت خودکار به خطوط انتخاب شده
  • حذف خودکار شکست خطوط 
  • ...

 

پس‌زمینه شفاف برای زیرنویس

پس‌زمینه شفاف برای زیرنویس

 

ویرایشگر متون راست به چپ

ویرایشگر متنون راست به چپ

 

نحوه نصب اسکریپت:

  1. فایل اسکریپت را از اینجا دانلود کنید.
  2. فایل را از حالت فشرده خارج کرده و 2 فایل MasafAutomation.lua و utf8.lua را در مسیر 
    C:\Program Files\Aegisub\automation\autoload کپی کنید.
  3. نرم‌افزار Aegisub را اجرا کنید.
  4. ابزارها در منوی Automation قابل دسترس می‌باشند.

 

مخزن‌کد اسکریپت:

نرم‌افزار Subtitle RTL Corrector

یکی از بهترین نرم‌افزارها جهت تنظیم زیرنویس برای ویدئوها نرم‌افزار Aegisub است. این نرم‌افزار دارای امکانات بسیار زیادی جهت تنظیم دقیق زیرنویس برای ویدئوهاست که آن را از سایر نرم‌افزارهای مشابه متمایز می‌سازد.

تنها مشکلی که این نرم‌افزار دارد، عدم سازگاری کامل آن با زبان‌های راست به چپ نظیر فارسی و عربی است. یعنی علائم نگارشی زبان‌های راست به چپ در محیط این نرم‌افزار بعضاً درست نمایش داده نمی‌شود.

برای رفع این نقیصه نرم‌افزاری تهیه کرده‌ام که بصورت خودکار فایل‌های خروجی این نرم‌افزار را اصلاح کرده و علائم نگارشی پس از اصلاح در محیط نرم‌افزار به درستی نمایش داده می‌شوند.

 

 

ویژگی‌های نرم‌افزار:

  • اصلاح خودکار فایل‌های زیرنویس (.ass)
  • دارای ویرایشگر متنی جهت اصلاح متن و کپی کردن آن به حافظه موقت
  • افزودن کاراکتر RTL Embeding قبل از تمامی علائم نگارشی برای نمایش صحیح آنها در محیط نرم‌افزار Aegisub
  • محیط چند زبانه (فارسی و انگلیسی)
  • متن باز

 

آدرس دانلود نرم‌افزار:

دانلود نسخه اجرایی:

https://github.com/Majid110/SubtitleRtlCorrector/releases

آدرس مخزن کد:

https://github.com/Majid110/SubtitleRtlCorrector

 

کند اجرا شدن کوئری در Entity Framework و تغییر نوع پارامتر رشته‌ای در SQL نهایی

در Entity Framework بصورت پیش‌فرض متغیرهای string به پارامتری از نوع nvarchar(4000) در SQL تولید شده نهایی تبدیل می‌شود.

بعنوان مثال کوئری زیر را در نظر بگیرید:

using (var db = new SampleContext())
{
    var year = "1392";
    var query = from list in db.ListSend
                where list.AccountId == 2 && list.SendDate.Substring(1, 10) == year
                select list;
}

 

این کوئری به کد SQL زیر تبدیل خواهد شد:

exec sp_executesql N'SELECT 
	[Extent1].[AccountId] AS [AccountId],
	[Extent1].[SendDate] AS [SendDate]
	FROM [dbo].[ListSend] AS [Extent1]
	WHERE ([Extent1].[AccountId] = @p__linq__0) AND ((SUBSTRING([Extent1].[SendDate], 0 + 1, 4)) = @p__linq__1)
,N'@p__linq__0 int,@p__linq__1 nvarchar(4000)',@p__linq__0=2,@p__linq__1='1392'

اجرای این کوئری بر روی داده‌های با تعداد بالا گاهی تا حدود 30 ثانیه طول می‌کشد! علت اصلی این کند اجرا شدن به تبدیل نوع رشته‌ای متغیر SendDate به nvarchar برمی‌گردد. برای رفع این مشکل اگر نوع پارامتر SendDate به نوع varchar(8000) تبدیل شود این کوئری بدون تأخیر اجرا می‌شود.

 

تبدیل نوع پارامتر رشته‌ای در Entity Framework

بمنظور اینکه متغیر رشته‌ای در کوئری Entity Framework به نوع varchar(8000) تبدیل شود از کلاس EntityFunctions که در فضای نام  System.Data.Objects قرار دارد به شکل زیر استفاده می‌کنیم:

EntityFunctions.AsNonUnicode(year)

 

در نهایت کد ما به شکل زیر خواهد بود:

using (var db = new SampleContext())
{
    var year = "1392";
    var query = from list in db.ListSend
                where list.AccountId == 2 && list.SendDate.Substring(1, 10) == EntityFunctions.AsNonUnicode(year)
                select list;
}

 

خروجی SQL کوئری فوق بدین شکل خواهد بود:

exec sp_executesql N'SELECT 
	[Extent1].[AccountId] AS [AccountId],
	[Extent1].[SendDate] AS [SendDate]
	FROM [dbo].[ListSend] AS [Extent1]
	WHERE ([Extent1].[AccountId] = @p__linq__0) AND ((SUBSTRING([Extent1].[SendDate], 0 + 1, 4)) = @p__linq__1)
,N'@p__linq__0 int,@p__linq__1 varchar(8000)',@p__linq__0=2,@p__linq__1='1392'

 

خطای ProxyFactory حین استفاده از NHibernate

بعضی اوقات در هنگام کار با NHibernate استثناء زیر صادر می‌شود:

Could not load type 'NHibernate.Bytecode.ProxyFactoryFactoryNotConfiguredException' from assembly 'NHibernate, Version=3.3.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4'.
این استثناء زمانی رخ می‌دهد که شما از کتابخانه NHibernate Validator به همراه NHibernate استفاده می‌کنید.
برای رفع این مشکل ابتدا سورس این کتابخانه را از آدرس زیر دریافت نمایید:

پس از دریافت سورس پروژه آن را از حالت فشرده خارج کرده و سپس فایل پروژه را در ویژوال استودیو باز کرده و در صورت مغایرت نسخه‌ی کتابخانه NHibernate با نسخه‌ی که از آن استفاده می‌کنید، ارجاعاتی را که به اسمبلی NHibernate داده شده است را پیدا کرده و با نسخه مورد نظر جایگزین نمایید. (در زمان نگارش این مطلب آخرین نسخه، 3.3 می‌باشد)
سپس در پروژه NHibernate.Validator و در پوشه Util فایل NHibernateHelper.cs را بازکرده و متود IsProxyFactoryConfigurated را مطابق زیر تغییر دهید:
public static bool IsProxyFactoryConfigurated()
{
    try
    {
        var f = NHibernate.Cfg.Environment.BytecodeProvider.ProxyFactoryFactory;
        return f != null; //Instead of "return true;"
    }
    catch (UnableToLoadProxyFactoryFactoryException)
    {
        return false;
    }
}
حال پروژه را در ویژوال استودیو Build کرده و فایل NHibernate.Validator.dll تولید شده را با نمونه مشابه آن در پروژه‌تان تعویض نمایید.
 

مشکل عدم نمایش برخی سایت‌ها هنگام اتصال با ADSL

مدتی بود که برخی از سایت‌ها هنگام مرور اینترنت قابل مشاهده نبودند! بخاطر اتصال دیگر کامپیوترها در شبکه (workgroup) اتصال از طریق تنظیم نام کاربری و رمز عبور در خود مودم انجام می‌شد و همچنین کامپیوترها هم دارای IP ثابت بودند.
بعد از کلی سرو کله زدن با آن، متوجه شدم که این مشکل هنگامی که از طریق کانکشن به اینترنت متصل می‌شویم و یا کامپیوتر متصل شونده دارای IP پویا (Dynamic) می‌باشد رخ نمی‌دهد.

مشکل از کجا بود؟
مشکل از آنجا بود که موقع تنظیم IPهای سیستم‌ها و در قسمت DNS Server، شماره 4.2.2.4 را تنظیم کرده بودیم که آن را با IP خود مودم یعنی 192.168.1.1 جایگزین کردیم و مشکل حل شد

TCP/IP Properties