Google Slides Editor ऐड-ऑन क्विकस्टार्ट

यह क्विकस्टार्ट, Google Slides का एडिटर ऐड-ऑन बनाता है. यह प्रज़ेंटेशन में चुने गए टेक्स्ट का अनुवाद करता है.

मकसद

  • स्क्रिप्ट सेट अप करें.
  • स्क्रिप्ट चलाएं.

ज़रूरी शर्तें

इस सैंपल का इस्तेमाल करने के लिए, आपको यहां दी गई शर्तें पूरी करनी होंगी:

  • Google खाता (Google Workspace खातों के लिए एडमिन की अनुमति ज़रूरी हो सकती है).
  • इंटरनेट ऐक्सेस करने वाला वेब ब्राउज़र.

स्क्रिप्ट सेट अप करें

  1. स्लाइड.new पर स्लाइड प्रज़ेंटेशन बनाएं.
  2. एक्सटेंशन > Apps Script पर क्लिक करें.
  3. बिना टाइटल वाला प्रोजेक्ट पर क्लिक करें.
  4. Apps Script प्रोजेक्ट का नाम बदलकर, Slides का अनुवाद करें करें. इसके बाद, नाम बदलें पर क्लिक करें.
  5. Code.gs फ़ाइल के बगल में, ज़्यादा > नाम बदलें पर क्लिक करें. फ़ाइल को translate नाम दें.
  6. फ़ाइल जोड़ें > एचटीएमएल पर क्लिक करें. फ़ाइल को sidebar नाम दें.
  7. हर फ़ाइल के कॉन्टेंट को नीचे दिए गए कोड से बदलें, फिर सेव करने का आइकॉन सेव करें पर क्लिक करें.

    translate.gs

    स्लाइड/अनुवाद/अनुवाद.जीएस
    /**
     * @OnlyCurrentDoc Limits the script to only accessing the current presentation.
     */
    
    /**
     * Create a open translate menu item.
     * @param {Event} event The open event.
     */
    function onOpen(event) {
      SlidesApp.getUi().createAddonMenu()
          .addItem('Open Translate', 'showSidebar')
          .addToUi();
    }
    
    /**
     * Open the Add-on upon install.
     * @param {Event} event The install event.
     */
    function onInstall(event) {
      onOpen(event);
    }
    
    /**
     * Opens a sidebar in the document containing the add-on's user interface.
     */
    function showSidebar() {
      const ui = HtmlService
          .createHtmlOutputFromFile('sidebar')
          .setTitle('Translate');
      SlidesApp.getUi().showSidebar(ui);
    }
    
    /**
     * Recursively gets child text elements a list of elements.
     * @param {PageElement[]} elements The elements to get text from.
     * @return {Text[]} An array of text elements.
     */
    function getElementTexts(elements) {
      let texts = [];
      elements.forEach((element)=> {
        switch (element.getPageElementType()) {
          case SlidesApp.PageElementType.GROUP:
            element.asGroup().getChildren().forEach((child)=> {
              texts = texts.concat(getElementTexts(child));
            });
            break;
          case SlidesApp.PageElementType.TABLE:
            const table = element.asTable();
            for (let y = 0; y < table.getNumColumns(); ++y) {
              for (let x = 0; x < table.getNumRows(); ++x) {
                texts.push(table.getCell(x, y).getText());
              }
            }
            break;
          case SlidesApp.PageElementType.SHAPE:
            texts.push(element.asShape().getText());
            break;
        }
      });
      return texts;
    }
    
    /**
     * Translates selected slide elements to the target language using Apps Script's Language service.
     *
     * @param {string} targetLanguage The two-letter short form for the target language. (ISO 639-1)
     * @return {number} The number of elements translated.
     */
    function translateSelectedElements(targetLanguage) {
      // Get selected elements.
      const selection = SlidesApp.getActivePresentation().getSelection();
      const selectionType = selection.getSelectionType();
      let texts = [];
      switch (selectionType) {
        case SlidesApp.SelectionType.PAGE:
          selection.getPageRange().getPages().forEach((page)=> {
            texts = texts.concat(getElementTexts(page.getPageElements()));
          });
          break;
        case SlidesApp.SelectionType.PAGE_ELEMENT:
          const pageElements = selection.getPageElementRange().getPageElements();
          texts = texts.concat(getElementTexts(pageElements));
          break;
        case SlidesApp.SelectionType.TABLE_CELL:
          selection.getTableCellRange().getTableCells().forEach((cell)=> {
            texts.push(cell.getText());
          });
          break;
        case SlidesApp.SelectionType.TEXT:
          selection.getPageElementRange().getPageElements().forEach((element) =>{
            texts.push(element.asShape().getText());
          });
          break;
      }
    
      // Translate all elements in-place.
      texts.forEach((text)=> {
        text.setText(LanguageApp.translate(text.asRenderedString(), '', targetLanguage));
      });
    
      return texts.length;
    }

    साइडबार.html

    स्लाइड/अनुवाद/साइडबार.html
    <html>
    <head>
      <link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
      <style>
        .logo { vertical-align: middle; }
        ul { list-style-type: none; padding: 0; }
        h4 { margin: 0; }
      </style>
    </head>
    <body>
    <form class="sidebar branding-below">
      <h4>Translate selected slides into:</h4>
      <ul id="languages"></ul>
      <div class="block" id="button-bar">
        <button class="blue" id="run-translation">Translate</button>
      </div>
      <h5 class="error" id="error"></h5>
    </form>
    <div class="sidebar bottom">
      <img alt="Add-on logo" class="logo"
           src="https://www.gstatic.com/images/branding/product/1x/translate_48dp.png" width="27" height="27">
      <span class="gray branding-text">Translate sample by Google</span>
    </div>
    
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script>
      $(function() {
        // Add an input radio button for every language.
        const languages = {
          ar: 'Arabic',
          zh: 'Chinese',
          en: 'English',
          fr: 'French',
          de: 'German',
          hi: 'Hindi',
          ja: 'Japanese',
          pt: 'Portuguese',
          es: 'Spanish'
        };
        const languageList = Object.keys(languages).map((id)=> {
          return $('<li>').html([
            $('<input>')
                    .attr('type', 'radio')
                    .attr('name', 'dest')
                    .attr('id', 'radio-dest-' + id)
                    .attr('value', id),
            $('<label>')
                    .attr('for', 'radio-dest-' + id)
                    .html(languages[id])
          ]);
        });
    
        $('#run-translation').click(runTranslation);
        $('#languages').html(languageList);
      });
    
      /**
       * Runs a server-side function to translate the text on all slides.
       */
      function runTranslation() {
        this.disabled = true;
        $('#error').text('');
        google.script.run
                .withSuccessHandler((numTranslatedElements, element) =>{
                  element.disabled = false;
                  if (numTranslatedElements === 0) {
                    $('#error').empty()
                            .append('Did you select elements to translate?')
                            .append('<br/>')
                            .append('Please select slides or individual elements.');
                  }
                  return false;
                })
                .withFailureHandler((msg, element)=> {
                  element.disabled = false;
                  $('#error').text('Something went wrong. Please check the add-on logs.');
                  return false;
                })
                .withUserObject(this)
                .translateSelectedElements($('input[name=dest]:checked').val());
      }
    </script>
    </body>
    </html>

स्क्रिप्ट चलाएं

  1. अपने Slides प्रज़ेंटेशन में, पेज को फिर से लोड करें.
  2. एक्सटेंशन > Slides का अनुवाद करें > शुरू करें पर क्लिक करें. ऐड-ऑन मेन्यू आइटम को दिखने में कुछ सेकंड लग सकते हैं.
  3. जब कहा जाए, तब ऐड-ऑन के लिए अनुमति दें.
  4. फिर से, एक्सटेंशन > स्लाइड का अनुवाद करें > शुरू करें पर क्लिक करें.
  5. अपने प्रज़ेंटेशन में टेक्स्ट जोड़ें और उसे चुनें.
  6. ऐड-ऑन में, चुने गए टेक्स्ट को बदलने के लिए अनुवाद करें पर क्लिक करें.

अगले चरण