📜 ⬆️ ⬇️

Russian without robotism, part 1

I am totally for the purity and proper use of the Russian language. In life in general and in RuNet in particular. For from labels like “23 pieces” or averaged variants “23 pcs.”, To put it mildly, it jars.

Therefore, when the task arose of overcoming robotism in the nouns of nouns, a corresponding function was developed and implemented (or rather, a plugin for Smarty).

The function is based on the rule - there are a total of 3 variants (sometimes less) of nouns for any Russian words used with the number:


')
Naturally, getting this pattern, write the code was not difficult.

Copy Source | Copy HTML /** * Smarty {number2word} function plugin * * Type: function* Name: number2word* Purpose: Get russian (or other lang) word equivalent to current number of items * @author Beresnev Sergey * @param array * @param Smarty */ function smarty_function_number2word( $params , & $smarty ) { if (! isset ( $params [ 'number' ])) { $smarty ->trigger_error( "numbertoword: 'number'" ); return ; } if (! isset ( $params [ 'name1' ]) or ! isset ( $params [ 'name2' ]) or ! isset ( $params [ 'name3' ])) { $smarty ->trigger_error( "numbertoword: 'name1' 'name2' 'name3'" ); return ; } $temp = strval( $params [ 'number' ]); $temp = $temp [utf8_strlen( $temp )-1]; return (( $temp >1 and $temp <5 and (intval( $params [ 'number' ]%100)>19 or intval( $params [ 'number' ]%100)<10))? $params [ 'name2' ]:( $temp ==1? $params [ 'name1' ]: $params [ 'name3' ])); }
  1. Copy Source | Copy HTML /** * Smarty {number2word} function plugin * * Type: function* Name: number2word* Purpose: Get russian (or other lang) word equivalent to current number of items * @author Beresnev Sergey * @param array * @param Smarty */ function smarty_function_number2word( $params , & $smarty ) { if (! isset ( $params [ 'number' ])) { $smarty ->trigger_error( "numbertoword: 'number'" ); return ; } if (! isset ( $params [ 'name1' ]) or ! isset ( $params [ 'name2' ]) or ! isset ( $params [ 'name3' ])) { $smarty ->trigger_error( "numbertoword: 'name1' 'name2' 'name3'" ); return ; } $temp = strval( $params [ 'number' ]); $temp = $temp [utf8_strlen( $temp )-1]; return (( $temp >1 and $temp <5 and (intval( $params [ 'number' ]%100)>19 or intval( $params [ 'number' ]%100)<10))? $params [ 'name2' ]:( $temp ==1? $params [ 'name1' ]: $params [ 'name3' ])); }
  2. Copy Source | Copy HTML /** * Smarty {number2word} function plugin * * Type: function* Name: number2word* Purpose: Get russian (or other lang) word equivalent to current number of items * @author Beresnev Sergey * @param array * @param Smarty */ function smarty_function_number2word( $params , & $smarty ) { if (! isset ( $params [ 'number' ])) { $smarty ->trigger_error( "numbertoword: 'number'" ); return ; } if (! isset ( $params [ 'name1' ]) or ! isset ( $params [ 'name2' ]) or ! isset ( $params [ 'name3' ])) { $smarty ->trigger_error( "numbertoword: 'name1' 'name2' 'name3'" ); return ; } $temp = strval( $params [ 'number' ]); $temp = $temp [utf8_strlen( $temp )-1]; return (( $temp >1 and $temp <5 and (intval( $params [ 'number' ]%100)>19 or intval( $params [ 'number' ]%100)<10))? $params [ 'name2' ]:( $temp ==1? $params [ 'name1' ]: $params [ 'name3' ])); }
  3. Copy Source | Copy HTML /** * Smarty {number2word} function plugin * * Type: function* Name: number2word* Purpose: Get russian (or other lang) word equivalent to current number of items * @author Beresnev Sergey * @param array * @param Smarty */ function smarty_function_number2word( $params , & $smarty ) { if (! isset ( $params [ 'number' ])) { $smarty ->trigger_error( "numbertoword: 'number'" ); return ; } if (! isset ( $params [ 'name1' ]) or ! isset ( $params [ 'name2' ]) or ! isset ( $params [ 'name3' ])) { $smarty ->trigger_error( "numbertoword: 'name1' 'name2' 'name3'" ); return ; } $temp = strval( $params [ 'number' ]); $temp = $temp [utf8_strlen( $temp )-1]; return (( $temp >1 and $temp <5 and (intval( $params [ 'number' ]%100)>19 or intval( $params [ 'number' ]%100)<10))? $params [ 'name2' ]:( $temp ==1? $params [ 'name1' ]: $params [ 'name3' ])); }
  4. Copy Source | Copy HTML /** * Smarty {number2word} function plugin * * Type: function* Name: number2word* Purpose: Get russian (or other lang) word equivalent to current number of items * @author Beresnev Sergey * @param array * @param Smarty */ function smarty_function_number2word( $params , & $smarty ) { if (! isset ( $params [ 'number' ])) { $smarty ->trigger_error( "numbertoword: 'number'" ); return ; } if (! isset ( $params [ 'name1' ]) or ! isset ( $params [ 'name2' ]) or ! isset ( $params [ 'name3' ])) { $smarty ->trigger_error( "numbertoword: 'name1' 'name2' 'name3'" ); return ; } $temp = strval( $params [ 'number' ]); $temp = $temp [utf8_strlen( $temp )-1]; return (( $temp >1 and $temp <5 and (intval( $params [ 'number' ]%100)>19 or intval( $params [ 'number' ]%100)<10))? $params [ 'name2' ]:( $temp ==1? $params [ 'name1' ]: $params [ 'name3' ])); }
  5. Copy Source | Copy HTML /** * Smarty {number2word} function plugin * * Type: function* Name: number2word* Purpose: Get russian (or other lang) word equivalent to current number of items * @author Beresnev Sergey * @param array * @param Smarty */ function smarty_function_number2word( $params , & $smarty ) { if (! isset ( $params [ 'number' ])) { $smarty ->trigger_error( "numbertoword: 'number'" ); return ; } if (! isset ( $params [ 'name1' ]) or ! isset ( $params [ 'name2' ]) or ! isset ( $params [ 'name3' ])) { $smarty ->trigger_error( "numbertoword: 'name1' 'name2' 'name3'" ); return ; } $temp = strval( $params [ 'number' ]); $temp = $temp [utf8_strlen( $temp )-1]; return (( $temp >1 and $temp <5 and (intval( $params [ 'number' ]%100)>19 or intval( $params [ 'number' ]%100)<10))? $params [ 'name2' ]:( $temp ==1? $params [ 'name1' ]: $params [ 'name3' ])); }
  6. Copy Source | Copy HTML /** * Smarty {number2word} function plugin * * Type: function* Name: number2word* Purpose: Get russian (or other lang) word equivalent to current number of items * @author Beresnev Sergey * @param array * @param Smarty */ function smarty_function_number2word( $params , & $smarty ) { if (! isset ( $params [ 'number' ])) { $smarty ->trigger_error( "numbertoword: 'number'" ); return ; } if (! isset ( $params [ 'name1' ]) or ! isset ( $params [ 'name2' ]) or ! isset ( $params [ 'name3' ])) { $smarty ->trigger_error( "numbertoword: 'name1' 'name2' 'name3'" ); return ; } $temp = strval( $params [ 'number' ]); $temp = $temp [utf8_strlen( $temp )-1]; return (( $temp >1 and $temp <5 and (intval( $params [ 'number' ]%100)>19 or intval( $params [ 'number' ]%100)<10))? $params [ 'name2' ]:( $temp ==1? $params [ 'name1' ]: $params [ 'name3' ])); }
  7. Copy Source | Copy HTML /** * Smarty {number2word} function plugin * * Type: function* Name: number2word* Purpose: Get russian (or other lang) word equivalent to current number of items * @author Beresnev Sergey * @param array * @param Smarty */ function smarty_function_number2word( $params , & $smarty ) { if (! isset ( $params [ 'number' ])) { $smarty ->trigger_error( "numbertoword: 'number'" ); return ; } if (! isset ( $params [ 'name1' ]) or ! isset ( $params [ 'name2' ]) or ! isset ( $params [ 'name3' ])) { $smarty ->trigger_error( "numbertoword: 'name1' 'name2' 'name3'" ); return ; } $temp = strval( $params [ 'number' ]); $temp = $temp [utf8_strlen( $temp )-1]; return (( $temp >1 and $temp <5 and (intval( $params [ 'number' ]%100)>19 or intval( $params [ 'number' ]%100)<10))? $params [ 'name2' ]:( $temp ==1? $params [ 'name1' ]: $params [ 'name3' ])); }
  8. Copy Source | Copy HTML /** * Smarty {number2word} function plugin * * Type: function* Name: number2word* Purpose: Get russian (or other lang) word equivalent to current number of items * @author Beresnev Sergey * @param array * @param Smarty */ function smarty_function_number2word( $params , & $smarty ) { if (! isset ( $params [ 'number' ])) { $smarty ->trigger_error( "numbertoword: 'number'" ); return ; } if (! isset ( $params [ 'name1' ]) or ! isset ( $params [ 'name2' ]) or ! isset ( $params [ 'name3' ])) { $smarty ->trigger_error( "numbertoword: 'name1' 'name2' 'name3'" ); return ; } $temp = strval( $params [ 'number' ]); $temp = $temp [utf8_strlen( $temp )-1]; return (( $temp >1 and $temp <5 and (intval( $params [ 'number' ]%100)>19 or intval( $params [ 'number' ]%100)<10))? $params [ 'name2' ]:( $temp ==1? $params [ 'name1' ]: $params [ 'name3' ])); }
  9. Copy Source | Copy HTML /** * Smarty {number2word} function plugin * * Type: function* Name: number2word* Purpose: Get russian (or other lang) word equivalent to current number of items * @author Beresnev Sergey * @param array * @param Smarty */ function smarty_function_number2word( $params , & $smarty ) { if (! isset ( $params [ 'number' ])) { $smarty ->trigger_error( "numbertoword: 'number'" ); return ; } if (! isset ( $params [ 'name1' ]) or ! isset ( $params [ 'name2' ]) or ! isset ( $params [ 'name3' ])) { $smarty ->trigger_error( "numbertoword: 'name1' 'name2' 'name3'" ); return ; } $temp = strval( $params [ 'number' ]); $temp = $temp [utf8_strlen( $temp )-1]; return (( $temp >1 and $temp <5 and (intval( $params [ 'number' ]%100)>19 or intval( $params [ 'number' ]%100)<10))? $params [ 'name2' ]:( $temp ==1? $params [ 'name1' ]: $params [ 'name3' ])); }
  10. Copy Source | Copy HTML /** * Smarty {number2word} function plugin * * Type: function* Name: number2word* Purpose: Get russian (or other lang) word equivalent to current number of items * @author Beresnev Sergey * @param array * @param Smarty */ function smarty_function_number2word( $params , & $smarty ) { if (! isset ( $params [ 'number' ])) { $smarty ->trigger_error( "numbertoword: 'number'" ); return ; } if (! isset ( $params [ 'name1' ]) or ! isset ( $params [ 'name2' ]) or ! isset ( $params [ 'name3' ])) { $smarty ->trigger_error( "numbertoword: 'name1' 'name2' 'name3'" ); return ; } $temp = strval( $params [ 'number' ]); $temp = $temp [utf8_strlen( $temp )-1]; return (( $temp >1 and $temp <5 and (intval( $params [ 'number' ]%100)>19 or intval( $params [ 'number' ]%100)<10))? $params [ 'name2' ]:( $temp ==1? $params [ 'name1' ]: $params [ 'name3' ])); }
  11. Copy Source | Copy HTML /** * Smarty {number2word} function plugin * * Type: function* Name: number2word* Purpose: Get russian (or other lang) word equivalent to current number of items * @author Beresnev Sergey * @param array * @param Smarty */ function smarty_function_number2word( $params , & $smarty ) { if (! isset ( $params [ 'number' ])) { $smarty ->trigger_error( "numbertoword: 'number'" ); return ; } if (! isset ( $params [ 'name1' ]) or ! isset ( $params [ 'name2' ]) or ! isset ( $params [ 'name3' ])) { $smarty ->trigger_error( "numbertoword: 'name1' 'name2' 'name3'" ); return ; } $temp = strval( $params [ 'number' ]); $temp = $temp [utf8_strlen( $temp )-1]; return (( $temp >1 and $temp <5 and (intval( $params [ 'number' ]%100)>19 or intval( $params [ 'number' ]%100)<10))? $params [ 'name2' ]:( $temp ==1? $params [ 'name1' ]: $params [ 'name3' ])); }
  12. Copy Source | Copy HTML /** * Smarty {number2word} function plugin * * Type: function* Name: number2word* Purpose: Get russian (or other lang) word equivalent to current number of items * @author Beresnev Sergey * @param array * @param Smarty */ function smarty_function_number2word( $params , & $smarty ) { if (! isset ( $params [ 'number' ])) { $smarty ->trigger_error( "numbertoword: 'number'" ); return ; } if (! isset ( $params [ 'name1' ]) or ! isset ( $params [ 'name2' ]) or ! isset ( $params [ 'name3' ])) { $smarty ->trigger_error( "numbertoword: 'name1' 'name2' 'name3'" ); return ; } $temp = strval( $params [ 'number' ]); $temp = $temp [utf8_strlen( $temp )-1]; return (( $temp >1 and $temp <5 and (intval( $params [ 'number' ]%100)>19 or intval( $params [ 'number' ]%100)<10))? $params [ 'name2' ]:( $temp ==1? $params [ 'name1' ]: $params [ 'name3' ])); }
  13. Copy Source | Copy HTML /** * Smarty {number2word} function plugin * * Type: function* Name: number2word* Purpose: Get russian (or other lang) word equivalent to current number of items * @author Beresnev Sergey * @param array * @param Smarty */ function smarty_function_number2word( $params , & $smarty ) { if (! isset ( $params [ 'number' ])) { $smarty ->trigger_error( "numbertoword: 'number'" ); return ; } if (! isset ( $params [ 'name1' ]) or ! isset ( $params [ 'name2' ]) or ! isset ( $params [ 'name3' ])) { $smarty ->trigger_error( "numbertoword: 'name1' 'name2' 'name3'" ); return ; } $temp = strval( $params [ 'number' ]); $temp = $temp [utf8_strlen( $temp )-1]; return (( $temp >1 and $temp <5 and (intval( $params [ 'number' ]%100)>19 or intval( $params [ 'number' ]%100)<10))? $params [ 'name2' ]:( $temp ==1? $params [ 'name1' ]: $params [ 'name3' ])); }
  14. Copy Source | Copy HTML /** * Smarty {number2word} function plugin * * Type: function* Name: number2word* Purpose: Get russian (or other lang) word equivalent to current number of items * @author Beresnev Sergey * @param array * @param Smarty */ function smarty_function_number2word( $params , & $smarty ) { if (! isset ( $params [ 'number' ])) { $smarty ->trigger_error( "numbertoword: 'number'" ); return ; } if (! isset ( $params [ 'name1' ]) or ! isset ( $params [ 'name2' ]) or ! isset ( $params [ 'name3' ])) { $smarty ->trigger_error( "numbertoword: 'name1' 'name2' 'name3'" ); return ; } $temp = strval( $params [ 'number' ]); $temp = $temp [utf8_strlen( $temp )-1]; return (( $temp >1 and $temp <5 and (intval( $params [ 'number' ]%100)>19 or intval( $params [ 'number' ]%100)<10))? $params [ 'name2' ]:( $temp ==1? $params [ 'name1' ]: $params [ 'name3' ])); }
  15. Copy Source | Copy HTML /** * Smarty {number2word} function plugin * * Type: function* Name: number2word* Purpose: Get russian (or other lang) word equivalent to current number of items * @author Beresnev Sergey * @param array * @param Smarty */ function smarty_function_number2word( $params , & $smarty ) { if (! isset ( $params [ 'number' ])) { $smarty ->trigger_error( "numbertoword: 'number'" ); return ; } if (! isset ( $params [ 'name1' ]) or ! isset ( $params [ 'name2' ]) or ! isset ( $params [ 'name3' ])) { $smarty ->trigger_error( "numbertoword: 'name1' 'name2' 'name3'" ); return ; } $temp = strval( $params [ 'number' ]); $temp = $temp [utf8_strlen( $temp )-1]; return (( $temp >1 and $temp <5 and (intval( $params [ 'number' ]%100)>19 or intval( $params [ 'number' ]%100)<10))? $params [ 'name2' ]:( $temp ==1? $params [ 'name1' ]: $params [ 'name3' ])); }
  16. Copy Source | Copy HTML /** * Smarty {number2word} function plugin * * Type: function* Name: number2word* Purpose: Get russian (or other lang) word equivalent to current number of items * @author Beresnev Sergey * @param array * @param Smarty */ function smarty_function_number2word( $params , & $smarty ) { if (! isset ( $params [ 'number' ])) { $smarty ->trigger_error( "numbertoword: 'number'" ); return ; } if (! isset ( $params [ 'name1' ]) or ! isset ( $params [ 'name2' ]) or ! isset ( $params [ 'name3' ])) { $smarty ->trigger_error( "numbertoword: 'name1' 'name2' 'name3'" ); return ; } $temp = strval( $params [ 'number' ]); $temp = $temp [utf8_strlen( $temp )-1]; return (( $temp >1 and $temp <5 and (intval( $params [ 'number' ]%100)>19 or intval( $params [ 'number' ]%100)<10))? $params [ 'name2' ]:( $temp ==1? $params [ 'name1' ]: $params [ 'name3' ])); }
  17. Copy Source | Copy HTML /** * Smarty {number2word} function plugin * * Type: function* Name: number2word* Purpose: Get russian (or other lang) word equivalent to current number of items * @author Beresnev Sergey * @param array * @param Smarty */ function smarty_function_number2word( $params , & $smarty ) { if (! isset ( $params [ 'number' ])) { $smarty ->trigger_error( "numbertoword: 'number'" ); return ; } if (! isset ( $params [ 'name1' ]) or ! isset ( $params [ 'name2' ]) or ! isset ( $params [ 'name3' ])) { $smarty ->trigger_error( "numbertoword: 'name1' 'name2' 'name3'" ); return ; } $temp = strval( $params [ 'number' ]); $temp = $temp [utf8_strlen( $temp )-1]; return (( $temp >1 and $temp <5 and (intval( $params [ 'number' ]%100)>19 or intval( $params [ 'number' ]%100)<10))? $params [ 'name2' ]:( $temp ==1? $params [ 'name1' ]: $params [ 'name3' ])); }
  18. Copy Source | Copy HTML /** * Smarty {number2word} function plugin * * Type: function* Name: number2word* Purpose: Get russian (or other lang) word equivalent to current number of items * @author Beresnev Sergey * @param array * @param Smarty */ function smarty_function_number2word( $params , & $smarty ) { if (! isset ( $params [ 'number' ])) { $smarty ->trigger_error( "numbertoword: 'number'" ); return ; } if (! isset ( $params [ 'name1' ]) or ! isset ( $params [ 'name2' ]) or ! isset ( $params [ 'name3' ])) { $smarty ->trigger_error( "numbertoword: 'name1' 'name2' 'name3'" ); return ; } $temp = strval( $params [ 'number' ]); $temp = $temp [utf8_strlen( $temp )-1]; return (( $temp >1 and $temp <5 and (intval( $params [ 'number' ]%100)>19 or intval( $params [ 'number' ]%100)<10))? $params [ 'name2' ]:( $temp ==1? $params [ 'name1' ]: $params [ 'name3' ])); }
  19. Copy Source | Copy HTML /** * Smarty {number2word} function plugin * * Type: function* Name: number2word* Purpose: Get russian (or other lang) word equivalent to current number of items * @author Beresnev Sergey * @param array * @param Smarty */ function smarty_function_number2word( $params , & $smarty ) { if (! isset ( $params [ 'number' ])) { $smarty ->trigger_error( "numbertoword: 'number'" ); return ; } if (! isset ( $params [ 'name1' ]) or ! isset ( $params [ 'name2' ]) or ! isset ( $params [ 'name3' ])) { $smarty ->trigger_error( "numbertoword: 'name1' 'name2' 'name3'" ); return ; } $temp = strval( $params [ 'number' ]); $temp = $temp [utf8_strlen( $temp )-1]; return (( $temp >1 and $temp <5 and (intval( $params [ 'number' ]%100)>19 or intval( $params [ 'number' ]%100)<10))? $params [ 'name2' ]:( $temp ==1? $params [ 'name1' ]: $params [ 'name3' ])); }
  20. Copy Source | Copy HTML /** * Smarty {number2word} function plugin * * Type: function* Name: number2word* Purpose: Get russian (or other lang) word equivalent to current number of items * @author Beresnev Sergey * @param array * @param Smarty */ function smarty_function_number2word( $params , & $smarty ) { if (! isset ( $params [ 'number' ])) { $smarty ->trigger_error( "numbertoword: 'number'" ); return ; } if (! isset ( $params [ 'name1' ]) or ! isset ( $params [ 'name2' ]) or ! isset ( $params [ 'name3' ])) { $smarty ->trigger_error( "numbertoword: 'name1' 'name2' 'name3'" ); return ; } $temp = strval( $params [ 'number' ]); $temp = $temp [utf8_strlen( $temp )-1]; return (( $temp >1 and $temp <5 and (intval( $params [ 'number' ]%100)>19 or intval( $params [ 'number' ]%100)<10))? $params [ 'name2' ]:( $temp ==1? $params [ 'name1' ]: $params [ 'name3' ])); }
  21. Copy Source | Copy HTML /** * Smarty {number2word} function plugin * * Type: function* Name: number2word* Purpose: Get russian (or other lang) word equivalent to current number of items * @author Beresnev Sergey * @param array * @param Smarty */ function smarty_function_number2word( $params , & $smarty ) { if (! isset ( $params [ 'number' ])) { $smarty ->trigger_error( "numbertoword: 'number'" ); return ; } if (! isset ( $params [ 'name1' ]) or ! isset ( $params [ 'name2' ]) or ! isset ( $params [ 'name3' ])) { $smarty ->trigger_error( "numbertoword: 'name1' 'name2' 'name3'" ); return ; } $temp = strval( $params [ 'number' ]); $temp = $temp [utf8_strlen( $temp )-1]; return (( $temp >1 and $temp <5 and (intval( $params [ 'number' ]%100)>19 or intval( $params [ 'number' ]%100)<10))? $params [ 'name2' ]:( $temp ==1? $params [ 'name1' ]: $params [ 'name3' ])); }
  22. Copy Source | Copy HTML /** * Smarty {number2word} function plugin * * Type: function* Name: number2word* Purpose: Get russian (or other lang) word equivalent to current number of items * @author Beresnev Sergey * @param array * @param Smarty */ function smarty_function_number2word( $params , & $smarty ) { if (! isset ( $params [ 'number' ])) { $smarty ->trigger_error( "numbertoword: 'number'" ); return ; } if (! isset ( $params [ 'name1' ]) or ! isset ( $params [ 'name2' ]) or ! isset ( $params [ 'name3' ])) { $smarty ->trigger_error( "numbertoword: 'name1' 'name2' 'name3'" ); return ; } $temp = strval( $params [ 'number' ]); $temp = $temp [utf8_strlen( $temp )-1]; return (( $temp >1 and $temp <5 and (intval( $params [ 'number' ]%100)>19 or intval( $params [ 'number' ]%100)<10))? $params [ 'name2' ]:( $temp ==1? $params [ 'name1' ]: $params [ 'name3' ])); }


After that, it is enough to indicate the type of construction in the template.
{number2word number=$your_number name1= name2= name3=}

ZY Thanks for the amendment to the account * 10- * 20

Source: https://habr.com/ru/post/51887/


All Articles