diff --git a/CHANGELOG.md b/CHANGELOG.md
index 02c39505..d8ac2cb2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,7 +2,7 @@
* **1.4.1 (not yet released)**
* ADDED: script for data storage backend migrations (#1012)
- * ADDED: Translations for Turkish, Slovak and Greek
+ * ADDED: Translations for Turkish, Slovak, Greek and Thai
* ADDED: S3 Storage backend (#994)
* CHANGED: Switched to Jdenticons as the default for comment icons (#793)
* CHANGED: Avoid `SUPER` privilege for setting the `sql_mode` for MariaDB/MySQL (#919)
diff --git a/CREDITS.md b/CREDITS.md
index eb5f152e..7a19c5fd 100644
--- a/CREDITS.md
+++ b/CREDITS.md
@@ -62,3 +62,4 @@
* Emir Ensar Rahmanlar - Turkish
* Stevo984 - Slovak
* Christos Karamolegkos - Greek
+* jaideejung007 - Thai
diff --git a/i18n/th.json b/i18n/th.json
new file mode 100644
index 00000000..d3c955db
--- /dev/null
+++ b/i18n/th.json
@@ -0,0 +1,193 @@
+{
+ "PrivateBin": "PrivateBin",
+ "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s เป็น pastebin ออนไลน์แบบโอเพ่นซอร์สที่มีสไตล์แบบมินิมัลลิสท์ เซิร์ฟเวอร์ไม่สามารถรู้ได้ว่าข้อมูลโค้ดที่มาฝากนั้นเป็นข้อมูลอะไร โดยจะถูก %sเข้ารหัส/ถอดรหัส%s ด้วยกระบวนการ AES จำนวน 256 บิตผ่านเบราว์เซอร์",
+ "More information on the project page.": "ข้อมูลเพิ่มเติม ดูได้ที่หน้าโครงการ",
+ "Because ignorance is bliss": "ไม่รู้ไม่ชี้ดีที่สุด",
+ "en": "th",
+ "Paste does not exist, has expired or has been deleted.": "การฝากโค้ดไม่มีอยู่ อาจจะหมดอายุหรือถูกลบไปแล้ว",
+ "%s requires php %s or above to work. Sorry.": "ขออภัย %s ต้องใช้ PHP %s ขึ้นไปจึงจะใช้งานได้",
+ "%s requires configuration section [%s] to be present in configuration file.": "%s จำเป็นต้องตั้งค่าตัวแปร [%s] ในไฟล์กำหนดค่า",
+ "Please wait %d seconds between each post.": [
+ "กรุณาเว้นระยะเวลาการส่งข้อมูลอย่างน้อย %d วินาที",
+ "กรุณาเว้นระยะเวลาการส่งข้อมูลอย่างน้อย %d วินาที",
+ "กรุณาเว้นระยะเวลาการส่งข้อมูลอย่างน้อย %d วินาที",
+ "กรุณาเว้นระยะเวลาการส่งข้อมูลอย่างน้อย %d วินาที"
+ ],
+ "Paste is limited to %s of encrypted data.": "การฝากโค้ดแบบเข้ารหัส ขีดจำกัดสูงสุดคือ %s",
+ "Invalid data.": "ข้อมูลไม่ถูกต้อง",
+ "You are unlucky. Try again.": "วันนี้คุณดวงไม่เฮงเลย ลองใหม่อีกครั้งนะ",
+ "Error saving comment. Sorry.": "ขออภัย เกิดข้อผิดพลาดในระหว่างบันทึกความคิดเห็น",
+ "Error saving paste. Sorry.": "ขออภัย เกิดข้อผิดพลาดในระหว่างบันทึกการฝากโค้ด",
+ "Invalid paste ID.": "ID การฝากโค้ดไม่ถูกต้อง",
+ "Paste is not of burn-after-reading type.": "ข้อมูลการฝากโค้ดนี้ไม่ได้เป็นรูปแบบลบทันทีเมื่อเปิดอ่าน",
+ "Wrong deletion token. Paste was not deleted.": "โทเค็นการลบไม่ถูกต้อง ข้อมูลการฝากโค้ดไม่ถูกลบ",
+ "Paste was properly deleted.": "ข้อมูลการฝากโค้ดถูกลบออกเรียบร้อยแล้ว",
+ "JavaScript is required for %s to work. Sorry for the inconvenience.": "จำเป็นต้องใช้ JavaScript เพื่อให้ %s สามารถทำงานได้ ขออภัยในความไม่สะดวก",
+ "%s requires a modern browser to work.": "%s ต้องใช้เบราว์เซอร์สมัยใหม่ถึงจะสามารถใช้งานได้",
+ "New": "ใหม่",
+ "Send": "ส่ง",
+ "Clone": "โคลน",
+ "Raw text": "ข้อความล้วน",
+ "Expires": "หมดอายุ",
+ "Burn after reading": "ลบทันทีเมื่อเปิดอ่าน",
+ "Open discussion": "แสดงความคิดเห็นได้",
+ "Password (recommended)": "รหัสผ่าน (แนะนำให้ใส่)",
+ "Discussion": "ความคิดเห็น",
+ "Toggle navigation": "สลับเปิดปิดการนำทาง",
+ "%d seconds": [
+ "%d วินาที",
+ "%d วินาที",
+ "%d วินาที",
+ "%d วินาที"
+ ],
+ "%d minutes": [
+ "%d นาที",
+ "%d นาที",
+ "%d นาที",
+ "%d นาที"
+ ],
+ "%d hours": [
+ "%d ชั่วโมง",
+ "%d ชั่วโมง",
+ "%d ชั่วโมง",
+ "%d ชั่วโมง"
+ ],
+ "%d days": [
+ "%d วัน",
+ "%d วัน",
+ "%d วัน",
+ "%d วัน"
+ ],
+ "%d weeks": [
+ "%d สัปดาห์",
+ "%d สัปดาห์",
+ "%d สัปดาห์",
+ "%d สัปดาห์"
+ ],
+ "%d months": [
+ "%d เดือน",
+ "%d เดือน",
+ "%d เดือน",
+ "%d เดือน"
+ ],
+ "%d years": [
+ "%d ปี",
+ "%d ปี",
+ "%d ปี",
+ "%d ปี"
+ ],
+ "Never": "ไม่หมดอายุ",
+ "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "โปรดทราบ: เว็บไซต์นี้เป็นการให้บริการแบบเบต้า ข้อมูลอาจถูกลบได้ตลอดเวลา หากคุณใช้บริการนี้ในทางที่ผิดอาจจะทำให้ข้อมูลของคุณสูญหายอย่างถาวรได้",
+ "This document will expire in %d seconds.": [
+ "เอกสารนี้จะหมดอายุใน %d วินาที",
+ "เอกสารนี้จะหมดอายุใน %d วินาที",
+ "เอกสารนี้จะหมดอายุใน %d วินาที",
+ "เอกสารนี้จะหมดอายุใน %d วินาที"
+ ],
+ "This document will expire in %d minutes.": [
+ "เอกสารนี้จะหมดอายุใน %d นาที",
+ "เอกสารนี้จะหมดอายุใน %d นาที",
+ "เอกสารนี้จะหมดอายุใน %d นาที",
+ "เอกสารนี้จะหมดอายุใน %d นาที"
+ ],
+ "This document will expire in %d hours.": [
+ "เอกสารนี้จะหมดอายุใน %d ชั่วโมง",
+ "เอกสารนี้จะหมดอายุใน %d ชั่วโมง",
+ "เอกสารนี้จะหมดอายุใน %d ชั่วโมง",
+ "เอกสารนี้จะหมดอายุใน %d ชั่วโมง"
+ ],
+ "This document will expire in %d days.": [
+ "เอกสารนี้จะหมดอายุใน %d วัน",
+ "เอกสารนี้จะหมดอายุใน %d วัน",
+ "เอกสารนี้จะหมดอายุใน %d วัน",
+ "เอกสารนี้จะหมดอายุใน %d วัน"
+ ],
+ "This document will expire in %d months.": [
+ "เอกสารนี้จะหมดอายุใน %d เดือน",
+ "เอกสารนี้จะหมดอายุใน %d เดือน",
+ "เอกสารนี้จะหมดอายุใน %d เดือน",
+ "เอกสารนี้จะหมดอายุใน %d เดือน"
+ ],
+ "Please enter the password for this paste:": "กรุณากรอกรหัสผ่านเพื่อเปิดข้อมูลการฝากโค้ดนี้:",
+ "Could not decrypt data (Wrong key?)": "ไม่สามารถถอดรหัสข้อมูลได้ (คีย์ไม่ถูกต้องหรือไม่)",
+ "Could not delete the paste, it was not stored in burn after reading mode.": "ไม่สามารถลบการฝากโค้ดนี้ได้ เนื่องจากว่าไม่ได้ถูกเก็บไว้ในโหมดลบทันทีเมื่อเปิดอ่าน",
+ "FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "เก็บไว้ดูคนเดียวนะ อย่าปิดหน้าต่างนี้ ข้อความนี้จะไม่สามารถแสดงได้อีก",
+ "Could not decrypt comment; Wrong key?": "ไม่สามารถถอดรหัสความคิดเห็นได้ คีย์ไม่ถูกต้องหรือไม่",
+ "Reply": "ตอบกลับ",
+ "Anonymous": "ไม่ระบุชื่อ",
+ "Avatar generated from IP address": "อวาตารสร้างมาจากไอพี",
+ "Add comment": "เพิ่มความคิดเห็น",
+ "Optional nickname…": "ใส่ชื่อคนให้ความคิดเห็น…",
+ "Post comment": "ส่งความคิดเห็น",
+ "Sending comment…": "กำลังส่งความคิดเห็น…",
+ "Comment posted.": "ส่งความคิดเห็นแล้ว",
+ "Could not refresh display: %s": "ไม่สามารถรีเฟรชการแสดงผลได้: %s",
+ "unknown status": "ไม่ทราบสถานะ",
+ "server error or not responding": "เซิร์ฟเวอร์มีข้อผิดพลาดหรือไม่ตอบสนอง",
+ "Could not post comment: %s": "ไม่สามารถส่งความคิดเห็นได้: %s",
+ "Sending paste…": "กำลังส่งข้อมูล…",
+ "Your paste is %s (Hit [Ctrl]+[c] to copy)": "การฝากโค้ดของคุณอยู่ที่ %s (กดปุ่ม [Ctrl]+[c] เพื่อคัดลอก)",
+ "Delete data": "ลบข้อมูล",
+ "Could not create paste: %s": "ไม่สามารถสร้างข้อมูลการฝากโค้ดได้: %s",
+ "Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "ไม่สามารถถอดรหัสข้อมูลการฝากโค้ดได้: คีย์ถอดรหัสที่อยู่ใน URL หายไป (คุณได้ใช้ตัวเปลี่ยนเส้นทางหรือตัวย่อ URL ที่มีการตัดส่วนของ URL ออกหรือไม่)",
+ "B": "B",
+ "KiB": "KiB",
+ "MiB": "MiB",
+ "GiB": "GiB",
+ "TiB": "TiB",
+ "PiB": "PiB",
+ "EiB": "EiB",
+ "ZiB": "ZiB",
+ "YiB": "YiB",
+ "Format": "รูปแบบ",
+ "Plain Text": "ข้อความล้วน",
+ "Source Code": "ซอร์สโค้ด",
+ "Markdown": "Markdown",
+ "Download attachment": "ดาวน์โหลดไฟล์แนบ",
+ "Cloned: '%s'": "โคลนแล้ว: '%s'",
+ "The cloned file '%s' was attached to this paste.": "การโคลนข้อมูลการฝากโค้ด มีไฟล์ '%s' แนบมาด้วย",
+ "Attach a file": "แนบไฟล์",
+ "alternatively drag & drop a file or paste an image from the clipboard": "หรือสามารถลากและวางไฟล์หรือวางรูปภาพจากคลิปบอร์ดได้",
+ "File too large, to display a preview. Please download the attachment.": "ไฟล์มีขนาดใหญ่เกินไปที่จะแสดงตัวอย่าง กรุณาดาวน์โหลดเป็นไฟล์แนบแทน",
+ "Remove attachment": "ลบไฟล์แนบ",
+ "Your browser does not support uploading encrypted files. Please use a newer browser.": "เบราว์เซอร์ของคุณไม่สนับสนุนการอัปโหลดไฟล์แบบเข้ารหัสได้ กรุณาใช้เบราว์เซอร์ที่ใหม่กว่า",
+ "Invalid attachment.": "ไฟล์แนบไม่ถูกต้อง",
+ "Options": "ตัวเลือก",
+ "Shorten URL": "สร้างลิงก์ย่อ",
+ "Editor": "ตัวแก้ไข",
+ "Preview": "ดูตัวอย่าง",
+ "%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s กำหนดให้ PATH ลงท้ายด้วย \"%s\" กรุณาอัปเดต PATH ในไฟล์ index.php ของคุณ",
+ "Decrypt": "ถอดรหัส",
+ "Enter password": "กรอกรหัสผ่าน",
+ "Loading…": "กำลังโหลด…",
+ "Decrypting paste…": "กำลังถอดรหัสข้อมูลการฝากโค้ด…",
+ "Preparing new paste…": "กำลังเตรียมข้อมูลการฝากโค้ดใหม่…",
+ "In case this message never disappears please have a look at this FAQ for information to troubleshoot.": "ในกรณีที่ข้อความนี้ยังปรากฎให้เห็นอยู่ กรุณาดูคำถามที่พบบ่อยนี้เพื่อใช้แก้ไขปัญหา",
+ "+++ no paste text +++": "+++ ไม่มีข้อความการฝากโค้ด +++",
+ "Could not get paste data: %s": "ไม่สามารถดึงข้อมูลการฝากโค้ดได้: %s",
+ "QR code": "คิวอาร์โค้ด",
+ "This website is using an insecure HTTP connection! Please use it only for testing.": "เว็บไซต์นี้ใช้การเชื่อมต่อแบบ HTTP ที่ไม่ปลอดภัย! กรุณาใช้เพื่อการทดสอบเท่านั้น",
+ "For more information see this FAQ entry.": "สำหรับข้อมูลเพิ่มเติม กรุณาดูรายการคำถามที่พบบ่อยนี้",
+ "Your browser may require an HTTPS connection to support the WebCrypto API. Try switching to HTTPS.": "เบราว์เซอร์ของคุณอาจต้องใช้การเชื่อมต่อ HTTPS เพื่อสนับสนุน API แบบ WebCrypto ลองเปลี่ยนเป็น HTTPS",
+ "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "เบราว์เซอร์ของคุณไม่สนับสนุน WebAssembly ที่ทำหน้าที่ในการบีบอัดข้อมูลในรูปแบบ zlib คุณยังสามารถสร้างเอกสารที่ไม่บีบอัด แต่จะไม่สามารถอ่านเอกสารที่บีบอัดได้",
+ "waiting on user to provide a password": "กำลังรอผู้ใช้กรอกรหัสผ่าน",
+ "Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "ไม่สามารถถอดรหัสข้อมูลได้ คุณกรอกรหัสผ่านผิดหรือเปล่า กดปุ่มลองอีกครั้งด้านบน",
+ "Retry": "ลองอีกครั้ง",
+ "Showing raw text…": "กำลังแสดงข้อความล้วน…",
+ "Notice:": "โปรดทราบ:",
+ "This link will expire after %s.": "ลิงก์นี้จะหมดอายุหลังจาก %s",
+ "This link can only be accessed once, do not use back or refresh button in your browser.": "ลิงก์นี้สามารถเข้าถึงได้เพียงครั้งเดียวเท่านั้น ไม่ควรใช้ปุ่มย้อนกลับหรือรีเฟรชหน้าเว็บบนเบราว์เซอร์ของคุณ",
+ "Link:": "ลิงก์:",
+ "Recipient may become aware of your timezone, convert time to UTC?": "ผู้รับอีเมลอาจทราบโซนเวลาของคุณได้ คุณต้องการแปลงโซนเวลาเป็น UTC หรือไม่",
+ "Use Current Timezone": "ใช้โซนเวลาปัจจุบัน",
+ "Convert To UTC": "แปลงเป็น UTC",
+ "Close": "ปิด",
+ "Encrypted note on %s": "เขารหัสบันทึกย่อบน %s",
+ "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "ไปที่ลิงก์นี้เพื่อดูบันทึกย่อทั้งหมด ส่ง URL นี้ให้ใครก็ได้เพื่อให้สามารถเข้าถึงบันทึกย่อได้",
+ "URL shortener may expose your decrypt key in URL.": "เครื่องมือสร้างลิงก์ย่ออาจเปิดเผยคีย์ถอดรหัสของคุณใน URL ได้",
+ "Save paste": "ดาวน์โหลดข้อมูลการฝากโค้ด",
+ "Your IP is not authorized to create pastes.": "IP ของคุณไม่ได้รับอนุญาตให้สร้างการฝากโค้ด",
+ "Trying to shorten a URL that isn't pointing at our instance.": "กำลังพยายามใช้เครื่องมือสร้างลิงก์ย่อ ที่ไม่ได้ชี้ไปที่อินสแตนซ์ของเรา",
+ "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "เกิดข้อผิดพลาดในการเรียก YOURLS อาจเป็นปัญหามาจากการกำหนดค่า เช่น \"apiurl\" หรือ \"signature\" ไม่ถูกต้องหรือขาดหายไป",
+ "Error parsing YOURLS response.": "เกิดข้อผิดพลาดในการแยกวิเคราะห์การตอบสนองของ YOURLS"
+}
diff --git a/js/privatebin.js b/js/privatebin.js
index fe326b49..5171477d 100644
--- a/js/privatebin.js
+++ b/js/privatebin.js
@@ -627,7 +627,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
* @prop {string[]}
* @readonly
*/
- const supportedLanguages = ['bg', 'ca', 'co', 'cs', 'de', 'el', 'es', 'et', 'fi', 'fr', 'he', 'hu', 'id', 'it', 'jbo', 'lt', 'no', 'nl', 'pl', 'pt', 'oc', 'ru', 'sk', 'sl', 'tr', 'uk', 'zh'];
+ const supportedLanguages = ['bg', 'ca', 'co', 'cs', 'de', 'el', 'es', 'et', 'fi', 'fr', 'he', 'hu', 'id', 'it', 'jbo', 'lt', 'no', 'nl', 'pl', 'pt', 'oc', 'ru', 'sk', 'sl', 'th', 'tr', 'uk', 'zh'];
/**
* built in language
@@ -815,6 +815,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
return n === 1 ? 0 : (n === 2 ? 1 : ((n < 0 || n > 10) && (n % 10 === 0) ? 2 : 3));
case 'id':
case 'jbo':
+ case 'th':
return 0;
case 'lt':
return n % 10 === 1 && n % 100 !== 11 ? 0 : ((n % 10 >= 2 && n % 100 < 10 || n % 100 >= 20) ? 1 : 2);
diff --git a/lib/I18n.php b/lib/I18n.php
index c3c635f7..5c469381 100644
--- a/lib/I18n.php
+++ b/lib/I18n.php
@@ -328,6 +328,7 @@ class I18n
return $n === 1 ? 0 : ($n === 2 ? 1 : (($n < 0 || $n > 10) && ($n % 10 === 0) ? 2 : 3));
case 'id':
case 'jbo':
+ case 'th':
return 0;
case 'lt':
return $n % 10 === 1 && $n % 100 !== 11 ? 0 : (($n % 10 >= 2 && $n % 100 < 10 || $n % 100 >= 20) ? 1 : 2);
diff --git a/tpl/bootstrap.php b/tpl/bootstrap.php
index 3dd49135..b3441a74 100644
--- a/tpl/bootstrap.php
+++ b/tpl/bootstrap.php
@@ -73,7 +73,7 @@ endif;
?>
-
+
diff --git a/tpl/page.php b/tpl/page.php
index f91cb7dd..42380abc 100644
--- a/tpl/page.php
+++ b/tpl/page.php
@@ -51,7 +51,7 @@ endif;
?>
-
+