|
|
Aujourd'hui, j'ai ajouté un instrument à mon blog de sorte que les lecteurs puissent facilement traduire mes poteaux en des n'importe quelles de trente-cinq langues utilisant Google traduisent le moteur de traduction des langues de page Web. Vous le trouverez bas du côté de main gauche de cette page Web. De baisse de la liste vers le bas, sélectionnez juste la langue que vous voulez convertir le poteau courant en et après qu'un retard court une nouvelle page Web apparaisse avec le poteau avez montré dans la langue choisie. Note - vous devez avoir des manuscrits permis en votre navigateur pour que l'instrument de Google montre sur cette page Web.
Ajouter cette fonctionnalité était challanging que j'ai au commencement supposé puisque j'ai voulu m'assurer que mes poteaux sont demeurés utiles à un lecteur une fois montrés dans une langue étrangère. Ceci signifie que le moteur de traduction doit être dit quels mots et sections à l'encore moins comme est. La documentation de Google et le FAQ pour cet instrument sont peu clairs au sujet de la façon faire ceci pour des choses comme mes boîtes de présentation ainsi un rond d'expérimentation a été exigé. Il s'avère que vous pouvez marquer une page Web entière, un mot ou une section d'une page Web comme ne pas être traduit utilisant suit des étiquettes. < ! - employez l'élément de méta pour protéger la page Web entière - > value='notranslate'> de name='google de <meta < ! - employez l'élément d'envergure pour protéger un mot ou deux - > le class='notranslate'> <span ne traduisent pas des ces words</span> < ! - élément de division d'utilisation pour protéger des boîtes de présentation telles ceci - > le class='notranslate'> de <div ne traduisent pas section</div> entier
Maintenant que j'ai figuré dehors comment protéger le texte spécifique et le coder des extraits de l'traduction par le moteur de traduction de Google, je prévois de retourner et de modifier mes poteaux précédents pendant l'heure de les rendre plus robustes pour la traduction des langues automatisée.
Ce sera tout à fait un projet comme j'inclus typiquement un certain nombre de mots réservés de langauge et d'extraits de programmation de code dans des mes poteaux. Par exemple, il a exigé plus de 100 édite à mon poteau précédent sur Powershell de Microsoft avant que j'aie été heureux que ce poteau particulier ait convenu à la traduction des langues automatisée.
7/1/2009 poteau de MISE À JOUR de ce a été écrit quand j'employais Blogspot. Je n'ai pas encore décidé comment mettre en application la traduction automatique de mes poteaux sur blog.fpmurphy.com. Cependant je prévois de mettre en application quelque chose bientôt.
Je suis actuellement sur la belle île de Cebu aux Philippines visitant avec mon vieil ami et collègue Charles Richmond à IISC et présentant quelques exposés sur des internals d'OS. J'utilise un ordinateur portable de Lenovo Thinkpad courant Windows Vista final en voyageant avec Mozilla Firefox 3 en tant que mon navigateur de défaut.
Firefox 3 vient avec une barre de recherche de défaut sur le coin droit supérieur contenant un certain nombre de moteurs de recherche de défaut comprenant Google. Si je dactylographie une limite de recherche dans l'option de barre de recherche de Google, Google figure dehors dans les coulisses que je suis situé dans les Philippines, me réoriente à www.google.com.ph et montre les résultats de recherche avec le Philippin réglé de langage d'interfaces (également écrit comme Pilipino) comme montré ici.
Ce n'est pas trop d'un obstacle aux Philippines mais à devenir un ennui total quand au Japon, à la Chine, à Vietman et à beaucoup d'autres pays. Le contournement standard pour ceci est de forcer Google à montrer son langage d'interfaces en anglais en allant à Google.com et en plaçant vos préférences d'utilisateur à l'anglais qui a comme conséquence Google.com créant un biscuit sur votre machine pour persister vos préférences.
Peut-être c'est un peu de surpuissance ou paranoïa mais j'ai l'installation de Firefox pour supprimer tous les biscuits en terminant une session afin de l'intimité personnelle et de la sécurité. Ainsi Google se transfère de nouveau à celui que le langage d'interfaces Google transfère sur pour le pays que Google pense que je suis actuellement dedans la prochaine fois moi mets le feu vers le haut à Firefox et aille à Google.com.
L'one-way pour surmonter ce problème n'est pas d'employer la barre de recherche de Firefox mais passer en revue à la place à www.google.com/ncr où la NCR représente aucun pays réorientez avant d'exécuter tous les searchs. Plutôt qu'allant cet itinéraire, j'ai décidé d'écrire ma propre connexion de Search Engine de sorte que j'obtienne toujours une interface anglaise quand j'emploie la barre porte-outils de recherche de Firefox Google. Elle s'avère que c'est tout à fait facile de vous faire une fois comprennent ce qui est exigé.
Couperez-coll le code suivant dans un dossier appelé le GoogleEN.xml et sauvez le dossier.
xmlns= » http://www.mozilla.org/2006/browser/search/ » de <SearchPlugin > width= de <Image de recherche de <Description>Google de <ShortName>GoogleEN</ShortName> (l'anglais de NCR) </Description> <InputEncoding>UTF-8</InputEncoding> de » height= 16 » >data de 16 : image/x-icon ; base64, method= » des » textes de type= » de <Url d'AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQA AAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAACZMwD/mTMA/5kzAP+ZMwD/mTMA/5k zAP+ZMwD/mTMA/5kzAP+ZMwD/mTMA/5kzAP+Z MwD/mTMA/5kzAP+ZMwD/mTMA////////////////////////////////////////////////// //////////////////////////mTMA/5kzAP/ ////////////////48u//0a2g/71vWP +hLgz/pCUI/5xDG/+dRRz/pFIs/7ibk//q4+D//////5kzAP+ZMwD////////////q0MX/pDIP/6gxC//kq5H//fj1//////////////////zezv +MHgf /r5SE////// +ZMwD/mTMA///////36+X/pjAL /6YwC//Wr5z////////////////////////// //97eX/jB4G/7ecjP//////mTMA/5kzAP//// //4ZJu/5o5DP/Hm4j//////////////////// ///bk2/ +gUCv/mD4V/54rCP+vhm7//////5kz AP+ZMwD///7+/7xPHf+dLAn/+PXz/wAA/////////////wAA/////fz/AAD///bRv//52Mf/AA D//wAA//+ZMwD/mTMA//77+f+uNAz/nzcZ//////8AAP///////wAA//8AAP///////wAA//// ////AAD//wAA////////mTMA/5kzAP/ ++/n/t FUo/5RAG///////AAD//wAA////////AAD///////8AAP//AAD//wAA/////////////5kzAP + de ZMwD////+/7xVLv+WPBf//////wAA//8AAP///////wAA////////AAD/////////////AAD// ///// +ZMwD/mTMA///////plHP/mDUR//////8AAP////////////8AAP///////wAA//8AAP//AAD//wAA////////mTMA/5kzAP//////8cm8 /607FP +6jn//+Ojl////////////////////////////9 +7q//b08v///////////5kzAP+ZMw D////////////yu6X/qD4Z/8eQgP/46OX/////////////////7Luz/55IIf95JQj/9O3q//// // +ZMwD/mTMA//////////////////PFuP/Pa Uj/uDUO/7U0Cf+1NAr/tTQJ/6k2Ff/dqJH/8t DD//79/f//////mTMA/5kzAP////////////////////////////38 +f/48uz/9e3m//bv6P/7 +PX//////////////////////5kzAP+ZMwD/m TMA/5kzAP+ZMwD/mTMA/5kzAP+ZMwD/mTMA/5 kzAP+ZMwD/mTMA/5kzAP+ZMwD/mTMA/5kzAP+ ZMwD/AACsQQAArEEAAKxBAACsQQAArEEAAKxB AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQ QAArEEAAKxBAACsQQ== </Image>/HTML OBTIENNENT »
Un article récent en magazine de Red Hat par Noé Gift et Grig Gheorghiu appelé « ceci n'est pas votre commande de densité double de grandpappy'd démontrée comment employer le python, l'utilité et le diagramme api de densité double de Google pour produire un histogramme montrant la sortie à différentes longueurs de bloc. Cependant le rendement du manuscrit de python n'était pas le le graphique réel mais un URL que vous alors avez dû coller dans un web browser pour regarder le diagramme en résultant.
I bien que ce manuscrit soit utile mais n'a pas voulu devoir couperer-coll un URL dans un web browser ainsi moi a décidé d'éliminer cette étape.
Ce manuscrit de python est lâchement basé sur leur manuscrit mais les utilisations les bibliothèques d'urllib de python de se relier à Google dresse une carte pour produire d'un dossier d'image de png qui est plus tard montré utilisant des routines de pyGTK+. # ! Re d'importation de commandes d'importation d'OS d'importation de système d'importation de python de /usr/bin/env de classe DisplayGraph de gtk d'importation du pygtk pygtk.require ('d'importation de l'importation urllib2 d'urllib d'importation d'OptionParser d'importation d'optparse 2.0) : def delete_event (individu, gadget, événement, data=None) : le def faux de retour détruisent (individu, gadget, data=None) : __init de def de gtk.main_quit () (individu) : self.window = gtk. Fenêtre (gtk.WINDOW_TOPLEVEL) self.window.connect (« delete_event », self.delete_event) self.window.connect (« détruisez », self.destroy) self.window.set_border_width (10) self.window.set_position (gtk.WIN_POS_CENTER) self.window.set_title (« sortie de disque ") pixbuf = gtk.gdk.pixbuf_new_from_file (« /tmp/dd.png ") os.remove (« /tmp/dd.png ") self.image = gtk. Image () self.image.set_from_pixbuf (pixbuf) ow de self.image.sh () self.window.add (self.image) force de def d'ow de self.window.sh () (individu) : classe GoogleChart de gtk.main () : __init de def (individu) : self.gchart_url = « http://chart.apis.google.com/chart ? » self.gchart_type = « cht=bvs » self.gchart_title = « &chtt= » self.gchart_data = « &chd=t : » self.gchart_labels = « &chxl=0 : | » self.gchart_size = « &chs=400×250 self.gchart_axis_labels = « &chxt=x, y, x, y » self.gchart_axis_position = « &chxp=2,50|3.50 self.gchart_bar_settings = « titre de def du &chbh=30,15 (individu, titre) : self.gchart_title = self.gchart_title + def de titre écrivent (individu, données, étiquettes, max_t) : self.gchart_data = self.gchart_data + data.rstrip (`, ') self.gchart_labels = self.gchart_labels \ + marque + « 2 : |Block%20Size|3 : |Mb/s » self.gchart_axis_range = « &chxr=1,0, » + streptocoque (max_t+10.0) self.gchart_scaling = « &chds=0, » + streptocoque (max_t+10.0) self.gchart_url += self.gchart_type \ + self.gchart_title + self.gchart_size self.gchart_url += self.gchart_bar_settings \ + self.gchart_data + self.gchart_labels self.gchart_url += self.gchart_axis_labels \ + self.gchart_axis_position self.gchart_url += self.gchart_axis_range \ + self.gchart_scaling ouvreur = urllib2.urlopen (self.gchart_url) si opener.headers [« contenu-type »] ! = image de `/png': augmenter BadContentTypeException (responded de serveur de `\ 'avec un contenu-type de %s \ % d'opener.headers [« contenu-type »]) ouvrez-vous (« /tmp/dd.png », `wb').write (opener.read ()) get_disk_throughput de def (dispositif, longueur de bloc) : longueur de bloc = streptocoque (longueur de bloc) + k de ` cmd = « densité double if=/dev/zero of=%s bs=%s » % (dispositif, longueur de bloc) rendement = commands.getoutput (cmd) sortie = 0 unité = « » pour la ligne dans output.split (n') de `: s = re.search (le `a copié. *, (\ S+) (\ S+) $ ', ligne) si s : sortie = s.group (1) unité = s.group (2) coupure retournez (sortie, unité) si == « __main » de __name : utilisation = « utilisation : options de %prog » analyseur = OptionParser (usage=usage) parser.add_option (« - d », « - dispositif », de » dispositif » de dest= \ dispositif de help= » à employer. Des données de disque seront recouvertes ! ") (options, args) = parser.parse_args () dispositif = options.device sinon dispositif : parser.print_help ()
|
|