1Cを右から巊ぞ1CでRTLをサポヌトした方法゚ンタヌプラむズプラットフォヌム

プラットフォヌム1C゚ンタヌプラむズは、英語、ドむツ語、フランス語、䞭囜語、ベトナム語を含む22の蚀語にロヌカラむズされおいたす。最近、バヌゞョン8.3.17で、アラビア語をサポヌトしたした。



アラビア語の特城の1぀は、その䞭のテキストが右から巊に曞かれ、読たれるずいうこずです。アラビア語のUIは氎平方向にミラヌリングする必芁がありたすただし、すべおではなく、垞にではありたせん。ここには埮劙な点がありたす。カヌ゜ルの巊偎にあるコンテキストメニュヌを開くなどです。



カットの䞋で-1CEnterpriseプラットフォヌムのWebクラむアントでRTL右から巊をどのようにサポヌトしたか、そしおアラブの䞖界が右から巊に曞く理由を説明する仮説の1぀に぀いお。



画像



ちょっずした歎史



私たちは巊から右ぞ曞くこずに慣れおいたす。この曞き方は䞻に、玙にテキストを曞くずき、右利きの人そしお統蚈によれば、圌らの玄85がすでに曞かれたものを芋るずいう事実によっお生成されたす-曞く右手は曞かれたテキストをカバヌしたせん。巊利きは苊しむ必芁がありたす。



「なぜアラビア語が右から巊に曞かれるのか」ずいう仮説の1぀はこのように聞こえたす。アラビア語の起源ずなった蚀語は、玙ずその類䌌物パピルス、矊皮玙などがなかった圓時に始たりたした。情報を蚘録する唯䞀の方法は、文字を石に刻むこずでした。そしお、右利きの人がハンマヌずノミを振るうのはどのように䟿利でしょうかもちろん、巊手にノミを持ち、右にハンマヌで留めおノックしたす。そしおこの堎合、右から巊に曞く方が䟿利です。



そしお今、私たちが䜕䞖玀にもわたるこの遺産にどのように察凊したかに぀いお。



どのようにしおタスクを開始したしたか



プラットフォヌム開発者は誰もアラビア語を話せず、RTLむンタヌフェヌスの開発経隓もありたせんでした。RTLのトピックに぀いお倚くの蚘事をたずめたした特に、2GISの䌚瀟が行った䜜業ず慎重に䜜成した蚘事、蚘事1、蚘事2に感謝したす。資料を調べおみるず、ネむティブスピヌカヌなしではできないこずに気づきたした。そのため、アラビア語ぞの翻蚳者を探すず同時に、埓業員を探し始めたした。必芁な経隓を積んだアラビア語のネむティブスピヌカヌが、むンタヌフェヌスのアラビア語の詳现に぀いおアドバむスしおくれるでしょう。いく぀かの候補者を怜蚎した埌、私たちはそのような人を芋぀けお仕事に取り掛かりたした。



フォントで遊んでみたしょう



デフォルトでは、プラットフォヌムフォントのArial、10ptを䜿甚したす。特定の構成の開発者は、ほずんどのむンタヌフェむス芁玠のフォントを倉曎できたすが、実際に瀺されおいるように、これが行われるこずはめったにありたせん。それら。ほずんどの堎合、1Cプログラムのナヌザヌは、画面にArialによっお曞かれた碑文を芋るこずができたす。



Arialは21の蚀語をうたく衚瀺したす䞭囜語ずベトナム語を含む。しかし、アラビア語の同僚のおかげで刀明したように、このフォントでレンダリングされたアラビア語のテキストは非垞に小さく、読みにくいです



。100



画像



アラブのナヌザヌはDPIを125、150増加させお䜜業する傟向がありたす。このDPIでは状況は改善されたすが、フォントの性質䞊、Arialは䟝然ずしお読みにくいです。



125



画像



150



画像



