Skip to content
Snippets Groups Projects
translate 3.98 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/usr/bin/env python3
    #
    # NOTE: This works only for the author and his personal Google account.
    # Other users would have to apply their own adjustments.
    #
    
    import re
    import sys
    import getopt
    
    from google.cloud import translate_v3beta1 as translate
    from google.cloud import storage
    
    
    
    project_id = "bjcp-styleguide-1570890297003"
    glossary_id = 'bjcp-en-de-glossary'
    location = 'us-central1'
    target_language = 'de'
    language_codes = ['en', target_language]
    glossary_uri = 'gs://bjcp-styleguide/glossary-en-%s.csv' % target_language
    bucket_name = 'bjcp-styleguide'
    
    client = None
    storage_client = None
    
    
    
    
    
    def createGlossary():
        glossary_name = client.glossary_path(project_id, location, glossary_id)
        language_codes_set = translate.types.Glossary.LanguageCodesSet(language_codes = language_codes)
        gcs_source = translate.types.GcsSource(input_uri = glossary_uri)
        input_config = translate.types.GlossaryInputConfig(gcs_source = gcs_source)
        glossary = translate.types.Glossary(name=glossary_name, language_codes_set = language_codes_set, input_config = input_config)
        location_path = client.location_path(project_id, location)
        operation = client.create_glossary(parent = location_path, glossary = glossary)
        result = operation.result(timeout = 90)
    
        print('createGlossary() result: {}'.format(result.name))
        #print('Input Uri: {}'.format(result.input_config.gcs_source.input_uri))
    
    
    
    def showGlossaries():
        location_path = client.location_path(project_id, location)
        for glossary in client.list_glossaries(location_path):
            print('Name: {}'.format(glossary.name))
            print('Entry count: {}'.format(glossary.entry_count))
            print('Input uri: {}'.format(glossary.input_config.gcs_source.input_uri))
            for language_code in glossary.language_codes_set.language_codes:
                print('Language code: {}'.format(language_code))
    
    
    
    def deleteGlossary():
        return False
    
    
    
    def checkGlossary():
        return False
    
    
    
    def getGlossaryConfig():
        glossary = client.glossary_path(project_id, location, glossary_id)
        glossary_config = translate.types.TranslateTextGlossaryConfig(glossary = glossary)
        return glossary_config
    
    
    
    def getTranslation(text, glossary_config=None):
        location_path = client.location_path(project_id, location)
        result = client.translate_text(parent = location_path,
                                       contents = [text],
                                       mime_type = 'text/html',
                                       source_language_code = 'en',
                                       target_language_code = target_language,
                                       glossary_config = glossary_config)
    
        if (glossary_config):
            return result.glossary_translations[0].translated_text
        else:
            return result.translations[0].translated_text
    
    
    
    client = translate.TranslationServiceClient()
    storage_client = storage.Client()
    
    
    
    
    def main(argv):
        try:
            opts, args = getopt.getopt(argv,"h",["cg","ug"])
        except getopt.GetoptError:
            print('translate [ --cg | --ug] [file]')
            sys.exit(2)
        for opt, arg in opts:
            if opt == '-h':
                sys.exit()
            elif opt in ("--cg"):
                createGlossary()
                exit(0)
            elif opt in ("--ug"):
                updateGlossary()
                exit(0)
    
        if len(args) >= 1:
            with open (args[0], "r") as file:
                lines = file.readlines()
        else:
            lines = sys.stdin.readlines()
    
        g = getGlossaryConfig()
    
        for line in lines:
            if (re.match(r" *<(bjcp:|)(p|p class.*|h1|h2|h3|h4|h5|td|li|name|description|overall-impression|aroma|appearance|flavor|mouthfeel|comments|history|characteristic-ingredients|style-comparison|entry-instructions|commercial-examples)>.", line)):
                r = getTranslation(line, g)
                print(r)
                sys.stderr.write(".")
                sys.stderr.flush()
                #r = "TRANSLATE: %s" % line
            else:
                print(line)
                #print("ORIG: %s" % line)
    
    
    
    if __name__ == "__main__":
        main(sys.argv[1:])