Cache ทุกคำแปลของ Visual Novel Reader

เป็นวิธีแก้ไข Visual Novel Reader ให้สามารถ Cache คำแปลต่างๆ ที่แปลจาก Google Translator หรือ Bing Translator ได้ โดยตัว Visual Novel Reader นี้เป็น Open Source แต่ไม่มี Source Version Control อย่างพวก SVN หรือ Git (จริงๆ เข้าใจว่ามันใช้ Hg นะ มันคืออะไรไม่รู้เห็นตอน Update และเข้าใจว่าไม่เปิด public) ทำให้ไม่สามารถ pull request ได้ (ถึงทำได้ ก็ไม่ทำ code กาก 55+)

เป้าหมายที่อยากทำคือบางครั้งกลับมาเล่นเกมส์ซ้ำมันแปลไม่ได้ หรืออยากไป route อื่น แต่ข้อความมันซ้ำ ก็ไม่รู้จะต้องไปแปลอีกทำไม บางครั้งเน็ตกากก็รอไปเถอะ โดยปกติตัว Visual Novel Reader จะ Cache ไว้ประมาณ 10-20 คำล่าสุดอยู่แล้ว แต่ถ้าปิดโปรแกรมหาย เลยต้องปรับมันสักหน่อย

ข้อควรระวัง

  1. ไม่รับประกันผล เพราะถ้ามีความรู้ Programming ระดับนึงจะเห็นว่า ผมไปทำให้มัน Clear cache ไม่ได้ เพราะผมไม่ให้มันทำ
  2. ถ้า Ram น้อย อาจจะตายได้ ผมไม่รู้เหมือนกันว่ามันกินเท่าไหร่ แต่ผมกำหนดให้เก็บเรื่อยๆ ไม่มี clear ไม่มีตัด
  3. ผมเขียนให้ตังเองใช้ ดังนั้นขอไม่อธิบายเยอะนะครับ

ขั้นตอนการทำ

แก้ไฟล์ดังต่อไปนี้

  • Library\Frameworks\Sakura\py\apps\browser\managers\_trman.py
  • Library\Frameworks\Sakura\py\apps\reader\managers\_trman.py

(ถ้าเดาจากชื่อ แก้แค่อันล่างก็พอ ก็ได้)

หา class TranslationCache แล้วแทนที่ด้วย code ดังต่อไปนี้

import sqlite3
import rc
class TranslationCache:
  def __init__(self, maxSize=10000, shrinkSize=9000):
    """
    @param  maxSize  max data size
    @param  shrinkSize  data to delete when oversize
    """
    self.maxSize = maxSize
    self.shrinkSize = shrinkSize
    # {unicode text:[unicode sub, long timestamp]}
    self.conn = sqlite3.connect(rc.DIR_APP_CACHE+'/cache.db')
    self.prepare()


  def clear(self):
    pass # i don't want to clear 


  def get(self, key): # unicode -> unicode
    c = self.conn.cursor()
    c.execute('select translate from translations where original = ? limit 1', (key ,))
    r = c.fetchone()
    if r != None:
      c.execute('update translations SET timestamp = ? where original = ?', (self._now(), key ,))
      self.conn.commit()
      c.close()
      return r[0]
    else:
      c.close()


  def update(self, key, value): # unicode, unicode ->
    c = self.conn.cursor()
    c.execute('select translate from translations where original = ? limit 1', (key ,))
    r = c.fetchone()
    if r == None:
      c.execute('insert into translations (original, translate, timestamp) values (?,?,?)', (key ,value, self._now(), ))
      self.conn.commit()

    c.close()
    return value


  def prepare(self):
    c = self.conn.cursor()
    try:
      c.execute('select * from translations limit 1')
    except:
      c.execute('CREATE TABLE translations (original TEXT PRIMARY KEY, translate TEXT, timestamp INTEGER)')
      self.conn.commit()

    c.close()


  @staticmethod
  def _now(): return long(time()) # -> long  msecs


  def _shrink(self):
    pass
ด้านล่างตรงนี้เป็นของเก่า ไม่ใช้แล้ว

เพิ่ม Code นี้ไปแถวๆส่วนที่เค้า import กัน

import rc

หา class TranslationCache แล้วแทนที่ด้วย code ดังต่อไปนี้

