CINXE.COM
LDML
<!DOCTYPE html> <html lang='en'><head> <meta charset="utf-8"> <meta name='description' content='SIL Keyman is adding support for the LDML Keyboard specification.'> <title>LDML</title> <script src="/cdn/deploy/js/sentry.bundle.5.28.0.min.94ac314aeac15a10211c943fbbb0b85b.js"></script> <script> Sentry.init({ dsn: "https://44d5544d7c45466ba1928b9196faf67e@o1005580.ingest.sentry.io/5983516", environment: location.host.match(/\.localhost$/) ? 'development' : location.host.match(/(^|\.)keyman-staging\.com$/) ? 'staging' : 'production', }); </script> <meta content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" name="viewport"> <link rel='shortcut icon' href="/cdn/deploy/img/favicon.56e7a2d76793fb59cca3133b8bb1dd3d.ico"> <link rel="stylesheet" type="text/css" href="/cdn/deploy/css/template.864a3d9cf657ccc5184e90bc0499facf.css"> <link rel="stylesheet" type="text/css" href="/cdn/deploy/css/prism.2642fefedd34b501b8146fcab378f084.css"> <link href='https://fonts.googleapis.com/css?family=Cabin:400,400italic,500,600,700,700italic|Source+Sans+Pro:400,700,900,600,300|Noto+Serif:400' rel='stylesheet' type='text/css'> <script src='/cdn/deploy/js/jquery1-11-1.min.8101d596b2b8fa35fe3a634ea342d7c3.js'></script> <script src='/cdn/deploy/js/bowser.es5.2.9.0.min.66fb5ded26b5d86decaa5cc59ba79320.js'></script> <script src='/cdn/deploy/js/kmlive.35b6e695a0ef8a8ff1596aee24761420.js'></script> <script src='/cdn/deploy/js/prism.5b83c23fb1534be9d17bc2cd59e236e3.js'></script> </head> <body data-device="Windows"> <div id="phone-menu"> <div id="phone-menu-inner"> <div class="phone-menu-item"> <h3>Keyboards</h3> <form method="get" action="/keyboards" name="fsearch"> <input id="language-search2" type="text" placeholder="Enter language" name="q"> <input id="search-submit2" type="image" src="/cdn/deploy/img/search-button.4ded2599366e38b689e248c939980b25.png" alt="search button" value="Search" onclick="if(document.getElementById('language-search2').value==''){return false;}"> </form> </div> <div class="phone-menu-item"> <h3>Products</h3> <ul> <li><a href="/windows/">Keyman 17.0 for Windows</a></li> <li><a href="/mac/">Keyman 17.0 for macOS</a></li> <li><a href="/linux/">Keyman 17.0 for Linux</a></li> <li><a href="/keymanweb/">KeymanWeb.com</a></li> <li><a href="/iphone/">Keyman 17.0 for iPhone</a></li> <li><a href="/ipad/">Keyman 17.0 for iPad</a></li> <li><a href="/android/">Keyman 17.0 for Android</a></li> <li><a href="/bookmarklet/">Keyman Bookmarklet</a></li> </ul> <h3>Downloads</h3> <ul> <li><a href='/downloads/'>Current release versions</a></li> <li><a href='/downloads/pre-release/'>Pre-release versions</a></li> <li><a href="/downloads/archive/">Older versions</a></li> </ul> </div> <div class="phone-menu-item"> <h3>Developer Tools</h3> <ul> <li><a href="/developer/">Keyman Developer 17.0</a></li> <li><a href="/engine/">Keyman Engine for Desktop</a></li> <li><a href="/engine/">Keyman Engine for Web</a></li> <li><a href="/engine/">Keyman Engine for iOS</a></li> <li><a href="/engine/">Keyman Engine for Android</a></li> </ul> </div> <div class="phone-menu-item"> <h3>About</h3> <ul> <li><a href="/about/">About Keyman</a></li> <li><a href="/about/get-involved">Get Involved</a></li> <li><a href="/training">Training Events</a></li> <li><a href="/free/">Free on all Platforms</a></li> <li><a href="/ldml/">LDML Support</a></li> <li><a href="/contact/">Contact Us</a></li> <li><a href="https://blog.keyman.com">Keyman Blog</a></li> <li><a href="/testimonials/">Testimonials</a></li> <li><a href="/search/">Search Site</a></li> </ul> </div> <div class="phone-menu-item"> <h3>Help</h3> <ul> <li><a href="https://help.keyman.com">Help and Documentation</a></li> </ul> </div> </div> </div> <div id="container" class="page-default"> <div class="header"> <img id="show-phone-menu" src="/cdn/deploy/img/phonehide.ca5b6569ec86dfcbdff8ca4008c96283.png" alt="menu toggle" /> <a id="home-link" href="/"><img id="logo" src="/cdn/deploy/img/logo2.ba10b4af03869e69115ce84380e980aa.png" alt='Keyman Logo' /></a> <img id="header-bottom" src="/cdn/deploy/img/headerbar.5b66d10475396d1a17cb0d687f794262.png" alt='Header bottom' /> <div id="help"> <form action="/search/" method="get" role="search"> <div class="search-wrap"> <label for="main-q" class="offscreen">Search</label> <input type="search" id="main-q" name="q" placeholder="Search" data-value="" value="" /> <button type="submit" class="offscreen">Search</button> </div> </form> <p id="donate"><a href="/donate">Donate</a></p> <p><a href="https://help.keyman.com" target="blank">Support<img src="/cdn/deploy/img/helpIcon.af6fa8bce63e1210428250d9b45929c2.png" alt="help icon"></a></p> </div> </div> <div id="top-menu-bg"></div> <div id="top-menu1"> <a href="/"><img id="top-menu-icon" src="/cdn/deploy/img/icon1.c7a2600d263e5bfc94580e153ddd38f0.png" alt="Keyman logo" /></a> <div id='help1'> <form action="/search/" method="get" role="search"> <div class="search-wrap"> <label for="main-q" class="offscreen">Search</label> <input type="search" id="main-q" name="q" placeholder="Search" data-value="" value="" /> <button type="submit" class="offscreen">Search</button> </div> </form> <a id='help1-donate' href="/donate">Donate</a> <a href="https://help.keyman.com"><img id="top-menu-icon2" src="/cdn/deploy/img/helpIcon.af6fa8bce63e1210428250d9b45929c2.png" alt="help icon" /></a> </div> <div class="wrapper"> <div class="menu-item" id="keyboards"> <h3>Keyboards<span class="header-triangle"><img src="/cdn/deploy/img/img_trans.ccca81506160a8ccf8003ae57a97b115.png" alt="keyboards dropdown" /></span></h3> <div class="menu-item-dropdown"> <div class="menu-dropdown-inner"> <h4>(2000+ languages)</h4> <form method="get" action="/keyboards" name="fsearch"> <input id="language-search" type="text" placeholder="Enter language" name="q"> <input id="search-submit" type="image" src="/cdn/deploy/img/search-button.4ded2599366e38b689e248c939980b25.png" value="Search" onclick="if(document.getElementById('language-search').value==''){return false;}"> </form> <h4>Featured keyboards</h4> <ul> <li><a href="/amharic/">Amharic and Ethiopic keyboards</a></li> <li><a href="/tigrigna/">Tigrigna keyboards</a></li> <li><a href="/eurolatin/">Eurolatin keyboard</a></li> <li><a href="/ipa/">IPA keyboards</a></li> <li><a href="/khmer/">Khmer Angkor keyboard</a></li> <li><a href="/burmese/">Burmese keyboards</a></li> <li><a href="/cameroon/">Cameroon keyboards</a></li> <li><a href="/tamil/">Tamil keyboards</a></li> <li><a href="/sinhala/">Sinhala keyboards</a></li> <li><a href="/greek/">Greek (Ancient) keyboards</a></li> <li><a href="/tibetan/">Tibetan keyboards</a></li> <li><a href="/urdu/">Urdu keyboard</a></li> </ul> </div> </div> </div> <div class="menu-item" id="products"> <h3>Products<span class="header-triangle"><img src="/cdn/deploy/img/img_trans.ccca81506160a8ccf8003ae57a97b115.png" alt="products dropdown" /></span></h3> <div class="menu-item-dropdown"> <div class="menu-dropdown-inner"> <h4>Core Products</h4> <ul> <li><a href="/windows/">Keyman 17.0 for Windows</a></li> <li><a href="/mac/">Keyman 17.0 for macOS</a></li> <li><a href="/linux/">Keyman 17.0 for Linux</a></li> <li><a href="/iphone-and-ipad/">Keyman 17.0 for iPhone and iPad</a></li> <li><a href="/android/">Keyman 17.0 for Android</a></li> <li><a href="/keymanweb/">KeymanWeb.com</a></li> <li><a href="/bookmarklet/">Keyman Bookmarklet</a></li> </ul> <h4>Downloads</h4> <ul> <li><a href='/downloads/'>Current release versions</a></li> <li><a href='/downloads/pre-release/'>Pre-release versions</a></li> <li><a href="/downloads/archive/">Older versions</a></li> </ul> </div> </div> </div> <div class="menu-item" id="tavultesoft"> <h3>About<span class="header-triangle"><img src="/cdn/deploy/img/img_trans.ccca81506160a8ccf8003ae57a97b115.png" alt="About dropdown" /></span></h3> <div class="menu-item-dropdown"> <div class="menu-dropdown-inner"> <ul> <li><a href="/about/">About Keyman</a></li> <li><a href="/about/get-involved">Get Involved</a></li> <li><a href="/training">Training Events</a></li> <li><a href="/free/">Free on all Platforms</a></li> <li><a href="/ldml/">LDML Support</a></li> <li><a href="https://help.keyman.com">Help and Documentation</a></li> <li><a href="/contact/">Contact Us</a></li> <li><a href="https://blog.keyman.com">Keyman Blog</a></li> <li><a href="/testimonials/">Testimonials</a></li> </ul> </div> </div> </div> <div class="menu-item" id="developer"> <div class="menu-item-sub" id="develop"> <a href="/developer/"> <h3>Developer</h3> </a> </div> </div> </div> <img id="top-menu-bottom" src="/cdn/deploy/img/headerbar.5b66d10475396d1a17cb0d687f794262.png" alt="Header bottom" /> </div> <div id="phone-header-spacer"></div> <div class="main"><div id="section2"><div class="wrapper"><h1>LDML</h1> <div class='markdown'><hr /> <h2>LDML Support in Keyman</h2> <p>SIL Keyman is adding support for the LDML Keyboard specification.</p> <h3>Introducing the LDML Keyboard specification</h3> <p>LDML is the Locale Data Markup Language. It it an XML-based format specified as the Unicode Consortium鈥檚 specification UTS#35, maintained by the Common Locale Data Repository (CLDR) Technical Commitee. Part 7 of UTS#35 pertains to keyboard layouts. This specification has been released as part of <a href="https://www.unicode.org/reports/tr35/tr35-72/tr35-keyboards.html#Contents">CLDR Release 45</a>, authored by the <a href="https://cldr.unicode.org/index/keyboard-workgroup">CLDR Keyboard Subcommittee</a>.</p> <p>Like the <a href="https://help.keyman.com/developer/language/">Keyman Keyboard Language</a> (<code>.kmn</code>) format, the LDML Keyboard format defines how keystrokes are interpreted and how keys are laid out in a virtual keyboard. The LDML format has been defined from the beginning to become a cross-platform industry standard, with active participation from several Unicode member organizations including SIL Global. The intention is to provide a draft specification as a technical preview for public review in mid-2023, with a first release later in 2023.</p> <pre><code class="language-xml"><!-- Example: French AZERTY Keyboard in LDML format --> <layer modifier="shift"> <row keys="1 2 3 4 5 6 7 8 9 0 degree plus" /> <row keys="A Z E R T Y U I O P umlaut pound" /> <row keys="Q S D F G H J K L M percent micro" /> <row keys="close-angle W X C V B N question period slash section" /> <row keys="space" /> </layer></code></pre> <h3>Keyman and LDML</h3> <p>As was announced in the <a href="https://blog.keyman.com/2022/03/keyman-roadmap-march-2022/">March 2022</a> <a href="https://blog.keyman.com/2023/02/keyman-roadmap-february-2023/">February 2023</a> roadmaps, the Keyman team has been working in anticipation of LDML support in Keyman and Keyman Developer. We plan to provide initial support for the LDML technical preview version in desktop devices in the Keyman 17.0 release and some supporting tools, with full Keyman Developer support and touch platforms coming in version 18.0.</p> <p>The LDML support is being developed in our cross-platform Keyman Core component, which will enable a consistent feature set across all platforms including web by version 19.0, with a common code base.</p> <p><em>Below is a screen capture showing the use of an LDML keyboard via a development version of Keyman for Linux.</em></p> <p><img src="/cdn/dev/img/ldml-keyman-linux.gif" alt="Movie: typing characters using an LDML keyboard" /></p> <h2>Frequently Asked Questions for Keyman LDML Support</h2> <ul> <li> <p><strong>How will the LDML format be supported with Keyman?</strong></p> <p>From a technical perspective, the LDML format will be a newly supported input to the Keyman Developer Compiler (kmc). The XML file will be compiled into a <a href="https://help.keyman.com/developer/current-version/reference/file-types/kmx">KMX compiled keyboard file</a>, and can be used just as <code>.kmn</code> files which are compiled to <code>.kmx</code>.</p> </li> <li> <p><strong>How will the LDML format be supported with Keyman Developer?</strong></p> <p>Keyman Developer 17.0 supports compiling LDML keyboards and basic XML editing. A full LDML editor is under development for Keyman Developer 18.0.</p> </li> <li> <p><strong>What is the impact on existing developed keyboards in .kmn format?</strong></p> <p>None. Keyman and Keyman Developer continue to support the thousands of languages in .kmn files and the .kmn format.</p> </li> <li> <p><strong>Will there be a facility available to automatically convert .kmn to LDML or vice versa?</strong></p> <p>The LDML specification is designed primarily to support new keyboard layouts. At a later stage, we would like to make available software to assist developers in migrating keyboards to the new format, including tooling to compare and verify the capabilities of a .kmn versus a similar LDML keyboard definition.</p> </li> <li> <p><strong>I have other questions. Who should I ask?</strong></p> <p>Please direct any other questions regarding LDML to the <a href="https://community.software.sil.org/c/keyman">SIL Keyman Community</a>.</p> </li> </ul></div> </div> </div> </div> <div class="footer"> <div class="wrapper"> <div class="footer-third" id="footer-mailchimp"> <h2 class="footer-third-title">Keep me updated</h2> <!-- Begin MailChimp Signup Form --> <div id="mc_embed_signup"> <form action="//keyman.us1.list-manage.com/subscribe/post?u=99fcab2b035a8a51cd2158ca9&id=7ccdac1e32" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate> <div class="mc-field-group"> <input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL" placeholder="email" /> </div> <div id="mce-responses" class="clear"> <div class="response" id="mce-error-response" style="display:none"></div> <div class="response" id="mce-success-response" style="display:none"></div> </div> <div class="button subscribe"> <h2>Subscribe</h2> </div> </form> </div> <!--End mc_embed_signup--> <br> <div id="privacy-policy"><a href="/privacy/">Privacy policy</a></div> <div id='footer-get-involved'> <a href="/about/get-involved">Get involved</a> <a href='/donate'>Donate</a> </div> </div> <div class="footer-third" id="footer-social"> <h2 class="footer-third-title">Keep in touch</h2> <div> <a rel="me" href="https://facebook.com/KeymanApp" target="_blank" data-icon=''>Facebook</a> <a rel="me" href="https://twitter.com/keyman" target="_blank" data-icon=''>X/Twitter</a> <a rel="me" href="https://typo.social/@keyman" target="_blank" data-icon=''>Mastodon</a> <a rel="me" href="https://youtube.com/@KeymanApp" target="_blank" data-icon=''>YouTube</a> <a href="https://blog.keyman.com/" target="_blank" data-icon=''>Keyman blog</a> <a rel="me" href="https://github.com/keymanapp" target="_blank" data-icon=''>GitHub</a> <a href="https://community.software.sil.org/c/keyman" target="_blank" id='footer-community'>Keyman Community</a> </div> </div> <div class="footer-third sil-logo"> <br> <a href="/about/"><img id="sil-logo" src="/_common/assets/sil-logos-2024/sil-logo-andika-v1.png" width="50%" alt='SIL' /></a> <p>Created by <a href="/about/">SIL Global</a></p> </div> </div> </div> <div id="install-modal"></div> <div id="ios-install"> <p>Do you already have Keyman for iPhone and iPad installed on this device?</p> <a id="ios-installed" href="#">Yes - Install Keyboard</a> <a id="ios-install-confirm" href="https://itunes.apple.com/us/app/keyman/id721595078">No - Download from the App Store</a> <a id="ios-install-cancel" href="#">Cancel</a> </div> <div id="android-install"> <p>Do you already have Keyman for Android installed on this device?</p> <a id="android-installed" href="#">Yes - Install Keyboard</a> <a id="android-install-confirm" href="market://details?id=com.tavultesoft.kma">No - Download from the Play Store</a> <a id="android-install-cancel" href="#">Cancel</a> </div> <div id="jira-feedback"> <div id="jira-feedback-tab"><h4><a href='https://community.software.sil.org/c/keyman'>Support</a></h4></div> </div> <div id="KeymanWebControl"></div> </body> </html>