Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WordPress 翻訳の謎を解明してみよう (WordPress Translations Demystified)

WordPress 翻訳の謎を解明してみよう (WordPress Translations Demystified)

WordPress はデフォルトではアメリカ英語で書かれているのに、52% 以上の WordPress インストールがそれ以外の言語で使われています。翻訳はどこで誰がやっていて、毎日何千もの「言語パック」がどうやって自動生成されているのか、ご存知でしょうか?

このセッションでは、translate.wordpress.org を動かす WordPress 独自のエコシステムについて説明します。

Over 52% of all WordPress installs are using a locale that is not American English. But how is this possible since WordPress is by default written in English? Where are the translations coming from? What is generating thousands of language packs which are distributed every day – automatically?

This talk is about how WordPress’ own ecosystem powers translate.wordpress.org.

Dominik Schilling

September 15, 2018
Tweet

More Decks by Dominik Schilling

Other Decks in Technology

Transcript

  1. Or: A random guy tries to explain what makes WordPress

    for more than a half of its user base available in their native language. Dominik Schilling WordPress Core Developer @ocean90
  2. Context matters $title = _x( 'About', 'page title' ); $title

    = _x( 'About', 'personal data group label' ); $title = _x( 'About', 'theme starter content' );
  3. Context matters $title = _x( 'About', 'page title' ); $title

    = _x( 'About', 'personal data group label' ); $title = _x( 'About', 'theme starter content' ); WordPress について このサイトについて このサイトについて
  4. Comments matters, too /* translators: User dashboard screen title. %s:

    Network name */ $admin_title = sprintf( __( 'User Dashboard: %s' ), esc_html( get_network()->site_name ) );
  5. MakePOT • CLI tool for PHP to create POT files

    for • WordPress Core • Plugins • Themes • WordPress.org projects • Open source: https://i18n.trac.wordpress.org/browser/tools • Similar to Poedit but supports additional header fields for plugins and themes
  6. #: wp-includes/admin-bar.php:743 msgid "%s comment awaiting moderation" msgid_plural "%s comments

    awaiting moderation" msgstr[0] "" msgstr[1] "" Portable Object Template (POT)
  7. #. translators: Header for the About section in a personal

    data export. #: wp-admin/includes/file.php:1955 msgctxt "personal data group label" msgid "About" msgstr "" Portable Object Template (POT)
  8. MakePOT $ crontab -l | grep generate-pot 10 * *

    * * /bin/sh /home/wporg/bin/generate-pot.sh wp /home/wporg/co 25 * * * * /bin/sh /home/wporg/bin/generate-pot.sh wpthemes /home/wporg/co 30 * * * * /bin/sh /home/wporg/bin/generate-pot.sh wporg /home/wporg/co 40 * * * * /bin/sh /home/wporg/bin/generate-pot.sh rosetta /home/wporg/co 50 * * * * /bin/sh /home/wporg/bin/generate-pot.sh wordcamporg /home/wporg/co • Runs on a cron job every hour • Custom wrapper generate-pot.sh • Updates SVN checkouts • Commits POT files to i18n.svn.wordpress.org
  9. GlotPress • Lets you set up your own collaborative, web-based

    software translation tool • Previously powered by the deprecated BackPress library • Since January 18, 2016 a WordPress Plugin • https://wordpress.org/plugins/glotpress/ • Developed on GitHub: https://github.com/GlotPress/GlotPress-WP • > 35 Contributors, led by Greg Ross and Dominik Schilling
  10. Import of POT files • Importer runs on a cron

    job every hour • Wrapper for GlotPress’ default CLI importer • Slack notification in #polyglots channel
  11. .po - Portable Object # Translation of WordPress - 4.9.x

    - Development in Japanese # This file is distributed under the same license as the WordPress - 4.9.x - Development package. msgid "" msgstr "" "PO-Revision-Date: 2018-09-05 06:05:23+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: GlotPress/2.4.0-alpha\n" "Language: ja_JP\n" "Project-Id-Version: WordPress - 4.9.x - Development\n" #: wp-includes/admin-bar.php:355 wp-includes/admin-bar.php:451 #: wp-includes/admin-bar.php:534 wp-includes/deprecated.php:2800 #: wp-includes/deprecated.php:2802 msgid "Dashboard" msgstr "ダッシュボード"
  12. .mo - Machine Object de12 0495 0000 0000 0200 0000

    1c00 0000 2c00 0000 0500 0000 3c00 0000 0000 0000 5000 0000 0900 0000 5100 0000 4001 0000 5b00 0000 1000 0000 9c01 0000 0100 0000 0000 0000 0000 0000 0000 0000 0200 0000 0044 6173 6862 6f61 7264 0050 4f2d 5265 7669 7369 6f6e 2d44 6174 653a 2032 3031 362d 3039 2d32 3120 3130 3a31 393a 3130 2b30 3030 300a 4d49 4d45 2d56 6572 7369 6f6e 3a20 312e 300a 436f 6e74 656e 742d 5479 7065 3a20 7465 7874 2f70 6c61 696e 3b20 6368 6172 7365 743d 5554 462d 380a 436f 6e74 656e 742d 5472 616e 7366 6572 2d45 6e63 6f64 696e 673a 2038 6269 740a 506c 7572 616c 2d46 6f72 6d73 3a20 6e70 6c75 7261 6c73 3d36 3b20 706c 7572 616c 3d6e 3d3d 3020 3f20 3020 3a20 6e3d 3d31 203f 2031 203a 206e 3d3d 3220 3f20 3220 3a20 6e25 3130 303e 3d33 2026 2620 6e25 3130 303c 3d31 3020 3f20 3320 3a20 6e25 3130 303e 3d31 3120 2626 206e 2531 3030 3c3d 3939 203f 2034 203a 2035 3b0a 582d 4765 6e65 7261 746f 723a 2047 6c6f 7450 7265 7373 2f32 2e31 2e30 2d61 6c70 6861 0a50 726f 6a65 6374 2d49 642d 5665 7273 696f 6e3a 2034 2e36 2e78 0a00 d8a7 d984 d8b1 d8a6 d98a d8b3 d98a d8a9 00
  13. WordPress ❤ Language Packs • Translations are stored in wp-content/languages

    • Translations are auto-updated • Translations are installed on-the-fly when switching your site language • Translations are installed asynchronously during other updates • One more reason why auto-updates should not be disabled (and why you should too)
  14. Requirements • The plugin/theme uses a proper text domain registration

    • Text domain must be the same as the plugin/theme slug • Special case for WordPress 4.6+
  15. Reminder # WordPress < 4.6 my-plugin.php * Text Domain: my-plugin

    * Domain Path: /languages load_plugin_textdomain( 'my-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' ); # WordPress => 4.6 readme.txt: Requires at least: 4.6
  16. Requirements • The plugin/theme uses a proper text domain registration

    • Text domain must be the same as the plugin/theme slug • Special case for WordPress 4.6+ • The plugin/theme is hosted in the official WordPress directory • Nothing more. • Checkout our handbook for detailed information:
 https://make.wordpress.org/meta/handbook/documentation/translations/
  17. Good to know • Follow the #meta-language-packs channel on Slack

    • Language packs are updated 30 minutes after a change • Languages packs are generated if a project is 95% or more translated
  18. Good to know • Check the status by visiting the

    Language Packs page of your project on translate.wordpress.org
  19. Cavalcade - Features • Guaranteed Running • Designed for Multisite

    • Horizontally Scalable • Parallel Processing • Status Monitoring
  20. Cavalcade - Setup • WordPress Plugin: • https://github.com/humanmade/Cavalcade • define(

    'DISABLE_WP_CRON', true ); • WP-CLI commands • wp cavalcade jobs • wp cavalcade log • wp cavalcade run <id> • Runner • https://github.com/humanmade/Cavalcade-Runner
  21. 0 5,000,000 10,000,000 15,000,000 20,000,000 25,000,000 30,000,000 2010 2011 2012

    2013 2014 2015 2016 2017 2018 723,562 782,079 987,623 1,290,687 1,692,593 21,393,138 10,157,097 3,788,374 2,574,140 Import of plugins and themes
  22. GlotPress • Locale glossaries, JavaScript Localization ✅ • Notes/Comments/Reject with

    feedback, Notifications • REST API • Theme/Templates/Design • Translation Memory
  23. Language Packs • Faster updates for core, just like for

    plugins/themes • Reduce the number of complex packages • my_MM, ja , far_IR, hu_HU, sr_RS, zh_CN • Make automatic release builds more … automatic • Move readme.html to translate.wordpress.org • No SVN • Switch build tools to benefit of the WP-CLI ecosystem