class TranslationCache:
  def __init__(self, maxSize=10000, shrinkSize=9000):
    """
    @param  maxSize  max data size
    @param  shrinkSize  data to delete when oversize
    """
    self.maxSize = maxSize
    self.shrinkSize = shrinkSize
    self.data = {} # {unicode text:[unicode sub, long timestamp]}
    self.load()

  def clear(self):
    if self.data:
      self.data ={} # i don't want to clear 
      self.load()

  def get(self, key): # unicode -> unicode
    t = self.data.get(key)
    if t:
      t[1] = self._now()
      self.save()
      return t[0]

  def update(self, key, value): # unicode, unicode ->
    self.data[key] = [value, self._now()]
    #if len(self.data) > self.maxSize:
    #  self._shrink()
    self.save()
    #return value

  def save(self):
    f = open(rc.DIR_APP_CACHE+'/cache.dict','w+')
    f.truncate()
    f.write(str(self.data))
    f.close()

  def load(self):
  	try:
  	  f = open(rc.DIR_APP_CACHE+'/cache.dict','r+')
  	  self.data = eval(f.read())
  	  f.close()
	except:
  	  self.data = {}

  @staticmethod
  def _now(): return long(time()) # -> long  msecs

  def _shrink(self):
    l = sorted(self.data.iteritems(), key=lambda it:it[1][1])
    self.data = {k:v for k,v in l[self.shrinkSize:]}

ปิด Visual Novel Reader เปิดใหม่ ก็ได้แล้ว ต่อไปมันก็จะ cache ตลอดแล้ว

แนะนำโปรแกรม Kanji Tomo

Kanji Tomo คืออะไร

Kanji Tomo เป็นโปรแกรม OCR ประเภทหนึ่ง ความสามารถของมันคือจับภาพหน้าจอปัจจุบัน และยายามตรวจจับว่าตำแหน่งของเมาส์ที่เราชี้อยู่นั้นเป็นตัวอักษรญี่ปุ่นหรือไม่ และเป็นคำว่าอะไร (แค่คำนะ ไม่ถึงกับประโยค) ซึ่งช่วยให้เราสามารถพยายามแปลต่อไปได้ว่าคำนั้น หรือปุ่มนั้นคืออะไร

หากใครคุ้นกับ Visual Novel Reader (คืออะไร อ่านได้ที่นี่) มาคงจะทราบกันว่า หลายๆเกมส์มันแปลปุ่มไม่ได้ เพราะปุ่มมันดันเป็นภาพ ไม่ใช่ตัวอักษร โปรแกรมนี้ช่วยได้ในระดับนึง คือเอาตัวภาพมาพยายามแปลงเป็นตัวอักษร ในกรณีที่แปลงไม่ได้ทั้งหมด ก็ยังมีตัวช่วยให้เราพยายามหาคำต่อไปได้

วิธีติดตั้ง Kanji Tomo

  1. ก่อนอื่นต้องดาวโหลดก่อน โดยเข้าไปที่นี่ แล้วกด Download แล้วกดตัวหนังสือสีฟ้าๆที่เขียนว่า “can be downloaded here”
  2. เนื่องจากตัวโปรแกรมนั้นต้องการใช้ Java จึงจำเป็นต้องโหลดมาลงก่อน (มีแล้วข้ามไปเลย) สามารถดาวโหลดได้จากที่นี่  เข้าไปกด Download ตรง JDK กด Accept License Agreement แล้วก็กดโหลดตามเวอร์ชันที่ต้องการเลยครับ วิธีลงก็เปิดแล้วกด next รัวๆได้เลยครับ
  3. แตกไฟล์ตัว KanjiTomo.zip ออกมา
  4. เปิดตัว launch.bat ในการเปิดครั้งแรกต้องรอมันประมวลอะไรต่างๆสักพักนึง

วิธีใช้ Kanji Tomo

วิธีใช้ง่ายมากๆครับ แค่เปิดตัว Kanji Tomo ขึ้นมา จากนั้นเปิดเกมส์ที่ต้องการขึ้นมา แล้วเอาเมาส์ไปชี้ตรงคำที่ต้องการครับ จะได้ประมาณนี้ครับ
เปิด Kanji Tomo แล้วเอาเมาส์ชี้ใส่ในส่วนที่ต้องการแปลจะเห็นว่ามันสามารถแปลงภาพมาเป็นตัวอักษรได้ แล้วมี Dictionary ในตัวคอยแปลว่ามันหมายถึงอะไร ส่วนเรื่องที่มันแปลงภาพมาเป้นตัวอักษรได้มากน้อยแค่ไหนขึ้นอยู่กับหลายปัจจัย เช่นสีภาพกับสีพื้นหลังไม่กลืนกัน สีพื้นหลังเรียบหรือไม่เป็นต้น

