SlideShare a Scribd company logo
1 of 93
Download to read offline
Network: RU-Secure
Username: trsguest2017
Password: RUguest253$
Preparing a Plugin for
Translation
Brian Hogg
@brianhogg
brianhogg.com
echo esc_html( __( ‘Preparing
a Plugin for Translation’,
‘brian-hogg’ ) );
Courses 

https://brianhogg.com/courses
WordCamp Hamilton

https://hamilton.wordcamp.org/
Plugins

https://brianhogg.com/plugins
Slides
https://brianhogg.com/wcto2017/
Who Are You?
Why Translate?
How to Start?
<?php
/***
Plugin Name: Event Calendar Newsletter
Version: 1.6.1
Author: Brian Hogg
Author URI: https://brianhogg.com/
License: GPL2 or later
*/
<?php
/***
Plugin Name: Event Calendar Newsletter
Version: 1.6.1
Author: Brian Hogg
Author URI: https://brianhogg.com/
License: GPL2 or later
Text Domain: event-calendar-newsletter
*/
Fetch a single event using the ID of
that event
__( ’Fetch a single event using the ID of
that event’, ‘event-calendar-newsletter’ );
_ _( $string, $textdomain )
__( ’Fetch a single event using the ID of
that event’, ‘event-calendar-newsletter’ );
_ _( $string, $textdomain )
__( ’Fetch a single event using the ID of
that event’, ‘event-calendar-newsletter’ );
_ _( $string, $textdomain )
__( ’Fetch a single event using the ID of
that event’, ‘event-calendar-newsletter’ );
_ _( $string, $textdomain )
Type this out!
// can’t do this
define( ‘ECN_TEXT_DOMAIN’, ‘event-
calendar-newsletter’ );
// ...
__( ’Fetch a single event using the ID
of that event’, ECN_TEXT_DOMAIN );
Wrong Way
__( ’Fetch a single event using the ID of
that event’, ‘event-calendar-newsletter’ );
Right Way
echo __( ’Fetch a single event
using the ID of that event’,
‘event-calendar-newsletter’ );
Outputting the String
_e( ’Fetch a single event using
the ID of that event’, ‘event-
calendar-newsletter’ );
Outputting the String
_e === echo + __
What if you have
something you don’t want
translated?
Exclude a single event from the
listing. Use "current" when using the
shortcode on an event page to exclude
the current event.
Using Placeholders
Exclude a single event from the
listing. Use "current" when using the
shortcode on an event page to exclude
the current event.
Using Placeholders
__( ‘Exclude a single event from the
listing. Use "current" when using the
shortcode on an event page to exclude
the current event.’, ‘my-shortcode’ )
Using Placeholders
sprintf( __( ‘Exclude a single event
from the listing. Use "%s" when using
the shortcode on an event page to
exclude the current event.’, ‘my-
shortcode’ ), ‘current’ );
Using Placeholders
echo sprintf( __( ‘Exclude a single
event from the listing. Use "%s" when
using the shortcode on an event page to
exclude the current event.’, ‘my-
shortcode’ ), ‘current’ );
Using Placeholders
Exclude a single event from the
listing. Use "current" when using the
shortcode on an event page to exclude
the current event.
Using Placeholders
What if you want to
output HTML?
Can't find the option you're looking
for? <a href="https://mysite.com/
support">Submit a support request</a>
and we'll do our best to help!
Outputting HTML
_e( "Can’t find the option you're looking
for? <a href="https://mysite.com/support
">Submit a support request</a> and we'll
do our best to help!", ‘my-shortcode’ );
Outputting HTML
_e( "Can’t find the option you're
looking for? %sSubmit a support request
%s and we'll do our best to help!",
‘my-shortcode’ );
Outputting HTML
echo sprintf( __( "Can’t find the option
you're looking for? %sSubmit a support
request%s and we'll do our best to help!",
‘my-shortcode’ ), '<a href="https://
mysite.com/support">', ‘</a>' );
Outputting HTML
Avoids link being
changed
Avoids broken HTML
Can’t find the option you're looking
for? %sSubmit a support request%s and
we'll do our best to help!
Sie können die gewünschte Option nicht
finden? %sSenden Sie eine Support-Anfrage
%s und wir werden unser Bestes tun, um zu
helfen!
Sie können die gewünschte Option nicht
finden? %sSenden Sie eine Support-Anfrage
%s <script>...</script>und wir werden
unser Bestes tun, um zu helfen!
esc_html()
esc_attr()
Escape Functions
https://brianhogg.com/tips-sanitizing-validating-
wordpress-plugin-data/
esc_html( __( "blah blah blah
hahahaha", ‘my-shortcode’ ) );
Escape Functions
esc_html( __( "bla bla bla hihihihi”,
‘my-shortcode’ ) );
Escape Functions
esc_html( __( "bla bla bla <script>alert(‘test’);</
script> hihihihi”, ‘my-shortcode’ ) );
Escape Functions
esc_html( __( "bla bla bla <script>alert(‘test’);</
script> hihihihi”, ‘my-shortcode’ ) );
Escape Functions
bla bla bla &lt;script&gt;alert(‘test’);&lt;/
script&gt; hihihihi
Can Combine esc_html/
esc_attr and __/_e
Together
esc_html__()
esc_html_e()
esc_attr__()
esc_attr_e()
Escape Functions
echo esc_html( __( "blah blah blah
hahaha", ‘my-shortcode’ ) );
Escape Functions
echo esc_html( __( "blah blah blah
hahaha”, ‘my-shortcode’ ) );
Escape Functions
esc_html_e( "blah blah blah hahaha",
‘my-shortcode’ );
echo sprintf( esc_html__( "here is %smy link%s",
‘my-shortcode’ ), ‘<a href=“…”>’, ‘</a>’ );
Careful With sprintf
vs
esc_html_e( sprintf( __( "here is %smy link%s",
‘<a href="…">’, ‘</a>’ ), ‘my-shortcode’ );
here is my link
Careful With sprintf
vs
here is &lt;a href=“…”&gt;my link&lt;/a&gt;
wp_kses()
wp_kses_post()
Need HTML?
Plurals
_n( $single_string, $plural_string,
$number, $domain );
Plurals
_n( ‘you did one thing’, ‘you did lots
of things’, 1, ‘my-plugin’ );
Plurals
you did one thing
_n( ‘you did one thing’, ‘you did lots
of things’, 5, ‘my-plugin’ );
Plurals
you did lots of things
sprintf( _n( ‘you did %s thing’, ‘you did %s
things’, $count, ‘my-plugin’ ), $count );
Plurals
What if strings are similar
or hard to recognize?
__( ‘Read’, ‘my-plugin’ );
Adding Context
__( ‘Read’, ‘my-plugin’ );
_x( $string, $context, $domain );
Adding Context
_x( ‘Event Calendar Newsletter’,
‘Settings title’, ‘my-plugin’ );
Adding Context
_x( ‘Event Calendar Newsletter’,
‘Plugin menu title’, ‘my-plugin’ );
date_i18n()
Dates
date_i18n( get_option( 'date_format' ),
$timestamp )
Dates
JavaScript
wp_localize_script()
JavaScript
wp_register_script( ‘ecn_my_script’, plugins_url( ’js/
myscript.js’, __FILE__ ) );
wp_localize_script( ‘ecn_my_script’, ‘ecn_js’, array(
‘success’ => __( ‘You did the thing!’, ‘ecn’ ),
‘failure’ => __( ‘The thing didn’t work’, ‘ecn’ ),
) );
wp_enqueue_script( ‘ecn_my_script’ );
JavaScript
https://brianhogg.com/jswp
alert( ecn_js.success );
alert( ecn_js.failure );
Don’t trust the strings
in JavaScript
https://brianhogg.com/tips-sanitizing-validating-
wordpress-plugin-data/
Best Practices
Best Practices
• Decent English style
• Entire sentences
• Split at paragraphs
• Use format strings instead of string concatenation—
sprintf(__('Replace %1$s with %2$s'), $a, $b); is
always better than __('Replace ').$a.__(' with ').$b;
• Avoid unusual markup and unusual control characters
• Do not leave leading or trailing whitespace in a translatable
phrase
https://codex.wordpress.org/
I18n_for_WordPress_Developers#Best_Practices
Now What?
Now What?
• Generate the POT file (base language)
• Copy to a PO file (for each translation)
• Generate the MO file (compiled for
quick string access)
• Put them all in the languages/ folder
of your plugin
https://brianhogg.com/how-wordpress-org-plugin-
translations-are-handled/
...
#: core/templates/admin-page.php:2 edd/edd.php:46
msgid "The Events Calendar Shortcode"
msgstr ""
#: core/templates/admin-page.php:4
msgid ""
"The shortcode displays lists of your events. For
example the shortcode to "
"show next 8 events in the category "%s" in ASC order
with date showing:"
msgstr ""
my-plugin.pot
#: core/templates/admin-page.php:2 edd/edd.php:46
msgid "The Events Calendar Shortcode"
msgstr "The Events Calendar Shortcode"
#: core/templates/admin-page.php:4
msgid ""
"The shortcode displays lists of your events. For example the
shortcode to "
"show next 8 events in the category "%s" in ASC order with
date showing:"
msgstr ""
"O shortcode mostra listas de seus eventos. Por exemplo, o
shortcode para "
"mostrar os próximos 8 eventos na categoria "%s", em ordem
ASC exibindo a "
"data:"
my-plugin-pt_BR.po
??6?I|????dD?
?Z?/!
Q,_Y?^?7E:}??UA"?n?O)	 Ey	?	 	 ?	 ?	 ?	 <
a@
?
?
?
??
Xv
|?
FLE?L?;&
-b
?
??
_LZ?^fjm~H??'?V 5w*?&??????vg??]2a
?6?_?V9<?F??e?)?y)k?_o	?(?@?g
r????gL??V5S?X?I92?	???j?e?bS????T?!F+h^???83 .l ? /0()2!%3
my-plugin-pt_BR.mo
/languages
my-plugin.pot
my-plugin-fr_FR.po
my-plugin-fr_FR.mo
my-plugin-pt_BR.po
my-plugin-pt_BR.mo
...
Creating the Translations
Creating the POT
POEdit
https://www.youtube.com/watch?v=s6oRk6nfkI0
makepot.php

svn co http://develop.svn.wordpress.org/trunk/tools/
grunt-wp-i18n
https://github.com/cedaro/grunt-wp-i18n
function my_load_textdomain() {
load_plugin_textdomain( ‘my-plugin', false,
plugin_basename( dirname( __FILE__ ) ) . '/languages/' );
}
add_action( 'plugins_loaded', 'my_load_textdomain' );
Load the Translations
Test by Switching to the
Language
Testing
Testing
Maintaining Over Time
Ensure Any New Strings
Wrapped in a Translation
Function
Automatic POT
Generation for wp.org
(free) Plugins
Translators Can Pull
Requests on github/
bitbucket
DEMO
Takes Work
Questions?
Des questions?
Questões?
¿Preguntas?
Brian Hogg
@brianhogg
brianhogg.com
https://brianhogg.com/wcto2017/

More Related Content

What's hot

Django REST Framework における API 実装プラクティス | PyCon JP 2018
Django REST Framework における API 実装プラクティス | PyCon JP 2018Django REST Framework における API 実装プラクティス | PyCon JP 2018
Django REST Framework における API 実装プラクティス | PyCon JP 2018Masashi Shibata
 
The Django Web Application Framework 2
The Django Web Application Framework 2The Django Web Application Framework 2
The Django Web Application Framework 2fishwarter
 
Django for Beginners
Django for BeginnersDjango for Beginners
Django for BeginnersJason Davies
 
Don't RTFM, WTFM - Open Source Documentation - German Perl Workshop 2010
Don't RTFM, WTFM - Open Source Documentation - German Perl Workshop 2010Don't RTFM, WTFM - Open Source Documentation - German Perl Workshop 2010
Don't RTFM, WTFM - Open Source Documentation - German Perl Workshop 2010singingfish
 
Looking Back to Move Forward: Building the Modern Web
Looking Back to Move Forward: Building the Modern WebLooking Back to Move Forward: Building the Modern Web
Looking Back to Move Forward: Building the Modern WebRachel Andrew
 
Hybrid Web Applications
Hybrid Web ApplicationsHybrid Web Applications
Hybrid Web ApplicationsJames Da Costa
 
What's new in Rails 2?
What's new in Rails 2?What's new in Rails 2?
What's new in Rails 2?brynary
 
Basics java scripts
Basics java scriptsBasics java scripts
Basics java scriptsch samaram
 
A Modest Introduction to Swift
A Modest Introduction to SwiftA Modest Introduction to Swift
A Modest Introduction to SwiftJohn Anderson
 
Django Architecture Introduction
Django Architecture IntroductionDjango Architecture Introduction
Django Architecture IntroductionHaiqi Chen
 
Angular js recommended practices - mini
Angular js   recommended practices - miniAngular js   recommended practices - mini
Angular js recommended practices - miniRasheed Waraich
 
Sphinx 1.1 i18n 機能紹介
Sphinx 1.1 i18n 機能紹介Sphinx 1.1 i18n 機能紹介
Sphinx 1.1 i18n 機能紹介Ian Lewis
 
Djangocon 2014 angular + django
Djangocon 2014 angular + djangoDjangocon 2014 angular + django
Djangocon 2014 angular + djangoNina Zakharenko
 

What's hot (20)

BDD, Behat & Drupal
BDD, Behat & DrupalBDD, Behat & Drupal
BDD, Behat & Drupal
 
Front End on Rails
Front End on RailsFront End on Rails
Front End on Rails
 
Django REST Framework における API 実装プラクティス | PyCon JP 2018
Django REST Framework における API 実装プラクティス | PyCon JP 2018Django REST Framework における API 実装プラクティス | PyCon JP 2018
Django REST Framework における API 実装プラクティス | PyCon JP 2018
 
The Django Web Application Framework 2
The Django Web Application Framework 2The Django Web Application Framework 2
The Django Web Application Framework 2
 
Django for Beginners
Django for BeginnersDjango for Beginners
Django for Beginners
 
Don't RTFM, WTFM - Open Source Documentation - German Perl Workshop 2010
Don't RTFM, WTFM - Open Source Documentation - German Perl Workshop 2010Don't RTFM, WTFM - Open Source Documentation - German Perl Workshop 2010
Don't RTFM, WTFM - Open Source Documentation - German Perl Workshop 2010
 
Looking Back to Move Forward: Building the Modern Web
Looking Back to Move Forward: Building the Modern WebLooking Back to Move Forward: Building the Modern Web
Looking Back to Move Forward: Building the Modern Web
 
django
djangodjango
django
 
Hybrid Web Applications
Hybrid Web ApplicationsHybrid Web Applications
Hybrid Web Applications
 
WordPress APIs
WordPress APIsWordPress APIs
WordPress APIs
 
SlideShare Instant
SlideShare InstantSlideShare Instant
SlideShare Instant
 
SlideShare Instant
SlideShare InstantSlideShare Instant
SlideShare Instant
 
What's new in Rails 2?
What's new in Rails 2?What's new in Rails 2?
What's new in Rails 2?
 
Basics java scripts
Basics java scriptsBasics java scripts
Basics java scripts
 
A Modest Introduction to Swift
A Modest Introduction to SwiftA Modest Introduction to Swift
A Modest Introduction to Swift
 
Html5
Html5Html5
Html5
 
Django Architecture Introduction
Django Architecture IntroductionDjango Architecture Introduction
Django Architecture Introduction
 
Angular js recommended practices - mini
Angular js   recommended practices - miniAngular js   recommended practices - mini
Angular js recommended practices - mini
 
Sphinx 1.1 i18n 機能紹介
Sphinx 1.1 i18n 機能紹介Sphinx 1.1 i18n 機能紹介
Sphinx 1.1 i18n 機能紹介
 
Djangocon 2014 angular + django
Djangocon 2014 angular + djangoDjangocon 2014 angular + django
Djangocon 2014 angular + django
 

Similar to Brian hogg word camp preparing a plugin for translation

Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress Maurizio Pelizzone
 
Angular js活用事例:filydoc
Angular js活用事例:filydocAngular js活用事例:filydoc
Angular js活用事例:filydocKeiichi Kobayashi
 
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...Doris Chen
 
Living With Legacy Code
Living With Legacy CodeLiving With Legacy Code
Living With Legacy CodeRowan Merewood
 
AFUP Lorraine - Symfony Webpack Encore
AFUP Lorraine - Symfony Webpack EncoreAFUP Lorraine - Symfony Webpack Encore
AFUP Lorraine - Symfony Webpack EncoreEngineor
 
WCRI 2015 I18N L10N
WCRI 2015 I18N L10NWCRI 2015 I18N L10N
WCRI 2015 I18N L10NDave McHale
 
Getting More Traffic From Search Advanced Seo For Developers Presentation
Getting More Traffic From Search  Advanced Seo For Developers PresentationGetting More Traffic From Search  Advanced Seo For Developers Presentation
Getting More Traffic From Search Advanced Seo For Developers PresentationSeo Indonesia
 
Speed up your developments with Symfony2
Speed up your developments with Symfony2Speed up your developments with Symfony2
Speed up your developments with Symfony2Hugo Hamon
 
Creating Yahoo Mobile Widgets
Creating Yahoo Mobile WidgetsCreating Yahoo Mobile Widgets
Creating Yahoo Mobile WidgetsRicardo Varela
 
Advanced SEO for Web Developers
Advanced SEO for Web DevelopersAdvanced SEO for Web Developers
Advanced SEO for Web DevelopersNathan Buggia
 

Similar to Brian hogg word camp preparing a plugin for translation (20)

Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress
 
Angular js活用事例:filydoc
Angular js活用事例:filydocAngular js活用事例:filydoc
Angular js活用事例:filydoc
 
Taking your Web App for a walk
Taking your Web App for a walkTaking your Web App for a walk
Taking your Web App for a walk
 
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
 
PhpBB meets Symfony2
PhpBB meets Symfony2PhpBB meets Symfony2
PhpBB meets Symfony2
 
Living With Legacy Code
Living With Legacy CodeLiving With Legacy Code
Living With Legacy Code
 
AFUP Lorraine - Symfony Webpack Encore
AFUP Lorraine - Symfony Webpack EncoreAFUP Lorraine - Symfony Webpack Encore
AFUP Lorraine - Symfony Webpack Encore
 
WCRI 2015 I18N L10N
WCRI 2015 I18N L10NWCRI 2015 I18N L10N
WCRI 2015 I18N L10N
 
Introduccion a HTML5
Introduccion a HTML5Introduccion a HTML5
Introduccion a HTML5
 
html5
html5html5
html5
 
Getting More Traffic From Search Advanced Seo For Developers Presentation
Getting More Traffic From Search  Advanced Seo For Developers PresentationGetting More Traffic From Search  Advanced Seo For Developers Presentation
Getting More Traffic From Search Advanced Seo For Developers Presentation
 
dJango
dJangodJango
dJango
 
Speed up your developments with Symfony2
Speed up your developments with Symfony2Speed up your developments with Symfony2
Speed up your developments with Symfony2
 
Php intro
Php introPhp intro
Php intro
 
Api Design
Api DesignApi Design
Api Design
 
Php mysql ppt
Php mysql pptPhp mysql ppt
Php mysql ppt
 
Creating Yahoo Mobile Widgets
Creating Yahoo Mobile WidgetsCreating Yahoo Mobile Widgets
Creating Yahoo Mobile Widgets
 
Wt unit 2 ppts client sied technology
Wt unit 2 ppts client sied technologyWt unit 2 ppts client sied technology
Wt unit 2 ppts client sied technology
 
Wt unit 2 ppts client side technology
Wt unit 2 ppts client side technologyWt unit 2 ppts client side technology
Wt unit 2 ppts client side technology
 
Advanced SEO for Web Developers
Advanced SEO for Web DevelopersAdvanced SEO for Web Developers
Advanced SEO for Web Developers
 

More from wcto2017

Word camp toronto 2017 secrets to a successful website building business fi...
Word camp toronto 2017   secrets to a successful website building business fi...Word camp toronto 2017   secrets to a successful website building business fi...
Word camp toronto 2017 secrets to a successful website building business fi...wcto2017
 
Better social wp_wcto
Better social wp_wctoBetter social wp_wcto
Better social wp_wctowcto2017
 
Creating word press community with the human voice
Creating word press community with the human voiceCreating word press community with the human voice
Creating word press community with the human voicewcto2017
 
Word press and containers
Word press and containersWord press and containers
Word press and containerswcto2017
 
New programs-17-09-29
New programs-17-09-29New programs-17-09-29
New programs-17-09-29wcto2017
 
Wordcamp 2017-toronto-sam lalonde
Wordcamp 2017-toronto-sam lalondeWordcamp 2017-toronto-sam lalonde
Wordcamp 2017-toronto-sam lalondewcto2017
 
Word camp ga 2017 4
Word camp ga 2017   4Word camp ga 2017   4
Word camp ga 2017 4wcto2017
 
Woo commerce fundamentals
Woo commerce fundamentalsWoo commerce fundamentals
Woo commerce fundamentalswcto2017
 
Navigating the censored web wcto
Navigating the censored web   wctoNavigating the censored web   wcto
Navigating the censored web wctowcto2017
 
Becoming knownwcto1
Becoming knownwcto1Becoming knownwcto1
Becoming knownwcto1wcto2017
 
Locol media mikepun wcto2017 v08
Locol media  mikepun  wcto2017 v08Locol media  mikepun  wcto2017 v08
Locol media mikepun wcto2017 v08wcto2017
 
Leveling up on building forms
Leveling up on building formsLeveling up on building forms
Leveling up on building formswcto2017
 
Joshua wold
Joshua woldJoshua wold
Joshua woldwcto2017
 
Word press beyond websites toronto
Word press  beyond websites torontoWord press  beyond websites toronto
Word press beyond websites torontowcto2017
 
Word camp toronto presentation centofanti
Word camp toronto presentation centofantiWord camp toronto presentation centofanti
Word camp toronto presentation centofantiwcto2017
 
Website optimization through quality experimentation (2)
Website optimization through quality experimentation (2)Website optimization through quality experimentation (2)
Website optimization through quality experimentation (2)wcto2017
 
Wp, uxd, and you
Wp, uxd, and youWp, uxd, and you
Wp, uxd, and youwcto2017
 
Little Things Make a Difference - Michelle Ames
Little Things Make a Difference - Michelle AmesLittle Things Make a Difference - Michelle Ames
Little Things Make a Difference - Michelle Ameswcto2017
 
Sass presentation
Sass presentationSass presentation
Sass presentationwcto2017
 
9 step-seo-healthcheck-points-for-your-word press-website
9 step-seo-healthcheck-points-for-your-word press-website9 step-seo-healthcheck-points-for-your-word press-website
9 step-seo-healthcheck-points-for-your-word press-websitewcto2017
 

More from wcto2017 (20)

Word camp toronto 2017 secrets to a successful website building business fi...
Word camp toronto 2017   secrets to a successful website building business fi...Word camp toronto 2017   secrets to a successful website building business fi...
Word camp toronto 2017 secrets to a successful website building business fi...
 
Better social wp_wcto
Better social wp_wctoBetter social wp_wcto
Better social wp_wcto
 
Creating word press community with the human voice
Creating word press community with the human voiceCreating word press community with the human voice
Creating word press community with the human voice
 
Word press and containers
Word press and containersWord press and containers
Word press and containers
 
New programs-17-09-29
New programs-17-09-29New programs-17-09-29
New programs-17-09-29
 
Wordcamp 2017-toronto-sam lalonde
Wordcamp 2017-toronto-sam lalondeWordcamp 2017-toronto-sam lalonde
Wordcamp 2017-toronto-sam lalonde
 
Word camp ga 2017 4
Word camp ga 2017   4Word camp ga 2017   4
Word camp ga 2017 4
 
Woo commerce fundamentals
Woo commerce fundamentalsWoo commerce fundamentals
Woo commerce fundamentals
 
Navigating the censored web wcto
Navigating the censored web   wctoNavigating the censored web   wcto
Navigating the censored web wcto
 
Becoming knownwcto1
Becoming knownwcto1Becoming knownwcto1
Becoming knownwcto1
 
Locol media mikepun wcto2017 v08
Locol media  mikepun  wcto2017 v08Locol media  mikepun  wcto2017 v08
Locol media mikepun wcto2017 v08
 
Leveling up on building forms
Leveling up on building formsLeveling up on building forms
Leveling up on building forms
 
Joshua wold
Joshua woldJoshua wold
Joshua wold
 
Word press beyond websites toronto
Word press  beyond websites torontoWord press  beyond websites toronto
Word press beyond websites toronto
 
Word camp toronto presentation centofanti
Word camp toronto presentation centofantiWord camp toronto presentation centofanti
Word camp toronto presentation centofanti
 
Website optimization through quality experimentation (2)
Website optimization through quality experimentation (2)Website optimization through quality experimentation (2)
Website optimization through quality experimentation (2)
 
Wp, uxd, and you
Wp, uxd, and youWp, uxd, and you
Wp, uxd, and you
 
Little Things Make a Difference - Michelle Ames
Little Things Make a Difference - Michelle AmesLittle Things Make a Difference - Michelle Ames
Little Things Make a Difference - Michelle Ames
 
Sass presentation
Sass presentationSass presentation
Sass presentation
 
9 step-seo-healthcheck-points-for-your-word press-website
9 step-seo-healthcheck-points-for-your-word press-website9 step-seo-healthcheck-points-for-your-word press-website
9 step-seo-healthcheck-points-for-your-word press-website
 

Recently uploaded

Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 

Recently uploaded (20)

Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 

Brian hogg word camp preparing a plugin for translation