Posts Tagged ‘internationalization’

Changes to the Event Espresso language files in 3.1.30

language-files

We’re making some exciting behind-the-scenes changes with how we’ll be handling the language files in the next version of Event Espresso and moving forward. Some things will be drastically different but we’re doing this with our users in mind so there will be very little on your end that you need to worry about except in some very specific cases, which I’ll cover in this post.

How we’re currently handling languages

Currently, Event Espresso bundles all of our language files in the plugin. This leads to a very large plugin. Over 25MB is used just for the language files after they are extracted. Some hosts — particularly shared servers with limited resources — will throw script timeout or max_file_upload errors when uploading or installing Event Espresso. The compressed size of Event Espresso is over 7MB currently, which exceeds the 5MB threshold that’s often the default for shared servers. The new compressed size of Event Espresso with this update is just over 3MB!  No more max_file_upload issues. No more script timeouts. The install and update process will be much smoother and faster.

What’s changing?

Starting with the next release, 3.1.30, we will be discontinuing the inclusion of all language files in the core Event Espresso plugin. This will drastically reduce the size of the overall plugin, making installs and upgrades much faster and eliminate a lot of the current issues that people have with their installs and updates.

Instead of bundling the language files in the core plugin, we’re offloading those files to a GitHub repository. If you are using one of the language files (e.g., you have a locale set in your wp-config.php via the WP_LANG definition), Event Espresso will dynamically fetch just those language files from the GitHub repository and download them into your /event-espresso/languages/ directory.

What changes for English (US) language users?

Nothing. If you aren’t using the language files, you won’t notice any changes with the possible exception of updates being faster than they were previously.

What changes for everyone else (non-English (US) language users)?

It’s possible that the files don’t download correctly from GitHub. This is a worst-case scenario as it should magically work out of the box when you update. If this happens, you can download the relevant language file from our public GitHub repository and upload it to your /languages/ folder.

With every Event Espresso update, if there have been updates to the language files, they will automatically get downloaded to your /languages/ directory and overwrite the existing language files. If the language files have been updated and you would like to incorporate the updated language files before the next release of Event Espresso is available, you can do so by downloading the files from GitHub.

Special cases (if you’ve modified your language files)

If you’ve modified your language files (for example, to modify a string to display a different message), you will now be able to upload your customized language files to /wp-content/uploads/espresso/languages/. This will override the language files in /event-espresso/languages/. You will be responsible for updating the language file if there are changes to the source.

What this means to translators

For translators, nothing has changed, really, except that you can now download the final .mo/.po files from GitHub once they are added to the repository. However, for people who are familiar with Git and Github, please do not submit pull requests to the GitHub repository. They will be ignored. The proper process is still to get validator access on the GlotPress site and make your translations there. However, you will now also be able to upload customized/modified language files to /wp-content/uploads/espresso/languages/ if, for example, you wanted to test a translation you were making changes to.


Our translation project is 100% community-supported, and we are proud of how it’s grown. There are now 26 language files in development and we hope to continue to watch that figure grow and those translations fill out in 2013 and beyond. If you would like to be involved in one of our translations or to translate Event Espresso into a language we don’t have yet, please fill out our translator application and we will get your account set up.

Tags: , , , , ,
Posted in Product & News | 1 Comment »

Do NOT follow this link or you will be banned from the site!
[gravityform id=116 title=false description=false]
<div class='gf_browser_unknown gform_wrapper' id='gform_wrapper_116' ><form method='post' enctype='multipart/form-data' id='gform_116' action='/tag/internationalization/'> <div class='gform_body'><ul id='gform_fields_116' class='gform_fields top_label form_sublabel_below description_below'><li id='field_116_5' class='gfield gfield_contains_required field_sublabel_hidden_label field_description_below gfield_visibility_visible' ><label class='gfield_label gfield_label_before_complex' >What is your first name?<span class='gfield_required'>*</span></label><div class='ginput_complex ginput_container no_prefix has_first_name no_middle_name no_last_name no_suffix gf_name_has_1 ginput_container_name' id='input_116_5'> <span id='input_116_5_3_container' class='name_first' > <input type='text' name='input_5.3' id='input_116_5_3' value='' aria-label='First name' aria-required="true" aria-invalid="false" placeholder='First name'/> <label for='input_116_5_3' class='hidden_sub_label screen-reader-text'>First name</label> </span> </div></li><li id='field_116_1' class='gfield gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_116_1' >What is your email address so we can follow up with you?<span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_text'><input name='input_1' id='input_116_1' type='text' value='' class='medium' placeholder='hello@example.com' aria-required="true" aria-invalid="false" /></div></li><li id='field_116_2' class='gfield gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_116_2' >Tell us about your concerns below<span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_textarea'><textarea name='input_2' id='input_116_2' class='textarea medium' placeholder='What kind of events are you planning?' aria-required="true" aria-invalid="false" rows='10' cols='50'></textarea></div></li><li id='field_116_6' class='gfield field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' >GDPR Agreement</label><div class='ginput_container ginput_container_checkbox'><ul class='gfield_checkbox' id='input_116_6'><li class='gchoice_116_6_1'> <input name='input_6.1' type='checkbox' value='I consent to have this website store my submitted information so they can respond to my inquiry.' id='choice_116_6_1' /> <label for='choice_116_6_1' id='label_116_6_1'>I consent to have this website store my submitted information so they can respond to my inquiry.</label> </li></ul></div></li><li id='field_116_3' class='gfield gform_hidden field_sublabel_below field_description_below gfield_visibility_visible' ><input name='input_3' id='input_116_3' type='hidden' class='gform_hidden' aria-invalid="false" value='' /></li><li id='field_116_4' class='gfield gform_hidden field_sublabel_below field_description_below gfield_visibility_visible' ><input name='input_4' id='input_116_4' type='hidden' class='gform_hidden' aria-invalid="false" value='https://eventespresso.com/tag/internationalization/' /></li><li id='field_116_7' class='gfield gform_validation_container field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_116_7' >Email</label><div class='ginput_container'><input name='input_7' id='input_116_7' type='text' value='' autocomplete='off'/></div><div class='gfield_description' id='gfield_description__7'>This field is for validation purposes and should be left unchanged.</div></li> </ul></div> <div class='gform_footer top_label'> <input type='submit' id='gform_submit_button_116' class='gform_button button' value='Send my message' onclick='if(window["gf_submitting_116"]){return false;} if( !jQuery("#gform_116")[0].checkValidity || jQuery("#gform_116")[0].checkValidity()){window["gf_submitting_116"]=true;} ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_116"]){return false;} if( !jQuery("#gform_116")[0].checkValidity || jQuery("#gform_116")[0].checkValidity()){window["gf_submitting_116"]=true;} jQuery("#gform_116").trigger("submit",[true]); }' /> <input type='hidden' class='gform_hidden' name='is_submit_116' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='116' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_116' value='WyJbXSIsIjBiNjdjZjkyMDUzOWUxOWY5Y2NiZjIwMzM4YjA1Mjk4Il0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_116' id='gform_target_page_number_116' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_116' id='gform_source_page_number_116' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> </form> </div><script type='text/javascript'> jQuery(document).bind('gform_post_render', function(event, formId, currentPage){if(formId == 116) {if(typeof Placeholders != 'undefined'){ Placeholders.enable(); }} } );jQuery(document).bind('gform_post_conditional_logic', function(event, formId, fields, isInit){} );</script><script type='text/javascript'> jQuery(document).ready(function(){jQuery(document).trigger('gform_post_render', [116, 1]) } ); </script>