ในกรณีที่มันดึงมาได้ไม่ครบเช่นมี 3 ตัวดึงมาได้ 2 ตัว ให้ลองกลับมาดูที่ตัวแปรแกรมครับ ที่มันมีอยู่ 4 ช่องคือตัวหนังสือแต่ละตัว ถ้ามันดึงมาได้ 3 ตัว ช่องที่ 3 จะมีเฉพาะตัวที่สามารถนำมาต่อแล้วประกอปเป็นคำได้ ที่เหลือก็ต้องใช้ตาเราดูแล้วว่ามันคือตัวไหนครับ

ความจริง Kanji Tomo มีอีกหลายอย่างให้เล่นลองเล่นดูได้ครับ เช่น Zoom เฉพาะส่วนที่ต้องการหรืออะไรประมาณนี้ครับ

วิธีทำให้เข้าสู่ระบบ WordPress ใน Domain และ SubDomain ในครั้งเดียว

เกริ่นปัญหา

ปัญหาของเรื่องนี้มาจากโพสนี้ครับ สรุปคือเค้าอยากได้ WordPress 2 ตัวที่ใช้ฐานข้อมูลผู้ใช้อันเดียวกัน และเข้าสู่ระบบที่นึง อีกที่จะเข้าสู่ระบบด้วย โดยหลังจากผมลองค้นหาดู พบว่าสามารถทำได้ แต่ทำได้ในระดับแค่ Sub Domain หรือ Sub Directory เท่านั้นนะครับ และ Database ต้องใช้ Database เดียวกัน (ผมเข้าใจว่าสามารถทำได้ถึงระดับที่อยู่คนละ Database แต่ต้องเป็นที่เดียวกันและใช้ Username/Password เหมือนกัน)

วิธีทำ

  1. ก่อนอื่นให้ลง WordPress ทั้ง 2 ที่แบบปกติให้เรียบร้อยก่อน (ถ้ามีแล้ว ข้ามไปครับ)
  2. ลง Plugins “WP-Orphanage Extended” ให้ WordPress ทั้ง 2 ตัว แล้วไปตั้งค่าใส่ prefix ให้เรียบร้อยครับ
  3. ทำการแก้ไข wp-config.php ของ WordPress ทุกตัวดังนี้ครับ
    <?php
    // แทน xxx ด้วยค่าเดิมนะครับ แต่ทุกไฟล์ที่เป็น wp-config.php ต้องเหมือนกันหมด
    define('AUTH_KEY', 'xxx');
    define('SECURE_AUTH_KEY', 'xxx');
    define('LOGGED_IN_KEY', 'xxx');
    define('NONCE_KEY', 'xxx');
    define('AUTH_SALT', 'xxx');
    define('SECURE_AUTH_SALT', 'xxx');
    define('LOGGED_IN_SALT', 'xxx');
    define('NONCE_SALT', 'xxx');
    
    // ตั้งค่า Cookie ให้ Login แล้วใช้ได้ทุก sub domain 
    // อย่าลิมแก้ .example.com เป็น domain ตัวเอง (ไม่ต้อง www)
    // อย่าลืมจุดหน้า domain มันสำคัญมาก ผมไม่ได้พิมพ์ผิด 
    define('COOKIE_DOMAIN', '.example.com'); 
    define('COOKIEPATH', '/');
    define('SITECOOKIEPATH', '/');
    define('PLUGINS_COOKIE_PATH', '/');
    define('ADMIN_COOKIE_PATH', '/');
    
    // ตั้งชื่อ Cookie ที่ใช้เวลา Login 
    define('AUTH_COOKIE','wordpress_auth_cookie');
    define('SECURE_AUTH_COOKIE','wordpress_auth_cookie');
    
    // บอกว่าจะใช้ User จากตารางไหน 
    define('CUSTOM_USER_TABLE','wp1_users');
    define('CUSTOM_USER_META_TABLE','wp1_usermeta');
  4. ทดสอบได้เลยครับ