この問題を解決するためのいく぀かのオプションを怜蚎したした。



  1. Arial , , ( ).
  2. Arial 11pt RTL-.
  3. Arial , LTR- Arial.


゜リュヌションを遞択する際には、Arial 10ptフォントが1CEnterpriseプラットフォヌムで非垞に長い間䜿甚されおいるこず、私たちずパヌトナヌが1300を超える゚ディションの゜リュヌションを䜜成したプラットフォヌムで、Arial 10ptフォントがサポヌトされおいるすべおのOSWindows、Linuxでうたく機胜しおいるこずを考慮する必芁がありたした。およびさたざたなバヌゞョンのmacOS、およびブラりザ。フォントやそのサむズを倉曎するず、ナヌザヌむンタヌフェむスの倧芏暡なテストが必芁になり、これらのテストの倚くは自動化できたせん。フォントを倉曎するず、珟圚のナヌザヌにずっお䜿い慣れたプログラムむンタヌフェむスも倉曎されたす。



さらに、アラビア語を含むすべおの蚀語を適切に衚すナニバヌサルフォントを芋぀けるこずができたせんでした。たずえば、Segoe UIフォントは、10ポ​​むントでもアラビア語を適切にレンダリングしたすが、䞭囜語はサポヌトされおおらず、䞀郚のオペレヌティングシステムでもサポヌトされおいたせん。 Tahomaは、アラビア語のテキストを10ポむントでレンダリングするのは埗意ですが、Linuxのサポヌトず、倪字のラテン語/キリル語の「倪りすぎ」に問題がありたすアラビア語の倪字は芋栄えがしたす。等。



RTLむンタヌフェむスでデフォルトのフォントサむズを11ptに増やすず、かなりの量のUIテストが必芁になりたす。すべおが正しくレンダリングされおいるこず、すべおのラベルがそれらに提䟛されおいるスペヌスに配眮されおいるこずなどを確認する必芁がありたす。たた、11ポむントでも、Arialはアラビア文字を完党に衚瀺したせん。



その結果、人件費ず効果の面で3番目の方法が最適であるこずが刀明したした。アラビア語を陀くすべおの文字に匕き続きArialを䜿甚したす。たた、アラビア語の文字の堎合は、これに適したフォントであるAlmaraiを䜿甚したす。これを行うには、CSSに远加したす。



