[질문] 프로그래밍시 아랍어 고려해서...

icabord의 이미지

안녕하세요.

오늘도 질문하나 올립니다.;;;

거의 안계실 것 같지만, 프로그래밍시에 아랍어를 고려해서 프로그래밍 해보신 분 계신가요?

아랍어의 경우 자모(자음모음)가 문장에 위치하는 것에 따라 모양이 바뀌는데

이러한 글자 모양이 바뀌는 룰에 대해서 잘 아시는 분 있으시면 답변좀 부탁드릴께요.

그외에도 불규칙 에 대해서도 아시면 더 좋구요.

책을 추천해 주시면 더 좋습니다.

neogeo의 이미지

http://gpgstudy.cafe24.com/cafe24board/view.php3?code=t00323401&idx=173&mode=view&page=1

http://www.gpgstudy.com/gpgiki/%EC%9C%88%EB%8F%84%EC%9A%B0%20%EB%8B%A4%EA%B5%AD%EC%96%B4%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

별 도움이 안될지는 모르지만 gpg 쪽에서 태국어나 서아시아어때문에 로컬라이징을 고민하시는 분 이야기가 종종 있었습니다.

Neogeo - Future is Now.

Neogeo - Future is Now.

nouveou의 이미지

ㅎㅎ 저도 지금 아랍어 프로그래밍 하고 있는데
피똥싸고 있습니다. 굉장히 힘드실껍니다.
우선 제가 아는 한에서 설명드리겠습니다.
이것은 arbic unicode에 한해서 말씀드립니다.
일단 아랍어가 우리글과 반대로 오른쪽에서 왼쪽으로 쓰시는건 아시죠
아랍어 알파벳은 28자인데요.. 어두형과 어중형 어말형, 독립형으로 나뉩니다.
독립형은 이 글자 그대로 쓰면 됩니다. 어두형과 어중형 어말형은 이글자가 같은 글자라도 앞뒤에 무슨 글자가 오느냐에 따라서 present form 즉 표현 방법이 틀려져서 전혀 다른글자 모양이 됩니다.
어두형, 어말형 , 어중형은 인터넷에서 아랍어 알파벳 관련해서 찾아보시면 되고요 저는 www.unicode.org(UNICODE 공식 사이트)에서 많은 정보를 얻고 있습니다.
기본적인 예기는 여기까지 하고요 저는 아랍어를 공부하거나 말하려는 사람이 아니라 프로그래머 이기에 님도 프로그래머니까 저는 프로그래밍 관점에서 자세히 설명 하겠습니다.
아랍어의 unicode range는 0x0600부터 0x06FF까지 입니다.
그리고 0xFB50에서 0xFBFF는 arabic present form A , 0xFE70에서 0xFEFF까지를 arbic present form B라고 합니다.

일단 예를 들어서 unicode로 인코딩된 아랍어 텍스트 파일이 하나 있다고 가정합니다.
파일을 읽었는데 0x0641이라는 글자가 있습니다. (아랍어 알파벳으로 보면 ㄴ짜 옆으로 한거에 위에 점이 있는겁니다.)
이글자가 독립적인 글자로 쓰였다면 아까위에서 말씀드린 present form B의 0xFED1으로 표시됩니다.
그런데 이글자가 어말형으로 표시된다면 0xFED1+1이라는 글자로 표시되구요
어두형으로 표시되면 0xFED1+2이라는 글자로 표시됩니다.
그리고 어중형으로 표시되면 0xFED1+3이라는 글자로 표시되고요
뭐 이런식입니다.

이 어중형과 어두형, 어말형이냐 독립형이냐를 아는 방법은 자기 앞뒤 글자를 보고 아는 겁니다.
그러니까 프로그래밍 할때 아랍어 한줄을 읽어서 loop를 돌면서 앞뒤글자를 파악하면서 위 방법데로 맵핑하시면 됩니다.
이 알고리즘이랑 맵핑테이블은 www.unicode.org 사이트와 GTK의 pango 라이브러리 보시면 잘 나와있습니다.

특히 pango 라이브러리 보시면 도움되실껍니다. (저도 그거보고 공부중입니다...)
moudles 디렉토리안에 arbic 디렉토리보시면 소스가 있습니다. 도움 되실꺼에요
저도 아직 프로그래밍 하는 중이라 이 이상 더 설명하기는 아직 내공부족이구요..
공부하면서 더 아는거 있으면 말씀드리죠..

두서 없는 글이었습니다. 좀 도움 되셨으면 합니다.

오호라의 이미지

left Right 가 아닌 Right Left 라고 생각해보세요.

정말 해가 서쪽에서 뜨는 꼴이죠.

Computing machine 은 미쿡에서 만들었죠. 미쿡은 영어를 쓰죠. LR이죠.

str*() 은 LR 이죠.

stdio*() 전부 LR 이죠...

대한민쿡도 LR 이죠.

생각만해도 힘들어 집니다. ^^;

vim 에서는 RL 모드가 가능합니다. ^^;

Hello World.

neogeo의 이미지

메모리에는 똑같이 Left to Right 로 담는거고 '화면에 뿌리는것'만 고쳐서 하면 됩니다.

그렇게 복잡하게 고민안하셔도 되고 문제는 문자의 완성이나 의미해석이 상황에 따라 바뀔 수 있으므로 그걸 문법도 모르는 상태에서 구현하려는게

골치아프시니까 구현 예를 찾아보시는 것 같습니다.

Neogeo - Future is Now.

Neogeo - Future is Now.

오호라의 이미지

역시 정답은 아닐듯 싶습니다.

단순한 출력문만 각 언어별로 출력한다면 문제 없지만...

일단 스트링가지고 논다는 측면에서는 출력만 고려하기에는...

암튼. 평생한번 아랍어쪽 개발할 날이 올까요? ^^

Hello World.

익명 사용자의 이미지

오래전 답변이지만 현재도 많은 도움이 되었습니다.
아랍어 유니코드의 프레젠테이션 폼이 변화용 폰트였었군요.
아랍어에 대해서 좀 알고 있었으면 좀더 쉬었을 것인데 pango도 분석해 봐야겠어요.^^

icabord의 이미지

질문 올린지 오랜만에 다시 확인했습니다.ㅋㅋ

답변 해주셨던 분들 감사합니다. 많은 도움이 되었습니다. ㅋㅋ

너무 늦게 답글 달아서 뻘쭘하지만;;;

도움받은 것을 잊으면 안되니...

즐거운 저녁 || 끝이 보이는 야근

되시길...

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.