ความเห็นส่วนตัว

จริงๆคิดว่าถ้าจะทำแบบนี้น่าจะทำเว็บเดียวแล้วแยก Category ของบทความน่าจะดีกว่า แล้วปรับ Theme เอา โดยใช้ Template Hierarchy หรือ Condition Tags ช่วยก็จะได้ 2 ส่วนที่หน้าตาไม่เหมือนกัน แต่ข้อมูลเหมือนกันแล้ว (ช่วยได้ระดับนึงนะ) หรือไม่ก็แยก Post Type ไเลยก็ได้ครับ

วิธีทำให้ WordPress ใช้ AMP ได้ + วิธีใส่โฆษณาในหน้า AMP

AMP คืออะไร

AMP หรือชื่อเต็มคือ Accelerated Mobile Pages เป็นมาตรฐานหน้าเว็บความเร็วสูงชนิดหนึ่ง ที่ประกาศใช้โดย Google เพื่อให้สามารถแสดงผลหน้าเว็บบนมือถือได้เร็วที่สุด โดยจะมีแท็กใหม่ๆที่ถูกประกาศออกมาโดย Google เอง และ HTML5 ปกติ เพื่อให้ได้ความเร็วสูงสุดในการเข้าถึงหน้าเว็บ โดยมีข้อกำหนดบางอย่างเพื่อให้หน้าเว็บเร็วขึ้น เช่น

  • การใช้รูปต้องมีการประกาศจองที่ว่ากว้างสูงเท่าไหร่ เพื่อให้ Browser จองที่ไว้ จะได้ไม่ต้องมีการ reflow บ่อยๆ
  • มีการบังคับว่าแท็ก script ทุกตัวต้องเป็น async เพื่อให้ผู้ใช้เห็นหน้าเว็บได้เลย ไม่ต้องรอโหลด script ก่อน
  • นอกจากนั้นหน้าเว็บ AMP จะจัดลำดับความสำคัญของการโหลดด้วยตัว AMP เอง เช่นบังคับให้โฆษณาโหลดหลังเนื้อหาเป็นต้น

เราจะใช้ AMP ได้อย่างไร

วิธีใช้ง่ายๆ

  1. ก่อนอื่นเข้าไปดูข้อกำหนดต่างๆ ในเว็บของ AMP  จากนั้นให้สร้างหน้าใหม่สำหรับเนื้อหาแต่ละหน้า โดยใช้ข้อกำหนดต่างๆในเว็บ AMP (มันมีเยอะ ผมไม่ขอพูดถึงนะครับ)
  2. หลังจากเราได้หน้าใหม่มาแล้ว ในหน้าเนื้อหาเก่า เพิ่ม code ส่วนนี้ลงใน head
    <link rel="amphtml" href="http://example.com/amp.html" />

    อย่าลืมแก้ URL เป็นหน้า AMP ที่สร้างสำหรับหน้านั้น เป็นอันเสร็จสิ้นครับ

วิธีใช้ AMP สำหรับ WordPress

จากวิธีด้านบน ยุ่งยากใช้ไหมครับ คำตอบใช่ครับ สำหรับท่านที่ใช้ WordPress เรามีวิธีที่ดีกว่ามานำเสนอ นั้นคือติกตั้ง Plugin AMP ซึ่งสามารถดาวโหลด Plugin AMP ได้โดยคลิกลิงครับ เสร็จแล้วก็ติดตั้งลง WordPress ให้เรียบร้อย ถ้ามี Cache ก็ clear cache ซำ เท่านี้ก็สามารถใช้งาน AMP ได้แล้วครับ สามารถทดสอบได้โดย สมมุติ URL เราเป็น

https://www.ishare.in.th/articles/วิธีทำให้-wordpress-ใช้-amp-ได้-วิธีใส่โฆษณาในหน้า-amp

เราก็เติม /amp ลงไปด้านหลัง มันจะแสดงหน้าเว็บฉบับ AMP ให้ (ใช้ได้บน Chrome เท่านั้นนะครับ ตัวอื่นอาจจะแสดงผลไม่สมบูรณ์ เช่นโฆษณาไม่แสดงเป็นต้น) จะได้เป็น

https://www.ishare.in.th/articles/วิธีทำให้-wordpress-ใช้-amp-ได้-วิธีใส่โฆษณาในหน้า-amp/amp

