Porting Amharic Translation System ( PHP + MySQL )
I have tried porting Amharic Translation System from Oracle Database to MySQL. If you want to know what is Amharic, look at below: https://en.wikipedia.org/wiki/Amharic 1. Server Module table: DICTIONARY Field Type Null Default NSEQ int(4) NO NULL NCHAPTER ...
I have tried porting Amharic Translation System from Oracle Database to MySQL.
If you want to know what is Amharic, look at below:
https://en.wikipedia.org/wiki/Amharic
1. Server Module
table: DICTIONARY
Field | Type | Null | Default |
---|---|---|---|
NSEQ | int(4) | NO | NULL |
NCHAPTER | int(2) | NO | NULL |
SAMHARIC | varchar(40) | NO | NULL |
SBUNRUI | varchar(10) | YES | NULL |
NPAGE | int(4) | YES | NULL |
SSETTO1 | varchar(20) | YES | NULL |
SJAPANESE1 | varchar(40) | NO | NULL |
STAISHO1 | varchar(20) | YES | NULL |
SSETTO2 | varchar(20) | YES | NULL |
SJAPANESE2 | varchar(40) | YES | NULL |
STAISHO2 | varchar(20) | YES | NULL |
CREATE script
DROP TABLE DICTIONARY; CREATE TABLE DICTIONARY( NSEQ INT(4) NOT NULL, NCHAPTER INT(2) NOT NULL, SAMHARIC VARCHAR(40) NOT NULL, SBUNRUI VARCHAR(10), NPAGE INT(4), SSETTO1 VARCHAR(20), SJAPANESE1 VARCHAR(40) NOT NULL, STAISHO1 VARCHAR(20), SSETTO2 VARCHAR(20), SJAPANESE2 VARCHAR(40), STAISHO2 VARCHAR(20) );
execute
source TABLE_DICTIONARY.sql;
INERT script
INSERT INTO DICTIONARY (NSEQ, NCHAPTER, SAMHARIC, SBUNRUI, NPAGE, SSETTO1, SJAPANESE1, STAISHO1, SSETTO2, SJAPANESE2, STAISHO2) VALUES(1,1,'ጤና ይስጥልኝ','ስም',NULL,NULL,'こんにちは',NULL,NULL,NULL,NULL); ... ... ... COMMIT;
This file is very long.
If you want it, you can get from bellow:
https://github.com/yokotakaoru/php-renshuu/blob/master/translation/T_AMHARIC_DICTIONARY_INSERT.sql
execute
source INSERT_DICTIONARY.sql;
PROCEDURE PTRANSRATION
drop PROCEDURE PTRANSRATION; DELIMITER // CREATE PROCEDURE PTRANSRATION( /*===================================================== Purpose: Translation Created date: 2015/07/17 Created by: Yokota Kaoru =====================================================*/ /*----------------------------------------------------- Parameters ( arguments ) -----------------------------------------------------*/ IN PnDetail INT -- Detail flag ,IN PsAmharic VARCHAR(2000) -- Ordinary sentence ,OUT PsJapanese VARCHAR(2000) -- Translated sentence ) BEGIN /*----------------------------------------------------- Variables -----------------------------------------------------*/ DECLARE LnDone INT; -- CURSOR control DECLARE LsJapanese VARCHAR(200); -- Japanese word DECLARE LsSAMHARIC VARCHAR(40); -- DB DECLARE LsSSETTO1 VARCHAR(20); -- DB DECLARE LsSJAPANESE1 VARCHAR(40); -- DB DECLARE LsSTAISHO1 VARCHAR(20); -- DB /*----------------------------------------------------- CURSOR -----------------------------------------------------*/ DECLARE myCur CURSOR FOR select SAMHARIC ,SSETTO1 ,SJAPANESE1 ,STAISHO1 from DICTIONARY where SBUNRUI IS NOT NULL OR NCHAPTER = 0 order by length(SAMHARIC) desc; /*----------------------------------------------------- exception -----------------------------------------------------*/ DECLARE EXIT HANDLER FOR NOT FOUND SET LnDone = 0; /*----------------------------------------------------- ▼▼ Main routine ▼▼ -----------------------------------------------------*/ -- format SET PsJapanese = PsAmharic; SET LnDone = 1; -- CURSOR open OPEN myCur; WHILE LnDone DO -- read 1 record FETCH myCur INTO LsSAMHARIC, LsSSETTO1, LsSJAPANESE1, LsSTAISHO1; -- translation SET LsJapanese = LsSJAPANESE1; -- Detail flag ON and prefix on IF( PnDetail = 1 AND LsSSETTO1 IS NOT NULL) THEN SET LsJapanese = CONCAT( '(', LsSSETTO1, ')', LsJapanese ); END IF; -- Detail flag ON and suffix on IF( PnDetail = 1 AND LsSTAISHO1 IS NOT NULL) THEN SET LsJapanese = CONCAT( LsJapanese, '(', LsSTAISHO1, ')' ); END IF; SET PsJapanese = replace( PsJapanese, LsSAMHARIC, LsJapanese ); END WHILE; -- CURSOR close CLOSE myCur; /*----------------------------------------------------- ▲▲ Main routine ▲▲ -----------------------------------------------------*/ END // DELIMITER ;
execute
source PROC_PTRANSRATION.sql;
CALL
CALL PTRANSRATION( 1, 'ጤና ይስጥልኝ።', @GsJapanese ); select @GsJapanese;
2. Client Module
In this case, VC++ or Java are better.
As we know, PHP is weak for screen keeping.
But this post is practice of PHP.
If we use Ubuntu OS, we have to put PHP files under /opt/lampp/htdocs/xampp/.
In this case, we can create php directory like bellow:
/opt/lampp/htdocs/xampp/php
transration01.php
<?php // DB connection $host = 'localhost'; $user_name = 'root'; $user_password = '; $database_name = 'kaoru'; // visiting check if( isset($_COOKIE['visitcount']) ){ $visit = $_COOKIE['visitcount']; } // first visiting else{ $visit = 0; } $visit++; setcookie( 'visitcount', $visit ); // unlimited COOKIE ?> <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="style_PC.css" type="text/css"> <title>Amharic translation</title> </head> <body> <form action="<?php echo $_SERVER['SCRIPT_NAME'] ?>" method="post"> <textarea name="tAmharic" rows=6><?php // first visiting if( $visit <= 1 ) { echo "ጤና ይስጥልኝ።"; } // more than 2 times else{ echo $_POST['tAmharic']; } ?></textarea><br> <input type="checkbox" name="cDetail" value="Detail" >詳細説明あり<br> <input type="submit" value="翻訳"> </form> </body> </html> <?php // translation if( $_POST ){ $LsAmharic = $_POST['tAmharic']; // Detail Mode if( isset( $_POST["cDetail"] ) ){ $LnDetail = 1; } else{ $LnDetail = 0; } // connecting MySQL $mysqli = new mysqli( $host, $user_name, $user_password, $database_name ); $mysqli->set_charset( 'utf8' ); // execute stored procedure if( $mysqli->query( "CALL PTRANSRATION( " . $LnDetail . " , '" . $LsAmharic. "', @LsJapanese )" ) ){ $result = $mysqli->query( "SELECT @LsJapanese AS LsJapanese" ); $obj = $result->fetch_object(); } echo "<textarea rows=6>" . $obj->LsJapanese . "</textarea>"; // disconnecting MySQL $mysqli->close(); } ?>
style_PC.css
@charset "UTF-8"; body{ margin: 0 auto; padding: 10px; awidth: 600px; } textarea{ awidth: 100%; }
Open browser and access to "localhost/xampp/php/transration01.php"
Amharic sentence
input this example
ያንድ ሰው የልብ ትርታ በደቂቃ ከ60 እስከ 80 ይደርሳል። በዓመት 40 ሚሊዮን ያህል ጊዜ ይመታል ማለት ነው። በያንዳንዷ ትርታ ወቅት 1/4 ሊተር ደም ወደ ልብ ይገባል ማለት ነው። ልብ በአንድ ቀን ውሎው 2200 ጋሎን ያህል ደም ይረጫል።
The translation has been done.
Thank you for reading!