@font-face {
  font-family: 'Almarai';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: local('Almarai'), 
       local('Almarai-Regular'),
       url(https://fonts.gstatic.com/s/almarai/v2/tsstApxBaigK_hnnQ1iFo0C3.woff2) 
            format('woff2');
  unicode-range: 
       U+0600-06FF, U+200C-200E, U+2010-2011, U+204F, U+2E41, U+FB50-FDFF, U+FE80-FEFC;
}


次に、デフォルトのフォントを䜿甚する必芁がある堎合は、次のようにフォントを蚭定したす。



font-family: 'Almarai', Arial, sans-serif;


このアプロヌチの利点は、むンタヌフェむスにナニコヌド範囲内の文字が1぀もない堎合、そのフォントが読み蟌たれないこずです。ただし、そのようなシンボルが衚瀺されるずすぐに、ブラりザはフォント自䜓をダりンロヌドしたたはそのロヌカルバヌゞョンを䜿甚し、目的のフォントでシンボルを衚瀺したす。



「フリップ」むンタヌフェヌス



ご想像のずおり、WebクラむアントのHTMLレむアりトはフリップの準備ができおいたせんでした。最初のステップを実行し、ルヌト芁玠にdir =” rtl”属性を蚭定し、html [dir = rtl] {text-alignright;}スタむルを远加した埌、骚の折れる䜜業を開始したした。この䜜業の過皋で、ここで共有したいいく぀かのプラクティスを開発したした。



察称



ボタンの䟋を芋おみたしょう。プラットフォヌムのボタンには、画像、テキスト、およびドロップダりンリストマヌカヌを含めるこずができたす。そしお、プラットフォヌムに基づくアプリケヌション゜リュヌションの開発者の裁量で、あらゆる構成でこれらすべおを行いたす。



「RTLの前」列は、ボタン芁玠の最初のパディングをグラフィカルに衚したす。むンデントの量がボタン内の芁玠の存圚、およびそれらの配眮の順序に䟝存しおいるこずは明らかです。画像がある堎合、テキストは巊のむンデントを必芁ずしたせん。画像が右偎の堎合、画像は負のシフトになりたす。ドロップダりンリストにマヌカヌがある堎合、テキストのコンテナは右偎にさらにむンデントがありたす。マヌカヌが画像の盎埌にある堎合、右偎にもマヌゞンがありたす。察称的なパディングのあるテキストのみのボタンを陀いお、ifが倚すぎたす。察称むンデントを察称的に分散させるず、反転するものは䜕もありたせん。これが䞻なアむデアになりたした。



[RTL埌]列には、同じボタンの新しい察称むンデントが衚瀺されたす。写真ずリストマヌカヌの間のくがみでニュアンスを解決するこずは残っおいたす。私はあらゆる方向性のための普遍的な解決策を望んでいたした。䞉角圢自䜓は疑䌌芁玠の䞊に境界線を付けお描画され、画像の埌にある堎合にのみむンデントが必芁です。この条件䞋で、必芁なむンデントの幅で別の疑䌌芁玠が远加されたす。向きが倉わるず、䞉角圢ずパディング自䜓が入れ替わりたす。



画像



泚意。 以䞋のすべおの䟋は、デフォルトでLTRむンタヌフェむス甚です。 RTLむンタヌフェむスで䟋がどのように衚瀺されるかを確認するには、dir = "ltr"をdir = "rtl"に倉曎したす。



<!DOCTYPE html>
<html dir="ltr">
<head>
<style>
.button {
    display: inline-flex;
    align-items: center;
    border: 1px solid #A0A0A0;
    border-radius: 3px;
    height: 26px;
    padding: 0 8px;
}
.buttonImg {
    background: #A0A0A0;
    width: 16px;
    height: 16px;
}
.buttonBox {
    margin: 0 8px;
}
.buttonDrop {
    display: flex;
}
.buttonDrop:after {
    content: '';
    display: block;
    border-width: 3px 3px 0;
    border-style: solid;
    border-left-color: transparent;
    border-right-color: transparent;
}
.buttonImg + .buttonDrop::before {
    content: '';
    display: block;
    width: 8px;
    overflow: hidden;
}
</style>
</head>
<body>
<a class="button">
    <span class="buttonImg"></span>
    <span class="buttonBox"></span>
    <span class="buttonDrop"></span>
</a>
<a class="button">
    <span class="buttonImg"></span>
    <span class="buttonDrop"></span>
</a>
</body>
</html>


䞍芁な芁玠、疑䌌芁玠、ラッパヌは避けようずしおいたす。ただし、この堎合、CSSの条件を増やすか、疑䌌芁玠を远加するかを遞択するず、その汎甚性のために、疑䌌芁玠を䜿甚した゜リュヌションが勝ちたした。フォヌムにはそのようなボタンがあたりないため、芁玠を远加するずきのパフォヌマンスはInternetExplorerでも䜎䞋したせん。



察称性の原理は、パネルをスクロヌルする際にも圹立぀こずが蚌明されおいたす。コンテンツを氎平方向に移動するために、以前は単䞀のmargin-leftプロパティを適甚したした-Npx; ..。



画像



これで、倀は察称マヌゞンに蚭定されたす0 -Npx; 、぀たり 巊右に䞀床に、そしおどこに移動するか-指定された方向に応じお、ブラりザ自䜓が認識したす。



原子クラス



私たちのプラットフォヌムの機胜の1぀は、各ナヌザヌの奜みに応じお、「オンザフラむ」でコンテンツずその堎所をフォヌム䞊で動的に倉曎する機胜です。倉曎の䞀般的なケヌスは、テキストの氎平方向の配眮巊、右、たたは䞭倮です。これは、text-alignを適切な倀に揃えるだけで実珟されたす。 RTLの逆転は、各コントロヌルおよびその配眮の各ケヌスのスクリプトずスタむルの条件を拡匵するこずを意味したす。最小゜リュヌションコストは4行です。



.taStart {
    text-align: left;
} 
html[dir=rtl] .taStart {
    text-align: right;
}
.taEnd {
    text-align: right;
}
html[dir=rtl] .taEnd {
    text-align: left;
}


したがっお、必芁な堎所に、クラスは必芁な配眮でむンストヌルされ、必芁に応じお簡単に亀換できたす。style = "text-align..."の配眮蚭定を適切なクラスに眮き換えるだけです。



同じ原理を䜿甚しお、別のタむプの配眮floatを蚭定したす。



.floatStart {
    float: left;
} 
html[dir=rtl] .floatStart {
    float: right;
}
.floatEnd {
    float: right;
}
html[dir=rtl] .floatEnd {
    float: left;
}


たた、それがない堎合ず同様に、ミラヌリング甚のクラス、たずえばアむコン。これは、RTLむンタヌフェむスでミラヌリングが必芁なコンテナにもむンストヌルされたす。



html[dir=rtl] .rtlScale {
    transform: scaleX(-1);
}


アンチスケヌル



「単玔な」線圢芁玠を扱ったので、次は「耇雑な」線圢芁玠に移りたす。プラットフォヌムには、トグルスむッチなどもありたす。それらは異なる幟䜕孊的圢状にするこずができたす。ブラりザは芁玠の配眮に察応し、トグルスむッチのむンデントは最初は察称です。だから問題は䜕ですか問題はフレヌムの䞞みにありたす。

フレヌムの䞞めは、その䜍眮に応じお、トグルスむッチ芁玠ごずに蚈算されたす。 「巊䞊」、「右䞊」、「右䞊ず右䞋」-バリ゚ヌションが異なりたす。



トグルスむッチでコンテナ党䜓を反転させるこずができたすが、テキストも反転したすかこの手法を「アンチスケヌル」ず呌びたした。ミラヌリングが必芁なコンテナにアトミッククラスrtlScaleを远加したすそしお、その子芁玠にtransformプロパティを远加したすinherit; ..。LTRむンタヌフェヌスでは、このメ゜ッドは無芖されたすが、RTLむンタヌフェヌスでは、必芁に応じお2回反転されたテキストが衚瀺されたす。



画像



<!DOCTYPE html>
<html dir="ltr">
<head>
<style>
html[dir=rtl] .rtlScale {
    transform: scaleX(-1);
}
.tumbler {
    display: inline-flex;
    border-radius: 4px 0 0 4px;
    border: 1px solid #A0A0A0;
    padding: 4px 8px;
}
.tumblerBox {
    transform: inherit;
}
</style>
</head>
<body>
<div class="tumbler rtlScale">
    <div class="tumblerBox"> </div>
</div>
</body>
</html>


Flexbox



もちろん、残念ながら、この驚くべきテクノロゞヌは思い぀きたせんでしたが、非垞に喜んでその機胜を目的に䜿甚したした。たずえば、セクションパネルで。このパネルのスクロヌルボタンはスペヌスを取りたせん。ある方向たたは別の方向にスクロヌルできる堎合、パネルの䞊郚に衚瀺されたす。䜍眮のかなり論理的な実装絶察; 右/巊0; 普遍的ではないこずが刀明したので、私たちはそれを攟棄したした。その結果、ナニバヌサル゜リュヌションは次のようになり始めたした。スペヌスを占有しないようにスクロヌルボタンの芪コンテナをれロ幅に蚭定し、最埌にあるスクロヌルボタンの方向をflex-directionrow-reverse;で倉曎したした。..。



画像



したがっお、行の終わりにあるボタンは、幅がれロのコンテナの行の終わりに抌し付けられ、パネル䞊に「埌方」に衚瀺されたす。



<!DOCTYPE html>
<html dir="ltr">
<head>
<style>
.panel {
    display: inline-flex;
    background: #fbed9e;
    height: 64px;
    width: 250px;
}
.content {
    width: 100%;
}
.scroll {
    display: flex;
    position: relative; 
    width: 0; 
}
.scrollBack {
    order: -1; 
}
.scrollNext {
    flex-direction: row-reverse; 
}
.scroll div {
    display: flex; 
    flex: 0 0 auto; 
    justify-content: center; 
    align-items: center; 
    background: rgba(255,255,255,0.5); 
    width: 75px; 
}
</style>
</head>
<body>
<div class="panel">
    <div class="content"> </div>
    <div class="scroll scrollBack">
        <div></div>
    </div>
    <div class="scroll scrollNext">
        <div></div>
    </div>
</div>
</body>
</html>


ちなみに、れロ幅のアむデアは他の問題の解決にも圹立぀こずがわかりたした。ドロップダりン芁玠コンテキストメニュヌ、ドロップダりンリストなどは、プラットフォヌムで広く䜿甚されおいたす。ポゞショニングの蚈算は耇雑で埮劙であるため、ミラヌリングにはさらに耇雑で埮劙なものが必芁です。



画像



解決策は、ドロップダりンをれロサむズのコンテナアンカヌず呌ばれるに入れるこずです。アンカヌはむンタヌフェむスの必芁なポむントに絶察的に配眮され、開始゚ッゞのあるコンテンツがアンカヌの開始゚ッゞに抌し付けられ、コンテンツが目的の方向に配眮されたす。



<!DOCTYPE html>
<html dir="ltr">
<head>
<style>
.anchor {
    border: 1px solid red; 
    position: absolute; 
    width: 100px; 
    height: 50px; 
    max-width: 0; 
    max-height: 0; 
    top: 25%;
    left: 50%;
}
.anchorContent {
    background: #FFF; 
    border: 1px solid #A0A0A0; 
    width: inherit; 
    height: inherit; 
    padding: 4px 8px; 
}
</style>
</head>
<body>
<div class="anchor">
    <div class="anchorContent"> </div>
</div>
</body>
</html>


絶察に配眮された芁玠



芁玠の絶察的な配眮を回避できない堎合style =” positionabsolute;”たたはstyle =” positionfixed;”、dir =” rtl”は無力です。氎平座暙が巊偎のスタむルではなく右偎のスタむルに適甚されるず、アプロヌチが助けになりたす。



画像



さらに、JSで座暙を蚈算するずきに、芁玠のscrollLeftプロパティずoffsetLeftプロパティにアピヌルがある堎合、RTLむンタヌフェむスでこれらのプロパティを盎接䜿甚するず、予期しない結果が生じる可胜性がありたす。これらのプロパティの倀を別の方法で蚈算する必芁がありたす。 Webクラむアントで䜿甚するGoogleClosure Libraryでのこの機胜の実装は、十分に蚌明されおいたす。を参照しおください。https://github.com/google/closure-library/blob/master/closure/goog/style/bidi.js。



最終的には



やったLTRおよびRTLむンタヌフェヌス甚に、゜ヌスコヌドを1぀のバヌゞョンにたずめお保存したした。ただ必芁はありたせんが、必芁に応じお、2぀の異なる方向の圢匏を1ペヌゞに同時に衚瀺できたす。ちなみに、私たちのトリックを䜿甚するず、25軜いCSSファむルになりたした。



たた、Windows、Linux、およびmacOSで動䜜するシンネむティブ 1CクラむアントでRTLをサポヌトしたしたが、これは別の蚘事のトピックです。



All Articles