ต้องบอกว่า plugin ตัวนี้ จะแสดงหน้า AMP ที่มีแค่เนื้อหาโพสเท่านั้นนะครับ ไม่มีความเห็น หรือส่วนอื่นๆ เพราะมันไม่ตรงข้อกำหนดของ AMP

ถ้าต้องการใส่โฆษณาให้หน้า AMP ทำยังไง

สำหรับใครที่ใช้ WordPress สามารถทำตามนี้ได้เลยครับ (แนะนำควรมีความรู้ php html ละดับนึงนะครับ เพื่อเกิดปัญหาจะได้แก้ปัญหาเฉพาะหน้าได้ หรืออย่างน้อยๆควร backup ไว้ก่อนครับ) สำหรับใครที่ไม่ได้ใช้ WordPress ก็น่าจะสามารถเดาจากด้านล่างได้เลยครับ ไม่น่ายาก

  1. ให้แก้ไข functions.php ในโฟลเดอร์ theme ของเรา
  2. ให้เพิ่มโคดไปดังนี้ครับ ดังตัวอย่างอันนี้เป็นของ Google Adsense
    <?php
    function show_amp_ads(){
    ?>
    <div style="text-align:center">
    <amp-ad width=320 height=100
    type="adsense"
    data-ad-client="ca-pub-2132417031705165"
    data-ad-slot="6260362044">
    </amp-ad>
    </div>
    <?php
    }
    add_action( 'amp_post_template_footer', 'show_amp_ads' );

    (อย่าลืมแก้ตรง data-ad-client กับ data-ad-slot นะครับ ไม่งั้นเงินเข้าของผมหมดเลยนะ 55+)

หากต้องการใช้ Ads ตัวอื่นเช่น DoubleClick ให้ไปดูตัวอย่างจากที่นี่แล้วเอามาปรับครับ เช่นสมมุติของ DoubleClick จะเป็นประมาณนี้ครับ

<?php
function show_amp_ads(){
?>
<div style="text-align:center">
  <amp-ad width=320 height=50
      type="doubleclick"
      data-slot="/4119129/mobile_ad_banner"
      >
  </amp-ad>
</div>
<?php
}
add_action( 'amp_post_template_footer', 'show_amp_ads' );

จะเห็นว่าหลังจากใส่โคดลงไปจะเห็นว่ามีโฆษณาโผล่มาล่างสุดของหน้าเว็บแล้ว ถ้ามันไม่ขึ้นให้ลองดูผลสัก 2 – 3 วันนะครับ เพื่อให้ Bot Google เข้ามาเก็บข้อมูลไปหาว่าควรแสดงโฆษณาตัวใดดี

ข่าวร้ายสำหรับคนที่เดาโคดข้างต้นแล้วพยายามเปลี่ยนให้โฆษณาไปติดอยู่เหนือบทความ ขอบอกว่าแค่แก้ amp_post_template_footer เป็น amp_post_template_header ไม่ได้นะครับ เพราะมันไม่มี ผมลองแล้ว ถ้าอยากแก้ต้องไปแก้ที่ templates/single.php ที่อยู่ในโฟลเดอร์ plugin AMP ครับ

หากต้องการแก้ไขหน้า AMP เอง สามารถทำอย่างไรได้บ้าง

  1. คัดลอก templates/single.php ในโฟลเดอร์ plugin ไปไว้ที่ theme/amp/single.php
  2. เพิ่ม code ตรงนี้ลง functions.php
    <?php
    function my_amp_set_custom_template( $file, $type, $post ) {
        if ( 'single' === $type ) {
            $file = dirname( __FILE__ ) . '/amp/single.php';
        }
        return $file;
    }
    add_filter( 'amp_post_template_file', 'my_amp_set_custom_template', 10, 3 );
  3. แก้ amp/single.php ตามสะดวก แต่ต้องตรงมาตรฐาน AMP นะครับ จะใส่โฆษณาอะไรตรงไหนก็เต็มที่ครับ แต่ถ้าเยอะไปมันจะผิดวัตถุประสงค์ของ AMP นะครับ ระวังด้วย

แนะนำโปรแกรม Visual Novel Reader

Visual Novel Reader คืออะไร

