Giải pháp Free gõ tiếng Việt Telex,VNI,VIQR cho iPad

Thảo luận trong '[iOS] Hỏi đáp - CSKN' bắt đầu bởi thuannp, 10/5/10. Trả lời: 43, Xem: 62365.

Chia sẻ

  1. thuannp

    thuannp Thành viên

    Tham gia:
    20/1/08
    Được thích:
    154
    Thân chào

    Hiện tại theo tôi biết thì Ipad có 2 cách để gõ tiếng Việt:
    1 là sử dụng các phần mềm gõ TV mua trên itunes như .VN: nhược điểm là phải mất phí, phải mua tài khoản ...
    2 là bật một trang web có hỗ trợ gõ tiếng việt lên và type sau đó copy, paste. Nhược điểm là phải có mạng wifi thì mới làm được.

    Tôi rất trông đợi một bộ gõ tiếng việt tích hợp trực tiếp trên keyboard để anh em có thể type ngay tại từng ứng dụng, cái này thì phải chờ vietnamese developer thôi.

    Trong thời gian chờ đợi tôi đã tìm ra 1 phương pháp khắc phục được nhược điểm của 2 cách hiện tại. Đó là sử dụng js (javascript).

    Cách thức thực hiện như sau:
    1. Copy toàn bộ đoạn code dưới đây vào Notepad, save lại thành file Unikey.htm (lưu ý khi save phần Save as type chọn All Type)
    2. Sync file này vào Ipad qua các phần mềm hỗ trợ đọc htm. Tôi đã test ok trên ReaddleDocs và GoodReader.
    3. Mở file này ra và gõ tiếng việt rất chuẩn. Gõ xong thì copy và paste thôi.

    Tôi đã thử làm 1 button Select All và Copy All để copy nhanh nội dung bằng javascript nhưng chạy trên IE ở win7 thì OK, FF cũng ok nhưng đưa vào ipad thì ko hoạt động được. Bro nào thạo js thử nghiên cứu cùng tôi để phát triển ứng dụng này.

    Ngoài ra tôi cũng đang tìm cách mở ứng dụng này bằng safari nhưng cũng chưa thành công. Nếu mở được thì sử dụng kèm với 1 app browser hỗ trợ 2 cửa sổ web là có thể type và paste khá dễ dàng. Hy vọng bro nào đó tiếp tục nghiên cứu theo hướng này và share cho ae

    Bắt đầu copy từ đây:

    Lưu ý: đã có bản cập nhật cho phép gõ tiếng việt telex, vni và viqr, xin xem bài của tôi ở trang 3


    Code:
    
    <html>
    
    <head>
    <meta name="GENERATOR" content="Microsoft FrontPage 5.0">
    <meta name="ProgId" content="FrontPage.Editor.Document">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Unikey</title>
    </head>
    
    <body onload="setTypingMode(1);" bgcolor="#FFFFCC">
    
    <form name="myform" id="myform">
    <textarea name="holdtext" id="holdtext" rows="38" cols="66" style="font-family:Arial; font-size:25px;" onKeyUp="initTyper(this);"></textarea>
    </form>
    
    
    <script language="JavaScript1.2" type="text/javascript">
    var supported = (document.all || document.getElementById);
    var disabled = false;
    var charmapid = 1;
    var keymodeid = 0;
    var linebreak = 0;
    var theTyper = null;
    
    reset = function(){}
    initTyper = telexingVietUC;
    
    function setTypingMode(mode) {
      keymodeid = mode;
      if (theTyper) theTyper.keymode= initKeys();
      if (!supported && !disabled) {
        alert("Xin loi, trinh duyet web cua ban khong cho phep dung VietTyping.\n");
        disabled = true;
      }
    }
    
    initCharMap = function() { return new CVietUniCodeMap(); }
    
    initKeys = function() {
      switch (keymodeid) {
        case 1: return new CTelexKeys();
        case 2: return new CVniKeys();
        case 3: return new CViqrKeys();
        case 4: return new CAllKeys();
        default: return new CVKOff();
      }
    }
    
    function telexingVietUC (txtarea) {
      txtarea.vietarea= true;
      txtarea.onkeyup= null;
      if (!supported) return;
      txtarea.onkeypress= vietTyping;
      txtarea.getCurrentWord= getCurrentWord;
      txtarea.replaceWord= replaceWord;
      txtarea.onkeydown= onKeyDown;
      txtarea.onmousedown= onMouseDown;
      if(!theTyper) theTyper = new CVietString("");
    }
    
    function getEvt(evt) {
      if (typeof(evt)=='string') return evt.charCodeAt(0);
      return document.all? event.keyCode: (evt && evt.which)? evt.which: 0;
    }
    
    function onKeyDown(evt) {
      var c= getEvt(evt);
      if ((c==10) || (c==13)) { reset(1); linebreak= 1; }
      else if ((c<49) && (c!=16) && (c!=20)) { linebreak= 0; reset(c==32); }
      return true;
    }
    
    function onMouseDown(evt) { reset(0); linebreak= 0; return true; }
    
    function vietTyping(evt) {
      var c= getEvt(evt);
      theTyper.value= this.getCurrentWord();
      var changed= ((c>32) && theTyper.typing(c));
      if (changed) this.replaceWord(theTyper.value);
      return !changed;
    }
    
    function getCurrentWord() {
      if(!document.all) return this.value;
      var caret = this.document.selection.createRange();
      if (caret.text) return null;
      var backward = -10;
      do {
        var caret2 = caret.duplicate();
        caret2.moveStart("character", backward++);
      } while (caret2.parentElement() != this && backward <0);
      this.curword = caret2.duplicate();
      return caret2.text;
    }
    
    function replaceWord(newword) {
      if(!document.all) { this.value= newword; return; }
      this.curword.text = newword;
      this.curword.collapse(false);
    }
    // end interface
    
    
    // "class": CVietString
    //
    function CVietString(str) {
      this.value= str;
      this.keymode= initKeys();
      this.charmap= initCharMap();
      this.ctrlchar= '-';
      this.changed= 0;
    
      this.typing= typing;
      this.Compose= Compose;
      this.Correct= Correct;
      this.findCharToChange= findCharToChange;
      return this;
    }
    
    function typing(ctrl) {
      this.changed = 0;
      this.ctrlchar = String.fromCharCode(ctrl);
      if (linebreak) linebreak= 0; else this.keymode.getAction(this);
      this.Correct();
      return this.changed;
    }
    
    function Compose(type) {
      if(!this.value) return;
      var info = this.findCharToChange(type);
      if (!info || !info[0]) return;
      var telex;
      if (info[0]=='\\') telex= [1,this.ctrlchar,1];
      else if (type>6) telex= this.charmap.getAEOWD(info[0], type, info[3]);
      else telex= this.charmap.getDau(info[0], type);
      if (!(this.changed = telex[0])) return;
      this.value = this.value.replaceAt(info[1],telex[1],info[2]);
      if (!telex[2]) { spellerror= 1; this.value+= this.ctrlchar; }
    }
    
    function Correct() {
      if (this.charmap.maxchrlen || !document.all) return 0;
      var tmp= this.value;
      if ('nNcC'.indexOf(this.ctrlchar)>=0) tmp+= this.ctrlchar;
      var er= /[^\x01-\x7f](hn|hc|gn)$/i.exec(tmp);
      if (er) {
        this.value= tmp.substring(0,tmp.length-2)+er[1].charAt(1)+er[1].charAt(0);
        this.changed= 1;
      }
      else if(!this.changed) return 0;
      er= /\w([^\x01-\x7f])(\w*)([^\x01-\x7f])\S*$/.exec(this.value);
      if (!er) return 0;
      var i= this.charmap.isVowel(er[1]);
      var ri= (i-1)%24 + 1, ci= (i-ri)/24;
      var i2= this.charmap.isVowel(er[3]);
      if (!ci || !i2) return 0;
      var ri2= (i2-1)%24 + 1, ci2= (i2-ri2)/24;
      var nc= this.charmap.charAt(ri)+ er[2]+ this.charmap.charAt(ci*24+ri2);
      this.value= this.value.replace(new RegExp(er[1]+er[2]+er[3],'g'), nc);
    }
    
    function findCharToChange(type) {
      var lastchars= this.charmap.lastCharsOf(this.value, 5);
      var i= 0, c=lastchars[0][0], chr=0;
      if (c=='\\') return [c,this.value.length-1,1];
      if (type==15) while (!(chr=this.charmap.isVD(c))) {
        if ((c < 'A') || (i>=4) || !(c=lastchars[++i][0])) return null;
      }
      else while( "cghmnptCGHMNPT".indexOf(c)>=0) {
        if ((c < 'A') || (i>=2) || !(c=lastchars[++i][0])) return null;
      }
      c = lastchars[0][0].toLowerCase();
      var pc = lastchars[1][0].toLowerCase();
      var ppc = lastchars[2][0].toLowerCase();
      if (i==0 && type!=15) {
        if ( (chr=this.charmap.isVowel(lastchars[1][0]))
          && ("uyoia".indexOf(c)>=0) && !this.charmap.isUO(pc,c)
          && !((pc=='o' && c=='a') || (pc=='u' && c=='y'))
          && !((ppc=='q' && pc=='u') || (ppc=='g' && pc=='i')) ) ++i;
        if (c=='a' && (type==9 || type==7)) i= 0;
      }
      c= lastchars[i][0];
      if ((i==0 || chr==0) && type!=15) chr= this.charmap.isVowel(c);
      if (!chr) return null;
      var clen= lastchars[i][1], isuo=0;
      if ((i>0) && (type==7 || type==8 || type==11)) {
        isuo=this.charmap.isUO(lastchars[i+1][0],c);
        if (isuo) { chr=isuo; clen+=lastchars[++i][1]; isuo=1; }
      }
      var pos= this.value.length;
      for (var j=0; j<= i; j++) pos -= lastchars[j][1];
      return [chr, pos, clen, isuo];
    }
    // end CVietString
    
    
    // character-map template
    //
    function CVietCharMap(){
      this.vietchars = null;
      this.length = 149;
      this.chr_cache = new Array(20);
      this.ind_cache = new Array(20);
      this.cptr = 0;
      this.caching= function(chr, ind) {
        this.chr_cache[this.cptr] = chr;
        this.ind_cache[this.cptr++] = ind;
        this.cptr %= 20;
      }
      return this;
    }
    
    CVietCharMap.prototype.charAt= function(ind){
      var chrcode = this.vietchars[ind];
      return chrcode ? String.fromCharCode(chrcode) : null;
    }
    
    CVietCharMap.prototype.isVowel= function(chr){
      var i = 0;
      while ((i<20) && (chr != this.chr_cache[i])) ++i;
      if (i<20) return this.ind_cache[i];
    
      i = this.length-5;
      while ((chr != this.charAt(i)) && i) --i;
      this.caching(chr, i);
      return i;
    }
    
    CVietCharMap.prototype.isVD= function (chr){
      var ind = this.length-5;
      while ((chr != this.charAt(ind)) && (ind < this.length)) ++ind;
      return (ind<this.length)? ind: 0;
    }
    
    CVietCharMap.prototype.isUO= function (c1, c2){
      if (!c1 || !c2) return 0;
      var ind1 = this.isVowel(c1);
      var ci = (ind1-1)%12;
      if ((ci!=9) && (ci!=10)) return 0;
      var ind2 = this.isVowel(c2);
      ci = (ind2-1)%12;
      if ((ci!=6) && (ci!=7) && (ci!=8)) return 0;
      return [ind1,ind2];
    }
    
    CVietCharMap.prototype.getDau= function (ind, type){
      var accented= (ind < 25)? 0: 1;
      var ind_i= (ind-1) % 24 +1;
      var charset= (type == 6)? 0 : type;
      if ((type== 6) && !accented) return [0];
      var newind= charset*24 + ind_i;
      if (newind == ind) newind= ind_i;
      var chr= this.charAt(newind);
      if (!chr) chr= this.lowerCaseOf(0,newind);
      return [1, chr, newind>24 || type==6];
    }
    
    var map=[
    [7,7,7,8,8, 8,9,10,11,15],
    [0,3,6,0,6, 9,0, 3, 6, 0],
    [1,4,7,2,8,10,1, 4, 7, 1]
    ];
    CVietCharMap.prototype.getAEOWD= function(ind, type, isuo) {
      var c=0, i1=isuo? ind[0]: ind;
      var vc1= (type==15)? (i1-1)%2 : (i1-1)%12;
      if (isuo) {
        var base= ind[1]-(ind[1]-1)%12;
        if (type==7 || type==11) c= this.charAt(i1-vc1+9)+this.charAt(base+7);
        else if (type==8) c= this.charAt(i1-vc1+10)+this.charAt(base+8);
        return [c!=0, c, 1];
      }
      var i= -1, shift= 0, del= 0;
      while (shift==0 && ++i<map[0].length) {
        if (map[0][i]==type) {
          if(map[1][i]==vc1) shift= map[2][i]-vc1;
          else if(map[2][i]==vc1) shift= map[1][i]-vc1;
        }
      }
      if (shift==0) {
        if (type==7 && (vc1==2 || vc1==8)) shift=-1;
        else if ((type==9 && vc1==2) || (type==11 && vc1==8)) shift=-1;
        else if (type==8 && (vc1==1 || vc1==7)) shift=1;
        del= 1;
      } else del=(shift>0);
      i1 += shift;
      var chr= this.charAt(i1);
      if (i1<145) this.caching(chr, i1);
      if (!chr) chr= this.lowerCaseOf(0, i1);
      return [shift!=0, chr, del];
    }
    
    CVietCharMap.prototype.lastCharsOf= function(str, num){
      if (!num) return [str.charAt(str.length-1),1];
      var vchars = new Array(num);
      for (var i=0; i< num; i++) { vchars[i]= [str.charAt(str.length-i-1),1]; }
      return vchars;
    }
    // end CVietCharMap prototype
    
    
    String.prototype.replaceAt= function(i,newchr,clen){
      return this.substring(0,i)+ newchr + this.substring(i+clen);
    }
    
    // output map: class CVietUniCodeMap
    //
    function CVietUniCodeMap(){ var map= new CVietCharMap();
    map.vietchars = new Array(
    "UNICODE",
    97, 226, 259, 101, 234, 105, 111, 244, 417, 117, 432, 121,
    65, 194, 258, 69, 202, 73, 79, 212, 416, 85, 431, 89,
    225, 7845, 7855, 233, 7871, 237, 243, 7889, 7899, 250, 7913, 253,
    193, 7844, 7854, 201, 7870, 205, 211, 7888, 7898, 218, 7912, 221,
    224, 7847, 7857, 232, 7873, 236, 242, 7891, 7901, 249, 7915, 7923,
    192, 7846, 7856, 200, 7872, 204, 210, 7890, 7900, 217, 7914, 7922,
    7841, 7853, 7863, 7865, 7879, 7883, 7885, 7897, 7907, 7909, 7921, 7925,
    7840, 7852, 7862, 7864, 7878, 7882, 7884, 7896, 7906, 7908, 7920, 7924,
    7843, 7849, 7859, 7867, 7875, 7881, 7887, 7893, 7903, 7911, 7917, 7927,
    7842, 7848, 7858, 7866, 7874, 7880, 7886, 7892, 7902, 7910, 7916, 7926,
    227, 7851, 7861, 7869, 7877, 297, 245, 7895, 7905, 361, 7919, 7929,
    195, 7850, 7860, 7868, 7876, 296, 213, 7894, 7904, 360, 7918, 7928,
    100, 273, 68, 272);
    return map;
    }
    
    // input methods: class C...Keys
    function CVietKeys() {
      this.getAction= function(typer){
        var i= this.keys.indexOf(typer.ctrlchar.toLowerCase());
        if(i>=0) typer.Compose(this.actions[i]);
      }
      return this;
    }
    
    function CVKOff() {
      this.off = true;
      this.getAction= function(){};
      return this;
    }
    
    function CTelexKeys() {
      var k= new CVietKeys();
      k.keys= "sfjrxzaeowd";
      k.actions= [1,2,3,4,5,6,9,10,11,8,15];
      k.istelex= true;
      return k;
    }
    
    function CVniKeys() {
      var k= new CVietKeys();
      k.keys= "0123456789";
      k.actions= [6,1,2,4,5,3,7,8,8,15];
      return k;
    }
    
    function CViqrKeys() {
      var k= new CVietKeys();
      k.keys= "\xB4/'\u2019`.?~-^(*+d";
      k.actions= [1,1,1,1,2,3,4,5,6,7,8,8,8,15];
      return k;
    }
    
    function CAllKeys() {
      var k= new CVietKeys();
      k.keys= "sfjrxzaeowd0123456789\xB4/'`.?~-^(*+d";
      k.actions= [1,2,3,4,5,6,9,10,11,8,15,6,1,2,4,5,3,7,8,8,15,1,1,1,2,3,4,5,6,7,8,8,8,15];
      k.istelex= true;
      return k;
    }
    
    // end vietuni.js
    
    </script>
    
    </body>
    
    </html>
    
    
    
     

    Chia sẻ

    CrystalShield, nghiemhung, girl_so_fox3 người khác thích nội dung này.
  2. caocaotac

    caocaotac Thành viên mới

    Tham gia:
    5/9/07
    Được thích:
    8,484
    Bạn cho vài hình ảnh xem như thế nào,hiện giờ mình xài Viet free keyboard trên source của iphone.gsm.vn cũng OK.
     
    1. thuannp

      thuannp Thành viên

      Tham gia:
      20/1/08
      Được thích:
      154
      thuannp
      Ủa vậy ra ipad jb xong cài app bạn nói là type đc TV trực tiếp từ keyboard à. Mình nghĩ app bạn nói chắc là cho iphone thôi đúng ko. Nếu như vậy thì khi cần type TV cho các app trong bộ iwork hay Notes thì vẫn phải copy paste đúng ko. Nếu như vẫn phải copy paste thì mình nghĩ dùng giải pháp của mình tiện hơn. Vừa ko cần jb, ko mất tiền mua trên appstore vừa đơn giản nhẹ nhàng, support ipad 100%. Giao diện thì cũng chẳng có j đâu chỉ đơn giản là một ô nhập liệu textarea phủ kín toàn màn hình thôi nên mình ko up ảnh chụp lên nữa. Bài post của mình là type từ cái ứng dụng này đấy.
       
    2. caocaotac

      caocaotac Thành viên mới

      Tham gia:
      5/9/07
      Được thích:
      8,484
      caocaotac
      Cái này không phải là app mà chỉ thêm các ký tự vào keyboard,có thể type trực tiếp bất cứ chổ nào và không cần copy,paste gì cả.

      [​IMG]

      [​IMG]
       
    3. nguyenmanhnl

      nguyenmanhnl Thành viên

      Tham gia:
      17/2/12
      Được thích:
      47
      nguyenmanhnl @caocaotac Sao không chọn ở phần senting ấy. Gõ theo kiểu Telex chả sướng hơn à. Nhìn mà hoa cả mắt:T
       
    4. hiepthong

      hiepthong Thành viên

      Tham gia:
      24/7/09
      Được thích:
      3,099
      hiepthong @nguyenmanhnl người lớn tuổi như mẹ và ba mình đánh quen vni rồi , giờ học lại nữa ah ?
       
  3. dannhut

    dannhut Thành viên

    Tham gia:
    2/9/08
    Được thích:
    803
    Hay quá... mình sẽ nghiên cứu thêm.. vậy là có cách gõ free mang ý nghĩa cộng đồng rồi.. đúng là từng bước khắc phục khó khăn..
     
  4. thuannp

    thuannp Thành viên

    Tham gia:
    20/1/08
    Được thích:
    154
    À như vậy thì cũng ổn đấy ko phải copy paste chắc tôi cũng phải jb ipad để xài cái này. Tuy nhiên cũng có cái dở là ko type kiểu telex đc điều này sẽ làm giảm tốc độ type. Theo tôi lý tưởng nhất vẫn là dạng keyboard trực tiếp và cho phép gõ telex như vậy type vừa nhanh vừa ko cần copy paste. Ko biết bao giờ mới có app này
     
    1. caocaotac

      caocaotac Thành viên mới

      Tham gia:
      5/9/07
      Được thích:
      8,484
      caocaotac
      Bạn đợi phiên bản 4.0 trên iPad sẽ có bộ gõ telex mặc định luôn.Hiện giờ phiên bản 4.0 dành cho iPhone có có rồi.iPad chắc chờ vài tháng nữa.
       
    2. nickbakay

      nickbakay Thành viên

      Tham gia:
      4/1/08
      Được thích:
      368
      nickbakay
      iPad của bác là iPad 4G lun. ^^ :D
       
  5. tungbao2000

    tungbao2000 Thành viên

    Tham gia:
    19/6/08
    Được thích:
    5
    cho mình hỏi IPAD có add fonts Vni được không?
     
    1. thuannp

      thuannp Thành viên

      Tham gia:
      20/1/08
      Được thích:
      154
      thuannp

      Mình đã test thử nhưng ko đc. Có lẽ ipad chỉ hỗ trợ kiểu gõ telex thôi
       
  6. phanuyvu

    phanuyvu Thành viên

    Tham gia:
    27/7/07
    Được thích:
    326
    mình thì không thích JB nên...đành đợi iPad firmware 4.0 vậy.
     
  7. designxvn

    designxvn Thành viên

    Tham gia:
    18/10/07
    Được thích:
    4
    Cái này mình nghī lâu rùi.. Ko kha? thi .
     
  8. bshieu

    bshieu Thành viên

    Tham gia:
    1/11/08
    Được thích:
    0
    Gõ tiếng Việt

    làm sao thêm các ký tự vào keyboard được, bạn chỉ cho minh đi, cảm ơn
     
  9. designxvn

    designxvn Thành viên

    Tham gia:
    18/10/07
    Được thích:
    4
    Đầu tiên jailbreak Ipad.. Sau đó vào Cydia addd souce : iphone.gsm.vn

    Vào install Vietkeyboard !
     
  10. dynhm

    dynhm Thành viên

    Tham gia:
    19/5/08
    Được thích:
    0
    Khi nào mới có gõ tiếng việt telex nhỉ, bây giờ chỉ gõ trên tinh tế được. Hi vọng 1 ngày không xa sẽ có telex để soạn thảo văn bản.
     
    1. thuannp

      thuannp Thành viên

      Tham gia:
      20/1/08
      Được thích:
      154
      thuannp
      Ủa thế bạn đọc bài này của mình mà sao vẫn hỏi như vậy nhỉ ? Thử thực hiện theo hướng dẫn của mình ở trang 1, sẽ tạo ra 1 file là Unikey.htm. Sync vào Ipad với phần mềm Good Reader hoặc ReaddleDocs sẽ gõ được tiếng việt unicode theo kiểu telex một cách hoàn hảo, tương tự như việc gõ tiếng Việt trên tinhte vậy vì cùng một bộ mã hóa unicode như nhau. Sau khi gõ xong thì copy và paste vào ứng dụng mình cần.

      Còn để gõ telex trực tiếp trên bàn phím ảo của Ipad thì đành phải đợi 4.0 thôi.
       
      1
      daithanhthai thích nội dung này.
  11. dynhm

    dynhm Thành viên

    Tham gia:
    19/5/08
    Được thích:
    0
    Hiểu lầm, ý là gõ tiếng việt trực tiếp trong phần mềm soạn thảo hoặc trong Notes đó bạ. Gõ telex như đang gõ trên ipad&tinh tế nè. Thanks nhé!

    ---------- Post added at 07:39 PM ---------- Previous post was at 07:38 PM ----------

    Có thì nhắn tin nhé bạn.
     
  12. davitru

    davitru Thành viên

    Tham gia:
    23/8/06
    Được thích:
    7
    haizz.. có vẻ như vấn đề bộ gõ phức tạp quá nhỉ.. giá mà có Inspell cho ipad như Iphone thì hay biết mấy :|
     
  13. caochinguyen

    caochinguyen Thành viên

    Tham gia:
    15/1/08
    Được thích:
    5
    đã có cách mở ứng dụng của bạn bằng safari ^^! tks đã share, xài telex gõ tiếng việt sướng lắm, gõ bằng cái này rồi copy qua những chỗ khác cho lẹ :)
     
    1. dannhut

      dannhut Thành viên

      Tham gia:
      2/9/08
      Được thích:
      803
      dannhut
      Bạn có thể chia sẻ làm các nào để safari mở được file html có trong iPad?
       
    2. caochinguyen

      caochinguyen Thành viên

      Tham gia:
      15/1/08
      Được thích:
      5
      caochinguyen
      bạn tìm 1 host up file đó lên là có thể chạy trong safari, ở đây mình dùng skydrive của hotmail :) nhưng tiếc là phải có wifi :(
       
    3. dannhut

      dannhut Thành viên

      Tham gia:
      2/9/08
      Được thích:
      803
      dannhut
      Vậy coi như safari sẽ mở file đó theo kiểu mở file đính kèm hay download.. Thật là thông minh. Mình sẽ đưa lên google site!

      Cám ơn bạn nhé
       
    4. caochinguyen

      caochinguyen Thành viên

      Tham gia:
      15/1/08
      Được thích:
      5
      caochinguyen
      mình nghĩ làm như vậy giống như mở 1 trang web, mà web thì cũng là htm thôi, hehe, với lại đa số xài ipad là phải có 3g hoặc wifi để online nên cách đó mình thấy cũng okie ^^!

      mọi người có thể xài chung cái này với mình http://unikeytelex.co.cc :)
       
  14. dannhut

    dannhut Thành viên

    Tham gia:
    2/9/08
    Được thích:
    803
    Cám ơn bác thuannp đã cung cấp 1 giải pháp gõ telex và bạn caochinguyen đã chỉ cách sử dụng file html chỉ bằng một phần mềm có sẵn: Safari, không cần JB iPad hay cài thêm 1 app nào khác.

    Thêm 1 thao tác nhỏ nữa là bạn có 1 app gõ tiếng việt ngay trên ipad.

    1. Hãy dùng safari mở link trên của bạn caochinguyen hay của mình ở đây
    2. Trên thanh công cụ Safari tap lên dấu "+" và chọn Add to Home Screen





    Trên ipad sẽ xuất hiện thêm 1 icon tên là Unikey. Từ đây về sau, chỉ cần click nút này mỗi khi muốn gõ mở ô text gõ tiếng việt

    Cũng theo cách này, bạn có thể có 1 tự điển trên màn hình iPad (dùng www.1tudien.com là tốt nhất)

    Rào cản cuối cùng cho những người không muốn JB iPad của mình, mà chưa có điều kiện mua phần mềm hợp pháp là bộ soạn thảo văn phòng. Mình nghĩ có thể dùng bộ Google Docs.. nhưng làm cách nào đây?

    Sao phải cài thêm khi những gì miễn phí đang có đã đủ đáp ứng nhu cầu?
     
    fatcat9993 thích nội dung này.
  15. thuannp

    thuannp Thành viên

    Tham gia:
    20/1/08
    Được thích:
    154
    Mình rất vui vì đã đóng góp đc một chút công sức cho cộng đồng. Xin lưu ý thêm một chút về vấn đề này: theo giải pháp load file htm lên server thì vẫn có bất tiện là phải có wifi. Trong khi nếu ipad đã jb thì theo mình đc biết là có giải pháp để safari đọc file htm ngay trên máy. Nhưng iPhone jb thì mình thử rồi còn ipad jb thì mình mới chỉ nhìn thấy thôi chưa thử. Hiện tại ipad của mình cũng ko jb. Nên bác nào đã jb thì test thử xem sao.
     
    1. caochinguyen

      caochinguyen Thành viên

      Tham gia:
      15/1/08
      Được thích:
      5
      caochinguyen
      bác chỉ cách đi rồi mình test thử cho, ko biết cách chạy trực tiếp file htm trên safari :(
       
  16. dannhut

    dannhut Thành viên

    Tham gia:
    2/9/08
    Được thích:
    803
    Giải pháp miễn phí dùng Unikey.htm mà không cần WiFi

    Nguyên tắc: Nếu bạn tìm được 1 app miễn phí lưu website và mở Offline trên iPad thì bạn có thể gõ tiếng việt trên iPad mọi lúc mọi nơi

    App tôi dùng ở đây là iSaveWeb bản Lite. Thứ tự thực hiện khác đơn giản



    1. Download iSaveWeb Lite từ iTune Store vào iPad.

    2. Cài đặt iSave Web vào bookmark của Safari: Từ đây bạn có thể lưu lại trang web ngay chính trên trình duyệt web của iPad chỉ bằng 1 cái.. tap., rồi xem offline bất cứ khi nào bạn thích.

    a- Lấy đường link: Vào trang web http://www.isaveweb.com/products/isw_iphone/tour4.html. Tìm link these instructions. ở cuối trang.

    b- Bookmark trang vừa mở lại:
    - Hãy click dấu " + " để add trang trên vào Bookmark, save lại

    c- Chỉnh đường link:
    - Tap vào biểu tượng cuốn sách đang mở để mở bookmark
    - Bạn sẽ thấy 1 bookmark tên iSaveWeb với dòng địa chỉ là:
    http://www.isaveweb.com/i.html? javascript:window.location='isaveweb://'+window.location
    - Xóa đoạn gạch dưới (http://www.isaveweb.com/i.html?)
    - Đường Link sẽ là: javascript:window.location='isaveweb://'+window.location



    c- Save đường link của iSaveWeb bookmark lại: Bạn sẽ thấy trên thanh bookmark của safari có 1 link là iSaveWeb (Chọn cho thanh bookmark xuất hiện trong setting nha). Kể từ đây muốn lưu trang web nào bạn cứ tap vào link này​

    Vậy bạn open trang Unikey của bạn caochinguyen hay của mình ở đây và click link iSaveWeb trên thanh bookmark của safari để lưu lại nhé (mình thấy nên đặt là telex.htm sẽ k cần nói thêm kiểu gõ nữa) ​



    3. Mở Website để đọc offline (cũng là mở Unikey để gõ tiếng việt offline)
    Hãy tap lên icon iSave Web để open bạn sẽ thấy các trang web sẽ được lưu trong đó theo thứ tự thời gian. Bây giờ tha hố gõ tiếng việt mà không cần WiFi



    Chúc mọi người làm tốt
     
    google, fatcat9993, vuongot1 người khác thích nội dung này.
  17. dannhut

    dannhut Thành viên

    Tham gia:
    2/9/08
    Được thích:
    803
    Xin hỏi bác thuannp có thêm 1 chọn lựa nào cho người gõ kiểu VNI không? Mình thử xem code định sửa nhưng.. "lực bất tòng tâm".. :)
     
  18. thuannp

    thuannp Thành viên

    Tham gia:
    20/1/08
    Được thích:
    154
    Mình đã sửa lại thành bản hỗ trợ 3 kiểu gõ Telex, VNI và VIQR rồi. Các bạn làm theo hướng dẫn này nhé:
    1. Vào http://www.mediafire.com/?q5de7ng613tdbq4 tải file unikey.zip xuống.
    2. Giải nén được 3 file: telex.htm, vni.htm và viqr.htm
    3. Có thể sync 3 file này vào ipad hoặc upload lên 1 free server hoặc google docs để dùng như các hướng dẫn ở trên. Bác nào rảnh thì up giùm anh em thì tốt. Tôi có server riêng nhưng bandwidth hơi hạn chế, còn free server thì chưa dùng bao giờ.
    4. Chạy 1 trong 3 file, các file có link sang nhau ngay trên đầu trang.

    Có gì trục trặc liên hệ lại mình nhé.
     
    google, fatcat9993dannhut thích nội dung này.
  19. dannhut

    dannhut Thành viên

    Tham gia:
    2/9/08
    Được thích:
    803
    Có ngay đây

    Link cho bộ gõ TELEX
    Link cho bộ gõ VNI
    Link cho bộ gõ VIQE


    Cách đưa vào iPad và sử dụng offline các bạn làm như trên nhé. Lưu ý 1 điều là gõ theo kiểu VNI trên bàn phím ảo sẽ rất khó khăn do phần chữ và phần số tách rời, có lẽ chỉ thích hợp cho các bạn gõ VNI trên bàn phím gắn ngoài thôi. Các bạn sử dụng và phản hồi kết quả để bác ấy hoàn thiện hơn nhé

    Một lần nữa cám ơn bác thuannp, có công lớn đưa iPad thành công cụ hỗ trợ soạn thảo hữu ích cho người việt.

     
    google thích nội dung này.
  20. baluong

    baluong Thành viên

    Tham gia:
    4/11/07
    Được thích:
    118
    có bác nào biết sửa code keyboard mặc định của 1 nước nào đấy trong ipad ko ? sửa như thế em nghĩ là được. ( em không giỏi về khoản này lắm, nếu nói ngu thì các bác đừng chửi nhé ^^ )
     
    1. dannhut

      dannhut Thành viên

      Tham gia:
      2/9/08
      Được thích:
      803
      dannhut
      Đã là giao lưu thì đừng ngại ngần hỏi cho biết bạn nhé..mình chưa hiểu ý bạn lắm, hay là bạn muốn đổi bàn phím mặc định? néu vậy bạn hãy vào Settings > General > Keyboard > International Keyboards mà đổi nhé (chưa có bàn phím việt nam đâu.
       
    2. baluong

      baluong Thành viên

      Tham gia:
      4/11/07
      Được thích:
      118
      baluong
      Ý em là nếu bọn apple ko cho thêm bàn phím ảo tiếng việt vào thì mình sửa luôn code 1 bàn phím mặc định của Ipad (bọn chines hay bọn italia gì đó) thành kiểu gõ telex.
       
    3. thuannp

      thuannp Thành viên

      Tham gia:
      20/1/08
      Được thích:
      154
      thuannp
      Vụ này muốn làm đc thì iPad phải jb, và phải có hacker can thiệp vào hệ thống. Nhưng hiện tại khi mà iOs4 for iPad sắp ra, có hỗ trợ mặc định keyboard t.việt thì chắc các hacker sẽ ko tốn công để làm việc đó đâu.

      Cho nên giải pháp mình đưa ra đc xem là giải pháp tình thế trong khi chờ iOs4

      Tiện đây thông báo là mình đã làm phiên bản mới cho ứng dụng này, xem tại đây
       

Chia sẻ

Đang tải...