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

08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
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
 
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetEnjoy Anytime
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
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
 
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
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 

Recently uploaded (20)

08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
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
 
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
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
 
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
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 

Brian hogg word camp preparing a plugin for translation