├── favicon.png ├── assets ├── fonts │ ├── Surma.eot │ ├── Surma.ttf │ └── Surma.woff ├── js │ ├── utilities.js │ ├── bangla-nagri.js │ └── nagri-bangla.js └── css │ └── app.css ├── .github └── ISSUE_TEMPLATE │ ├── feature_request.md │ └── bug_report.md ├── .gitignore ├── readme.md └── index.html /favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mayeenulislam/nagri-bangla/HEAD/favicon.png -------------------------------------------------------------------------------- /assets/fonts/Surma.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mayeenulislam/nagri-bangla/HEAD/assets/fonts/Surma.eot -------------------------------------------------------------------------------- /assets/fonts/Surma.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mayeenulislam/nagri-bangla/HEAD/assets/fonts/Surma.ttf -------------------------------------------------------------------------------- /assets/fonts/Surma.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mayeenulislam/nagri-bangla/HEAD/assets/fonts/Surma.woff -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature Request 3 | about: Suggest an idea for Nagri-Bangla 4 | title: '' 5 | labels: 'feature request' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve Nagri-Bangla 4 | title: '' 5 | labels: 'bug' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 17 | 18 | ## যে পরিবেশে ত্রুটিটি পেয়েছি 19 | * ব্রাউযার: <আপনার ব্রাউযারের নাম লিখুন> 20 | * জাভাস্ক্রিপ্ট সক্রিয়?: <হ্যাঁ/না> [এই লিংকে গেলে জানা যাবে](https://www.whatismybrowser.com/detect/is-javascript-enabled) 21 | * কিভাবে আমরাও একই সমস্যা দেখতে পাবো?: <বিস্তারিত ধাপে ধাপে লিখুন> 22 | -------------------------------------------------------------------------------- /assets/js/utilities.js: -------------------------------------------------------------------------------- 1 | function copyText(target, button) { 2 | var target = document.getElementById(target); 3 | var copyIcon = button.querySelector(".copy-icon"); 4 | var copyText = button.querySelector(".copy-text"); 5 | 6 | /* Select the text field */ 7 | target.select(); 8 | target.setSelectionRange(0, 99999); /* For mobile devices */ 9 | 10 | /* Copy the text inside the text field */ 11 | document.execCommand("copy"); 12 | 13 | /* Handle the UI indications on copied the texts */ 14 | copyIcon.classList.remove("bi-clipboard"); 15 | copyIcon.classList.add("bi-check-circle-fill", "text-success"); 16 | 17 | copyText.innerText = 'কপি করা হয়েছে'; 18 | copyText.classList.remove("visually-hidden"); 19 | 20 | /* Set the copy icon and button to its original state */ 21 | setTimeout(function () { 22 | copyIcon.classList.remove("bi-check-circle-fill", "text-success"); 23 | copyIcon.classList.add("bi-clipboard"); 24 | 25 | copyText.innerText = "কপি করুন"; 26 | copyText.classList.add("visually-hidden"); 27 | }, 1200); 28 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## -------------- 2 | ## IDE/Editor 3 | ## -------------- 4 | 5 | /.idea 6 | /.vscode 7 | /nbproject/* 8 | *.sublime-project 9 | *.sublime-workspace 10 | _ide_helper.php 11 | sublime-gulp.log 12 | *.todo 13 | *.code-workspace 14 | .history 15 | bash.exe.stackdump 16 | 17 | 18 | ## -------------- 19 | ## Build files 20 | ## -------------- 21 | 22 | /dist/* 23 | 24 | 25 | ## -------------- 26 | ## Node, npm, yarn 27 | ## -------------- 28 | 29 | /node_modules 30 | npm-debug.log 31 | yarn-error.log 32 | package-lock.json #as we are using yarn and want to stick to it only 33 | 34 | ## -------------- 35 | ## Archives 36 | ## -------------- 37 | 38 | *.rar 39 | *.zip 40 | *.7zip 41 | 42 | ## -------------- 43 | ## Windows Shortcuts 44 | ## -------------- 45 | 46 | *.lnk 47 | 48 | ## -------------- 49 | ## Windows image file caches 50 | ## -------------- 51 | 52 | Thumbs.db 53 | ehthumbs.db 54 | 55 | ## -------------- 56 | ## Folder config files 57 | ## -------------- 58 | 59 | Desktop.ini 60 | 61 | ## -------------- 62 | ## Recycle Bin used on file shares 63 | ## -------------- 64 | 65 | $RECYCLE.BIN/ 66 | 67 | ## -------------- 68 | ## Others 69 | ## -------------- 70 | 71 | *.log 72 | /puppeteer 73 | -------------------------------------------------------------------------------- /assets/js/bangla-nagri.js: -------------------------------------------------------------------------------- 1 | var nagri = document.querySelector("#nagri"); 2 | var bangla = document.querySelector("#bangla"); 3 | 4 | var nagriGlyphs = [ 5 | { 6 | অ: "ꠅ", // ও 7 | আ: "ꠀ", 8 | ই: "ꠁ", 9 | ঈ: "ꠁ", 10 | উ: "ꠃ", 11 | ঊ: "ꠃ", 12 | ঋ: "ꠞꠤ", // রি 13 | এ: "ꠄ", 14 | ঐ: "ꠅꠁ", // ওই 15 | ও: "ꠅ", 16 | ঔ: "ꠅꠃ", // ওউ 17 | ক: "ꠇ", 18 | খ: "ꠈ", 19 | গ: "ꠉ", 20 | ঘ: "ꠊ", 21 | ঙ: "ꠋ", // ং 22 | চ: "ꠌ", 23 | ছ: "ꠍ", 24 | জ: "ꠎ", 25 | ঝ: "ꠏ", 26 | ঞ: "ꠘ", // ন 27 | ট: "ꠐ", 28 | ঠ: "ꠑ", 29 | ড: "ꠒ", 30 | ঢ: "ꠓ", 31 | ণ: "ꠘ", // ন 32 | ত: "ꠔ", 33 | থ: "ꠕ", 34 | দ: "ꠖ", 35 | ধ: "ꠗ", 36 | ন: "ꠘ", 37 | প: "ꠙ", 38 | ফ: "ꠚ", 39 | ব: "ꠛ", 40 | ভ: "ꠜ", 41 | ম: "ꠝ", 42 | য: "ꠎ", // জ 43 | র: "ꠞ", 44 | ল: "ꠟ", 45 | শ: "ꠡ", // স 46 | স: "ꠡ", // স 47 | ষ: "ꠡ", // স 48 | হ: "ꠢ", 49 | য়: "ꠁ", // ই 50 | ড়: "ꠠ", 51 | ঢ়: "ꠠ", // ড় 52 | ৎ: "ꠔ", 53 | "ং": "ꠋ", 54 | "ঃ": "ꠂ", 55 | "ঁ": "ꠘ", // ন 56 | 57 | "্": "꠆", // হসচিহ্ন 58 | "া": "ꠣ", // আ-কার 59 | "ি": "ꠤ", // ই-কার 60 | "ী": "ꠤ", // ই-কার 61 | "ু": "ꠥ", // উ-কার 62 | "ূ": "ꠥ", // উ-কার 63 | "ে": "ꠦ", // এ-কার 64 | "ৈ": "ꠧꠁ", // োই 65 | "ো": "ꠧ", // ও-কার 66 | "ৌ": "ꠧꠃ", // ৌউ 67 | 68 | "।": "*", // দাঁড়ি 69 | "॥": "॥", // দ্বৈত দাঁড়ি 70 | " ": " ", // space, ফাঁকা স্থান 71 | }, 72 | ]; 73 | 74 | /** 75 | * Handle Bengali Inputs. 76 | */ 77 | bangla.addEventListener("keyup", function () { 78 | var nagriChars = ""; 79 | 80 | var str = this.value; 81 | for (var i = 0; i < str.length; i++) { 82 | for (var key in nagriGlyphs) { 83 | // console.warn(str[i], ' - ', typeof nagriGlyphs[key][str[i]]); 84 | if ('undefined' !== typeof nagriGlyphs[key][str[i]]) { 85 | nagriChars += nagriGlyphs[key][str[i]]; 86 | } else { 87 | nagriChars += str[i]; 88 | } 89 | } 90 | } 91 | nagri.value = nagriChars; 92 | }); 93 | -------------------------------------------------------------------------------- /assets/js/nagri-bangla.js: -------------------------------------------------------------------------------- 1 | var nagri = document.querySelector("#nagri"); 2 | var bangla = document.querySelector("#bangla"); 3 | 4 | var banglaGlyphs = [ 5 | { 6 | "ꠅ": "অ", // ও 7 | "ꠀ": "আ", 8 | "ꠁ": "ই", 9 | "ꠁ": "ঈ", 10 | "ꠃ": "উ", 11 | "ꠃ": "ঊ", 12 | "ꠞꠤ": "ঋ", // রি 13 | "ꠄ": "এ", 14 | "ꠅꠁ": "ঐ", // ওই 15 | "ꠅ": "ও", 16 | "ꠅꠃ": "ঔ", // ওউ 17 | "ꠇ": "ক", 18 | "ꠈ": "খ", 19 | "ꠉ": "গ", 20 | "ꠊ": "ঘ", 21 | "ꠋ": "ঙ", // ং 22 | "ꠌ": "চ", 23 | "ꠍ": "ছ", 24 | "ꠎ": "জ", 25 | "ꠏ": "ঝ", 26 | "ꠋ": "ঞ", // ং 27 | "ꠐ": "ট", 28 | "ꠑ": "ঠ", 29 | "ꠒ": "ড", 30 | "ꠓ": "ঢ", 31 | "ꠘ": "ন", // ণ 32 | "ꠔ": "ত", 33 | "ꠕ": "থ", 34 | "ꠖ": "দ", 35 | "ꠗ": "ধ", 36 | "ꠘ": "ন", 37 | "ꠙ": "প", 38 | "ꠚ": "ফ", 39 | "ꠛ": "ব", 40 | "ꠜ": "ভ", 41 | "ꠝ": "ম", 42 | "ꠎ": "জ", // য 43 | "ꠞ": "র", 44 | "ꠟ": "ল", 45 | "ꠡ": "স", // শ 46 | "ꠡ": "স", // স 47 | "ꠡ": "স", // ষ 48 | "ꠢ": "হ", 49 | "ꠁ": "ই", // য় 50 | "ꠠ": "ড়", 51 | "ꠠ": "ড়", // ঢ় 52 | "ꠔ": "ত", 53 | "ꠋ" : "ং", 54 | "ꠂ" : "ঃ", 55 | "ꠘ" : "ন", // ঁ (চন্দ্রবিন্দু) 56 | 57 | "꠆" : "্", // হসচিহ্ন 58 | "ꠣ" : "া", // আ-কার 59 | "ꠤ" : "ি", // ই-কার 60 | "ꠥ" : "ু", // উ-কার 61 | "ꠦ" : "ে", // এ-কার 62 | "ꠧ" : "ো", // ও-কার 63 | 64 | "*": "।", // দাঁড়ি 65 | "॥": "॥", // দ্বৈত দাঁড়ি 66 | " ": " ", // space, ফাঁকা স্থান 67 | }, 68 | ]; 69 | 70 | /** 71 | * Handle Nagri Inputs. 72 | */ 73 | nagri.addEventListener("keyup", function (e) { 74 | var banglaChars = ""; 75 | 76 | var str = this.value; 77 | for (var i = 0; i < str.length; i++) { 78 | for (var key in banglaGlyphs) { 79 | // console.warn(str[i], " - ", typeof banglaGlyphs[key][str[i]]); 80 | if ("undefined" !== typeof banglaGlyphs[key][str[i]]) { 81 | banglaChars += banglaGlyphs[key][str[i]]; 82 | } else { 83 | banglaChars += str[i]; 84 | } 85 | } 86 | } 87 | bangla.value = banglaChars; 88 | }); 89 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # নাগরি-বাংলা লিপ্যন্তর 2 | 3 | ## নেপথ্য কথা 4 | 5 | প্রচলিত আছে, সিলেটি নাগরি মাত্র আড়াই দিনে শেখা যায়। আমি যে খুব দ্বিমত করি, তা কিন্তু নয়। কিন্তু সমস্যা হচ্ছে, আমরা যারা বাংলা জানি, তাদের জন্য বিষয়টা একটু ঝক্কির হয়ে দাঁড়ায়, কারণ কিছু কিছু হরফে, বাংলাকে অস্বীকার না করতে শিখলে, বাংলা এসে সিলেটি নাগরি শেখার পথে কিঞ্চিৎ বাধা হয়ে দাঁড়ায় মনে হয় আমার: যেমন: নাগরি 'উ' (ꠃ) দেখলেই পড়ি 'ত্ত' (ত+ত), নাগরি 'চ' (ꠌ) দেখলে পড়ি 'ব', ইত্যাদি। তবে এটা ঠিক, নাগরি শেখার জন্য আলাদা করে সময় বের করিনি কখনও; পরিশ্রম ছাড়া কিছুই অর্জিত হয় না। 6 | 7 | কিন্তু নাগরি পড়তে জানি না, তাতে কী হয়েছে? নাগরি যাতে অন্তত দুর্বোধ্য আর না থাকে, সেজন্য একটা অনলাইন টুল বানিয়ে ফেললাম, যাতে নাগরি দিলে বাংলা হরফে বদলে দিবে, আর বাংলা দিলে নাগরিতে... 8 | 9 | এই টুলটি খুবই _বেকামা_ টুল (এখনও alpha পর্যায়েই আছে), ব্যক্তিগত ব্যবহারের জন্যই মূলত তৈরি করা। কারো কাজে লাগলে তো অবশ্যই ভালো লাগবে। আর কোনো পরামর্শ থাকলে, অবশ্যই [জানাতে](https://github.com/mayeenulislam/nagri-bangla/issues/new/choose) ভুলবেন না। 10 | 11 | ## সিলেটি নাগরি কী? 12 | 13 | সিলেটি নাগরি, সিলেটি ভাষার নিজস্ব লিপি। যেমন: "ami banglaay gaan gaachchhi" লেখাটি আমি রোমান (ইংরেজি) হরফে লিখলেও ভাষাটা বাংলা, তেমনি "আমি বাংলায় গান গাইয়ার" লেখাটি আমি বাংলা হরফে লিখলেও ভাষাটা সিলেটি। অথচ সিলেটি ভাষায় লেখার জন্য আলাদা নিজস্ব লিপি ছিল এককালে, সেই লিপিই হচ্ছে সিলেটি নাগরি লিপি, যার [ইউনিকোড রেঞ্জ আছে](http://unicode.org/charts/PDF/UA800.pdf), এই লিপিতে বহু সাহিত্য আছে, আর এই লিপি এখনও অনেকেই চর্চা করেন। উপরের লেখাটি সিলেটি নাগরিতে লিখলে লেখা যাবে: `ꠀꠝꠤ ꠛꠣꠋꠟꠣꠁ ꠉꠣꠘ ꠉꠣꠁꠁꠣꠞ` 14 | । (ইউনিকোড ফন্ট ইন্সটল না থাকলে লেখাটির বদলে বাক্স দেখতে পারেন) 15 | 16 | * [সিলেটি নাগরি](https://bn.wikipedia.org/s/k5a) - বাংলা উইকিপিডিয়া নিবন্ধ 17 | * [সিলেটি নাগরি হরফ ও উচ্চারণ](http://www.sylotilanguage.com/nagri_lipi.html) - sylotilanguage.com 18 | 19 | ## নমুনা 20 | 21 | ### **সিলেটি নাগরি হরফে লেখা সিলেটি ভাষা** 22 | 23 | * ꠗꠣꠞꠣ ১: ꠢꠇꠟ ꠝꠣꠘꠥꠡ ꠡꠣꠗꠤꠘꠜꠣꠛꠦ ꠢꠝꠣꠘ ꠁꠎ꠆ꠎꠔ ꠀꠞ ꠢꠇ ꠟꠁꠀ ꠙꠄꠖꠣ ‘ꠅꠄ। ꠔꠣꠁꠘꠔꠣꠁꠘꠞ ꠛꠤꠛꠦꠇ ꠀꠞ ꠀꠇꠟ ꠀꠍꠦ। ꠅꠔꠣꠞ ꠟꠣꠉꠤ ꠢꠇꠟꠞ ꠄꠇꠎꠘꠦ ꠀꠞꠇꠎꠘꠞ ꠟꠉꠦ ꠛꠤꠞꠣꠖꠞꠤꠞ ꠝꠘ ꠟꠁꠀ ꠀꠌꠞꠘ ꠇꠞꠣ ꠃꠌꠤꠔ। 24 | * ꠀꠚꠘꠣꠞ ꠙꠍꠘ꠆ꠖꠞ ꠄꠇꠐꠣ ꠚꠥꠟꠞ ꠘꠣꠝ ꠟꠦꠈꠧꠇ꠆ꠇꠣ... 25 | 26 | ### **বাংলা হরফে লেখা সিলেটি ভাষা** 27 | 28 | * ধারা ১: হকল মানুষ সাধিনভাবে ইমান ইজ্জত আর হক লইয়া পয়দা ওয়। তাইনতাইনর বিবেক আর আকল আছে। ওতার লাগি হকলর একজনে আরকজনর লগে বিরাদরির মন লইআ আচরন করা উচিত। 29 | * আফনার পছন্দর একটা ফুলর নাম লেখোক্কা... 30 | 31 | --- 32 | mayeenulislam | 20210317-2122 -------------------------------------------------------------------------------- /assets/css/app.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Surma'; 3 | src: url('../fonts/Surma.eot?#iefix') format('embedded-opentype'), url('../fonts/Surma.woff') format('woff'), url('../fonts/Surma.ttf') format('truetype'), url('../fonts/Surma.svg#Surma') format('svg'); 4 | font-weight: normal; 5 | font-style: normal; 6 | unicode-range: U+A800-A82F; /* Syloti Nagri Range: http://unicode.org/charts/PDF/UA800.pdf */ 7 | } 8 | 9 | body { 10 | font-family: 'Surma', 'Hind Siliguri', SolaimanLipi, Vrinda, Arial, Helvetica, sans-serif; 11 | } 12 | 13 | #bangla { 14 | font-size: 20px; 15 | line-height: 25px; 16 | } 17 | 18 | #nagri { 19 | font-size: 25px; 20 | line-height: 25px; 21 | } 22 | 23 | .form-control { 24 | height: 200px; 25 | } 26 | 27 | .separator { 28 | width: 200px; 29 | background-color: #ee1c24; 30 | height: 2px !important; 31 | margin-left: auto; 32 | margin-right: auto; 33 | opacity: 1; 34 | } 35 | 36 | .alpha-badge { 37 | font-size: 10px; 38 | top: -2.5em; 39 | left: -0.5em; 40 | padding: 1px 10px; 41 | background-color: #ee1c24; 42 | } 43 | 44 | .text-block { 45 | position: relative; 46 | } 47 | 48 | .text-block > label { 49 | background-color: #ee1c24; 50 | color: #fff; 51 | padding: 1px 20px; 52 | display: inline-block; 53 | position: absolute; 54 | top: -12px; 55 | left: 50%; 56 | transform: translateX(-50%); 57 | font-size: 15px; 58 | border-radius: 5px; 59 | } 60 | 61 | .text-block-bottom > label { 62 | top: auto; 63 | bottom: -12px; 64 | } 65 | 66 | @media (min-width: 576px) { 67 | .text-block-bottom > label { 68 | top: -12px; 69 | bottom: auto; 70 | } 71 | } 72 | 73 | .text-block .form-control { 74 | padding-top: 1.5rem; 75 | border-color: #ee1c24; 76 | } 77 | 78 | .converter { 79 | position: relative; 80 | } 81 | 82 | .converter::after { 83 | content: "\f12b"; 84 | font-family: bootstrap-icons; 85 | display: inline-block; 86 | position: absolute; 87 | bottom: -30px; 88 | left: 50%; 89 | transform: translateX(-50%) rotate(90deg); 90 | -webkit-transform: translateX(-50%) rotate(90deg); 91 | border: 1px solid #ccc; 92 | background-color: #fff; 93 | color: #ccc; 94 | font-weight: bold; 95 | padding: 0.5rem 0.8rem; 96 | width: 43px; 97 | height: 43px; 98 | border-radius: 50%; 99 | z-index: 100; 100 | box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.15); 101 | } 102 | 103 | @media (min-width: 576px) { 104 | .converter::after { 105 | bottom: auto; 106 | left: auto; 107 | right: -34px; 108 | top: 50%; 109 | transform: translate(0, -50%) rotate(0deg); 110 | -webkit-transform: translate(0, -50%) rotate(0deg); 111 | } 112 | } 113 | 114 | .copy-btn { 115 | position: absolute; 116 | bottom: 1px; 117 | left: 1px; 118 | background-color: rgba(255, 255, 255, 0.95); 119 | } -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 |এটি কোনো অনুবাদক নয় — লিপির বদলমাত্র
34 |এটি একটি পরীক্ষামূলক প্রচেষ্টা - শ্রেফ সিলেটি নাগরি অক্ষরকে বাংলা অক্ষর, আর বাংলা অক্ষরকে সিলেটি নাগরি অক্ষর দিয়ে প্রতিস্থাপন করা হয়েছে মাত্র। এর মূল উদ্দেশ্য হচ্ছে, সিলেটি নাগরি হরফকে বাংলায় এবং বাংলা হরফকে সিলেটি নাগরিতে দেখা - কোনোভাবেই ভাষান্তর কিংবা বাক্য গঠন করা নয়
60 |73 | কৃতজ্ঞতা সিলেটি নাগরি সুরমা ফন্ট 74 | | 75 | কোড ও বিস্তারিত Github রেপোযিটরিতে 76 | | 77 | তৈরি করেছেন মঈনুল ইসলাম 78 |
79 |