Visual Novel Reader เป็นโปรแกรมที่ใช้สำหรับเพื่อเล่นเกมส์ประเภท Visual Novel (เกมส์ที่มีแต่ข้อความให้อ่าน + ภาพ CG เป็นหลัก บางเกมส์อาจจะแทรกมินิเกมส์อื่นๆพ่วงมาด้วย และส่วนมากเป็น H-Game) โดยตัวโปรแกรมนี้มีความสามารถคือดึง text จากเกมส์ออกมาแล้วส่งไปให้ Translator Service ต่างๆแปล และนำมาแสดงผลให้เราสามารถอ่านเนื้อเรื่องเกมส์พอเข้าใจได้

วิธีลง Visual Novel Reader

  1. ก่อนอื่นต้องมีโปรแกรม 7-Zip ก่อน (หรือโปรแกรมที่เปิด .7z ได้) ก็ไปดาวโหลดมาลงซะ เวลาดาวโหลดให้เลือกตัวที่เป็น .msi  ลงไม่ยากเปิดตัวลง กด Next รัวๆ
  2. ดาวโหลดตัว Visual Novel Reader จากลิงค์นี้ (UPDATE 2017-11-26 เจ้าของเลิกพัฒนาแล้ว แต่คิดว่ายังใช้ได้อยู่)
  3. หลังจากโหลดมาแล้วเราจะได้มาไฟล์นึง ให้แตกไฟล์นั้นออกครับ
    แตกไฟล์ Visual Novel Reader
  4. ให้เราเปิดตัว Visual Novel Reader.exe (ไม่บังคับ แต่ควรเปิดด้วยสิทธิ์ AdministratorsX
    เปิดตัว Visual Novel Reader.exe
  5. เมื่อเปิดแล้วจะได้หน้าตาแบบนี้ครับ
    หน้าตาของ Visual Novel Reader
  6. หลังจากขั้นนี้ไป จะทำหรือไม่ทำก็ได้ ไม่มีผลมากนัก ให้คลิกขวาตรงที่ว่างๆเลือก Preferences
    เข้า Preferences ของ Visual Novel Reader
  7. ปิดการเปลี่ยน Cursor ของ Mouse อัตโนมัติ ถ้าสังเกตจะเห็นว่าเมื่อเปิดโปรแกรมแล้ว Cursor จะเปลี่ยนไป ให้เลือกส่วนของ UI จากด้านขวา ให้เอาเครื่องหมายถูกออกตรง Customize mouse cursor และหากบางคนไม่อยากให้เปลี่ยน BG เวลาเลือกเกมส์ (ใช้ไปสักพักจะรู้ว่าคืออะไร) ให้เอาเครื่องหมายถูกออกตรง Automatically change wallpaper for different games
    ปิดการเปลี่ยน Cursor/Pointer อัตโนมัติ ใน Visual Novel Reader
  8. เลือกใช้ Google Translation Service แทน Bing Translation Service โดยเอาเครื่องหมายถูกที่ Microsoft Bing.com multilingual translation service ออก แล้วทำเครื่องหมายถูกที่ Google.com multilingual translation service แทน อันนี้แล้วแต่คนชอบว่าชอบใช้ Service ตัวไหนครับ ส่วนตัวผมชอบ Google Translate มากกว่า
    เลือก Translation Service ที่ต้องการให้ Visual Novel Reader ใช้
  9. ลง AppLocale (ไม่สำคัญมากนัก)

วิธีการใช้ Visual Novel Reader

  1. ก่อนอื่นเปิดเกมส์ที่เราต้องขึ้นมาก่อน จะเห็นว่าครั้งแรกนั้นพวก Font ต่างๆ จะไม่เป็นภาษาญี่ปุ่น (หรือภาษาตามต้นฉบับ) ให้เรารอสักพักแล้วปิดเกมส์ไปครับ
    เปิดเกมครั้งแรก font เสีย
  2. จากนั้นกลับไปดูที่โปรแกรม Visual Novel Reader จะเห็นว่ามีเกมส์ขึ้นมาบนกระดานแล้ว (ถ้ามันไม่แสดง ให้ลองกดเล่นเองนะครับ ด้านล่าง 2 ปุ่มแรก ที่รูปคล้ายๆจรวดกับแว่นขยาย จำไม่ได้ว่าปุ่มไหน คิดว่าไม่ยาก)
    Visual Novel Reader แสดงเกมส์ที่มันหาเจอ
  3. ให้ดับเบิ้ลคลิกที่เกมส์ เพื่อลองเปิดขึ้นมา ถ้า Font ไม่เสียก็ข้ามขั้นตอนี้ไปครับ แต่ถ้าเสียให้ปิดเกมส์ แล้วกดที่ตัวเกมส์ 1 ครั้งก่อนกด Edit ด้านล่างครับ
    กดที่ตัวเกมมศืแล้วกด Edit เพื่อเข้าหน้าแก้ไข
  4. ตรง Prefered Game Loader ให้เลือกภาษาของเกมส์ และตัวเลือกด้านล่าง ให้สลับไปเรื่อยๆ แล้วลองเปิดเกมส์ใหม่ (ต้องเปิดผ่าน Visual Novel Reader นะครับ ไม่งั้นมันไม่แก้ให้) เมื่อเลือกแล้วสามารถปิดหน้าต่างนี้ได้ทันที มันจะบันทึกให้อัตโนมัติ โดยส่วนตัวผมแนะนำให้เลือกตามลำดับต่อไปนี้คือ Default > NTLEA > AppLocale (ต้องลงก่อนดูวิธีลงได้ที่นี่) > LocaleSwitch > อื่นๆ
    ปรับ Option เพื่อเปิดเกมส์ด้วย Visual Novel Reader
  5. จะเห็นว่าคราวนี้ภาษาญี่ปุ่นถูกต้องแล้ว
    ภาษาแสดงได้อย่างถูกต้องแล้ว
  6. เมื่อเปิดเกมส์ รอสักพักเราจะเห็นเมนูสีฟ้าๆขึ้นมาที่ด้านซ้ายของเกมส์ ให้รอสักพักแล้วค่อบเริ่มเล่นเกมส์ตามปกติ (จะมีอะไรขึ้นมุมขวาเต็มไปหมด ปล่อยไปไม่ค่อยสำคัญ)
    เมื่อเปิดเกมส์ Visual Novel Reader จะเพิ่มเมนูสีฟ้าๆ ขึ้นด้านซ้ายของเกมส์
  7. เมื่อเรารอสักพักมันจะขึ้นตัวหนังสือที่มันถอดได้และคำแปลจาก Translation Service ที่เราเลือกไว้ขึ้นมา (สังเกตุด้านบน จะมีตัวหนังสือลอยขึ้นมา เหมือนข้อความในเกมส์ พร้อมคำแปล) เราสามารถเอาเมาส์ไปวางตรงตัวหนังสือที่ลอยขึ้นมาแล้วจะเห็นแถบเล็กๆลอยขึ้นมา สามารถกอที่แถบนั้นเพื่อเลื่อนคำแปลไปไว้ที่อื่นได้ครับ)
    Visual Novel Reader ถอดข้อความมาแปลให้เรียบร้อย

