extend ../_components/base.pug

block pagetitle
    | Multi-language Support   

block css 
    link(rel="stylesheet", href="../css/native-persistence.css")
    link(rel="stylesheet", href="../css/compute-apis.css")
    link(rel="stylesheet", href="../css/multilanguage.css")
    
  

   



block main
    - global.pageHref = "features"
    - config.hdrClassName = "hdr__blue"
    include ../_components/header.pug


    section.innerhero
        .container.innerhero__cont
            .innerhero__main.innherhero__lang
                .innerhero__pre.pb-3 Apache Ignite
                h1.h1.innerhero__h1 Multi-language<br> Support
                .innerhero__action 
                    a.button.innerhero__button(href="https://ignite.apache.org/docs/latest/index") Start Coding
              
            img.innerhero__pic.innerhero__pic--lang(src="/public/img/features/multilanguage/multi.svg", alt="Distributed In-Memory Cache")
    // /.innerhero

  
    section.lang
       .container
        .lang-block.flexi
           p.lang__text
                    span Apache Ignite® is a Java-powered database and computing platform that works with operating systems and architectures supported by Java Virtual Machines. You can find Ignite deployments running on Linux, Windows, Mac OS, Oracle Solaris, IBM zOS and x86, x64, SPARC, and PowerPC instruction set architectures.<br><br>
                    span All the features and capabilities available in Ignite are supported in its Java libraries. This includes SQL, key-value, co-located computations, machine learning algorithms, and much more.<br><br>
                    span In addition to Java, Ignite supports C#, C++, Python, Node.JS, and PHP languages out-of-the-box. The thin client protocol allows expanding Ignite support to other programming languages. For instance, you can find a Go client for Ignite that is not being developed or maintained by the Ignite community.<br><br>
                    span Furthermore, you can interact with Ignite as you would with any other SQL database with the usage of JDBC or ODBC drivers.
           .lang__image
              .lang__one.flexi
                 img.lang__img.lang__img1(src="/public/img/features/multilanguage/one.svg", alt="one")
                 img.lang__img(src="/public/img/features/multilanguage/two.svg", alt="two")
              .lang__two.flexi
                 img.lang__img(src="/public/img/features/multilanguage/three.png", alt="three")
                 img.lang__img.lang__img4(src="/public/img/features/multilanguage/four.png", alt="four")
    

    

    

    section.native-bottom.container
        .native-bottom__grid 
            article.nativebotblock
                h3.h4.nativebotblock__title
                    img(src="/public/img/features/native-rocket.svg", alt="").nativebotblock__icon
                    span Ready to Start?
                p.nativebotblock__text Discover our quick start guide and build your first<br> application in 5-10 minutes
                a.nativebotblock__link.arrowlink(href="https://ignite.apache.org/docs/latest/index", target="_blank") Quick Start Guide 
            article.nativebotblock.nativebotblock--learn
                h3.h4.nativebotblock__title
                    img(src="/public/img/features/native-docs.svg", alt="").nativebotblock__icon
                    span Want to Learn More?
                p.nativebotblock__text Check out how to run Ignite with Java, .NET/C#, C++, Python, Node.JS, SQL, PHP, or REST API
                a.nativebotblock__link.arrowlink(href="https://ignite.apache.org/docs/latest/quick-start/java", target="_blank") Multi-Language Guide