กรณีพิเศษ ข้อความไม่ขึ้น

ในบางเกมส์นั้น ตัว Visual Novel Reader เลือกข้อความไปแปลไม่ถูกต้อง เราสามารถตั้งค่าได้ดังนี้

  1. ตอนเปิดเกมส์จะมีแถบสีฟ้าๆขึ้น (ถ้าหายไปแล้วให้พับจอลง Task bar แล้วกดขึ้นมาใหม่ครับ) ให้คลิกขวาที่ Text เลือก Text Settings
    คลิกขวาที่ Text เลือก Text Settings
  2. จะมีหน้าต่างขึ้นมา อันนี้ให้อาศักความสามารถส่วนตัว ลองกดให้ข้อความเปลี่ยนแล้วดูว่าอันไหนที่มีข้อความเหมือนข้อความใหม่ที่แสดง ให้กดคำว่า dialog ตรงกล่องนั้นให้เป็นสีฟ้า อย่างของผมเลือกซ้ายบนสุด ก็กด dialog ของข้อความซ้ายบนสุด จากนั้นให้เรากด Save ก็จะได้แล้วครับ
    เลือก dialog ตรงส่วนของข้อความที่แสดงตรงกับตัวเกมส์

กรณีที่ไม่มีให้เลือก แสดงว่ามันไม่สามารถแกะข้อความมาได้ครับ ต้องไปหา Hook Code ของเกมส์นั้นมาใส่เอง ซึ่งแต่ละเกมส์ไม่เหมือนกันครับ + ผมไม่เก่งพอจะหา Hook Code ด้วย เลยไม่สามารถสอนได้ครับ